| 1
2 | 5x
| module.exports=function(e){function t(r){Iif(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t){e.exports=require("boundless-utils-omit-keys")},function(e,t){e.exports=require("classnames")},function(e,t){e.exports=require("react")},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){Iif("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var p=n(2),u=n.n(p),i=n(1),a=n.n(i),l=n(0),c=n.n(l),f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},h=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),d=function(e){return"function"==typeof e},y=function(e){function t(){var e,n,s,p;r(this,t);for(var u=arguments.length,i=Array(u),a=0;a<u;a++)i[a]=arguments[a];return n=s=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),s.state={input:"",isControlled:"string"==typeof s.props.inputProps.value,isFocused:!1},s.setInputValue=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return s.setState({input:e})},s.getValue=function(){return s.refs.field.value},s.handleBlur=function(e){s.setState({isFocused:!1}),d(s.props.inputProps.onBlur)===!0&&s.props.inputProps.onBlur(e)},s.handleFocus=function(e){s.setState({isFocused:!0}),d(s.props.inputProps.onFocus)===!0&&s.props.inputProps.onFocus(e)},s.handleChange=function(e){s.state.isControlled===!1&&s.setInputValue(e.target.value),d(s.props.inputProps.onChange)===!0&&s.props.inputProps.onChange(e)},p=n,o(s,p)}return s(t,e),h(t,[{key:"componentWillMount",value:function(){return this.state.isControlled===!0?this.setInputValue(this.props.inputProps.value):void this.setInputValue(this.props.inputProps.defaultValue)}},{key:"componentWillReceiveProps",value:function(e){e.inputProps.value!==this.props.inputProps.value&&this.setInputValue(e.inputProps.value)}},{key:"setValue",value:function(e){this.setInputValue(e),this.refs.field.value=e,this.state.isControlled===!0&&(this.refs.field.dispatchEvent(new Event("input",{bubbles:!0})),this.refs.field.dispatchEvent(new Event("change",{bubbles:!0})))}},{key:"getPlaceholderText",value:function(){var e=""!==this.state.input,t=this.props.hidePlaceholderOnFocus===!0?this.state.isFocused===!1&&e===!1:e===!1;return t?this.props.inputProps.placeholder:""}},{key:"render",value:function(){return u.a.createElement(this.props.component,f({},c()(this.props,t.internalKeys),{className:a()("b-input-wrapper",this.props.className),title:this.getPlaceholderText()}),u.a.createElement("input",f({},this.props.inputProps,{ref:"field",className:a()("b-input",this.props.inputProps.className),placeholder:null,onBlur:this.handleBlur,onFocus:this.handleFocus,onChange:this.handleChange})),u.a.createElement("div",{className:"b-input-placeholder b-input"},this.getPlaceholderText()))}}]),t}(u.a.PureComponent);y.propTypes={"*":p.PropTypes.any,component:p.PropTypes.string,hidePlaceholderOnFocus:p.PropTypes.bool,inputProps:p.PropTypes.shape({"*":p.PropTypes.any,defaultValue:p.PropTypes.string,onBlur:p.PropTypes.func,onFocus:p.PropTypes.func,onChange:p.PropTypes.func,placeholder:p.PropTypes.string,type:p.PropTypes.string,value:p.PropTypes.string})},y.defaultProps={component:"div",hidePlaceholderOnFocus:!0,inputProps:{type:"text"}},y.internalKeys=Object.keys(y.defaultProps),t.default=y}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIGU3YTJkYjNkM2VhYWEwMDFjM2I4Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9ib3VuZGxlc3MtaW5wdXQvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIndyaXRhYmxlIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCIsIl9leHRlbmRzIiwiYXNzaWduIiwidGFyZ2V0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsImlzRnVuY3Rpb24iLCJ4IiwiSW5wdXQiLCJfUmVhY3QkUHVyZUNvbXBvbmVudCIsIl9yZWYiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsInRoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImdldFByb3RvdHlwZU9mIiwiYXBwbHkiLCJjb25jYXQiLCJzdGF0ZSIsImlucHV0IiwiaXNDb250cm9sbGVkIiwiaW5wdXRQcm9wcyIsImlzRm9jdXNlZCIsInNldElucHV0VmFsdWUiLCJ1bmRlZmluZWQiLCJzZXRTdGF0ZSIsImdldFZhbHVlIiwicmVmcyIsImZpZWxkIiwiaGFuZGxlQmx1ciIsImV2ZW50Iiwib25CbHVyIiwiaGFuZGxlRm9jdXMiLCJvbkZvY3VzIiwiaGFuZGxlQ2hhbmdlIiwib25DaGFuZ2UiLCJkZWZhdWx0VmFsdWUiLCJuZXh0UHJvcHMiLCJuZXh0VmFsdWUiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJidWJibGVzIiwiaXNOb25FbXB0eSIsInNob3VsZFNob3dQbGFjZWhvbGRlciIsImhpZGVQbGFjZWhvbGRlck9uRm9jdXMiLCJwbGFjZWhvbGRlciIsImEiLCJjcmVhdGVFbGVtZW50IiwiY29tcG9uZW50IiwiaW50ZXJuYWxLZXlzIiwiY2xhc3NOYW1lIiwidGl0bGUiLCJnZXRQbGFjZWhvbGRlclRleHQiLCJyZWYiLCJQdXJlQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiKiIsImFueSIsInN0cmluZyIsImJvb2wiLCJzaGFwZSIsImZ1bmMiLCJ0eXBlIiwiZGVmYXVsdFByb3BzIiwia2V5cyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLFFBQ0UsU0FBVUMsR0NHbkIsUUFBQUMsR0FBQUMsR0FHQSxHQUFBQyxFQUFBRCxHQUNBLE1BQUFDLEdBQUFELEdBQUFILE9BR0EsSUFBQUQsR0FBQUssRUFBQUQsSUFDQUUsRUFBQUYsRUFDQUcsR0FBQSxFQUNBTixXQVVBLE9BTkFDLEdBQUFFLEdBQUFJLEtBQUFSLEVBQUFDLFFBQUFELElBQUFDLFFBQUFFLEdBR0FILEVBQUFPLEdBQUEsRUFHQVAsRUFBQUMsUUF2QkEsR0FBQUksS0ErREEsT0FuQ0FGLEdBQUFNLEVBQUFQLEVBR0FDLEVBQUFPLEVBQUFMLEVBR0FGLEVBQUFHLEVBQUEsU0FBQUssR0FBMkMsTUFBQUEsSUFHM0NSLEVBQUFTLEVBQUEsU0FBQVgsRUFBQVksRUFBQUMsR0FDQVgsRUFBQVksRUFBQWQsRUFBQVksSUFDQUcsT0FBQUMsZUFBQWhCLEVBQUFZLEdBQ0FLLGNBQUEsRUFDQUMsWUFBQSxFQUNBQyxJQUFBTixLQU1BWCxFQUFBa0IsRUFBQSxTQUFBckIsR0FDQSxHQUFBYyxHQUFBZCxLQUFBc0IsV0FDQSxXQUEyQixNQUFBdEIsR0FBQSxTQUMzQixXQUFpQyxNQUFBQSxHQUVqQyxPQURBRyxHQUFBUyxFQUFBRSxFQUFBLElBQUFBLEdBQ0FBLEdBSUFYLEVBQUFZLEVBQUEsU0FBQVEsRUFBQUMsR0FBc0QsTUFBQVIsUUFBQVMsVUFBQUMsZUFBQWxCLEtBQUFlLEVBQUFDLElBR3REckIsRUFBQXdCLEVBQUEsR0FHQXhCLElBQUF5QixFQUFBLEtET00sU0FBVTVCLEVBQVFDLEdFdkV4QkQsRUFBQUMsUUFBQTRCLFFBQUEsOEJG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V0FBWXRDLEVBQUEsVUFBVTZFLE9BSWxCSixJQUFLekUsRUFBQSxVQUFVMEUsSUFFZnJCLGFBQWNyRCxFQUFBLFVBQVUyRSxPQUN4QjNCLE9BQVFoRCxFQUFBLFVBQVU4RSxLQUNsQjVCLFFBQVNsRCxFQUFBLFVBQVU4RSxLQUNuQjFCLFNBQVVwRCxFQUFBLFVBQVU4RSxLQUNwQmhCLFlBQWE5RCxFQUFBLFVBQVUyRSxPQUN2QkksS0FBTS9FLEVBQUEsVUFBVTJFLE9BQ2hCOUcsTUFBT21DLEVBQUEsVUFBVTJFLFVBN0JSdEQsRUFpQ1YyRCxjQUNIZixVQUFXLE1BQ1hKLHdCQUF3QixFQUN4QnZCLFlBQ0l5QyxLQUFNLFNBckNHMUQsRUF5Q1Y2QyxhQUFlaEcsT0FBTytHLEtBQUs1RCxFQUFNMkQsY0xtQ3dtTGhHLEVBQTZCLFFLNUU1cExxQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX18pO1xudmFyIF9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTt2YXIgX2NyZWF0ZUNsYXNzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ZmFsc2U7ZGVzY3JpcHRvci5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBkZXNjcmlwdG9yKWRlc2NyaXB0b3Iud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpO319cmV0dXJuIGZ1bmN0aW9uKENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe2lmKHByb3RvUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyk7aWYoc3RhdGljUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyk7cmV0dXJuIENvbnN0cnVjdG9yO307fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTt9fWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsY2FsbCl7aWYoIXNlbGYpe3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTt9cmV0dXJuIGNhbGwmJih0eXBlb2YgY2FsbD09PVwib2JqZWN0XCJ8fHR5cGVvZiBjYWxsPT09XCJmdW5jdGlvblwiKT9jYWxsOnNlbGY7fWZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcyxzdXBlckNsYXNzKXtpZih0eXBlb2Ygc3VwZXJDbGFzcyE9PVwiZnVuY3Rpb25cIiYmc3VwZXJDbGFzcyE9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBzdXBlckNsYXNzKTt9c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyYmc3VwZXJDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzdWJDbGFzcyxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9fSk7aWYoc3VwZXJDbGFzcylPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLHN1cGVyQ2xhc3MpOnN1YkNsYXNzLl9fcHJvdG9fXz1zdXBlckNsYXNzO312YXIgaXNGdW5jdGlvbj1mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpe3JldHVybiB0eXBlb2YgeD09PSdmdW5jdGlvbic7fTt2YXIgSW5wdXQ9ZnVuY3Rpb24oX1JlYWN0JFB1cmVDb21wb25lbnQpe19pbmhlcml0cyhJbnB1dCxfUmVhY3QkUHVyZUNvbXBvbmVudCk7ZnVuY3Rpb24gSW5wdXQoKXt2YXIgX3JlZjt2YXIgX3RlbXAsX3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxJbnB1dCk7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVtcD0oX3RoaXM9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1JbnB1dC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihJbnB1dCkpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29uY2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLnN0YXRlPXtpbnB1dDonJyxpc0NvbnRyb2xsZWQ6dHlwZW9mIF90aGlzLnByb3BzLmlucHV0UHJvcHMudmFsdWU9PT0nc3RyaW5nJyxpc0ZvY3VzZWQ6ZmFsc2V9LF90aGlzLnNldElucHV0VmFsdWU9ZnVuY3Rpb24oKXt2YXIgdmFsdWU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOicnO3JldHVybiBfdGhpcy5zZXRTdGF0ZSh7aW5wdXQ6dmFsdWV9KTt9LF90aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzLnJlZnMuZmllbGQudmFsdWU7fSxfdGhpcy5oYW5kbGVCbHVyPWZ1bmN0aW9uKGV2ZW50KXtfdGhpcy5zZXRTdGF0ZSh7aXNGb2N1c2VkOmZhbHNlfSk7aWYoaXNGdW5jdGlvbihfdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQmx1cik9PT10cnVlKXtfdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQmx1cihldmVudCk7fX0sX3RoaXMuaGFuZGxlRm9jdXM9ZnVuY3Rpb24oZXZlbnQpe190aGlzLnNldFN0YXRlKHtpc0ZvY3VzZWQ6dHJ1ZX0pO2lmKGlzRnVuY3Rpb24oX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkZvY3VzKT09PXRydWUpe190aGlzLnByb3BzLmlucHV0UHJvcHMub25Gb2N1cyhldmVudCk7fX0sX3RoaXMuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKGV2ZW50KXtpZihfdGhpcy5zdGF0ZS5pc0NvbnRyb2xsZWQ9PT1mYWxzZSl7X3RoaXMuc2V0SW5wdXRWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO31pZihpc0Z1bmN0aW9uKF90aGlzLnByb3BzLmlucHV0UHJvcHMub25DaGFuZ2UpPT09dHJ1ZSl7X3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZShldmVudCk7fX0sX3RlbXApLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLF9yZXQpO31fY3JlYXRlQ2xhc3MoSW5wdXQsW3trZXk6J2NvbXBvbmVudFdpbGxNb3VudCcsdmFsdWU6ZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCl7aWYodGhpcy5zdGF0ZS5pc0NvbnRyb2xsZWQ9PT10cnVlKXtyZXR1cm4gdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMucHJvcHMuaW5wdXRQcm9wcy52YWx1ZSk7fXRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnByb3BzLmlucHV0UHJvcHMuZGVmYXVsdFZhbHVlKTt9fSx7a2V5Oidjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyx2YWx1ZTpmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyl7aWYobmV4dFByb3BzLmlucHV0UHJvcHMudmFsdWUhPT10aGlzLnByb3BzLmlucHV0UHJvcHMudmFsdWUpe3RoaXMuc2V0SW5wdXRWYWx1ZShuZXh0UHJvcHMuaW5wdXRQcm9wcy52YWx1ZSk7fX19LHtrZXk6J3NldFZhbHVlJyx2YWx1ZTpmdW5jdGlvbiBzZXRWYWx1ZShuZXh0VmFsdWUpe3RoaXMuc2V0SW5wdXRWYWx1ZShuZXh0VmFsdWUpO3RoaXMucmVmcy5maWVsZC52YWx1ZT1uZXh0VmFsdWU7aWYodGhpcy5zdGF0ZS5pc0NvbnRyb2xsZWQ9PT10cnVlKXt0aGlzLnJlZnMuZmllbGQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0Jyx7YnViYmxlczp0cnVlfSkpO3RoaXMucmVmcy5maWVsZC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJyx7YnViYmxlczp0cnVlfSkpO319fSx7a2V5OidnZXRQbGFjZWhvbGRlclRleHQnLHZhbHVlOmZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyVGV4dCgpe3ZhciBpc05vbkVtcHR5PXRoaXMuc3RhdGUuaW5wdXQhPT0nJzt2YXIgc2hvdWxkU2hvd1BsYWNlaG9sZGVyPXRoaXMucHJvcHMuaGlkZVBsYWNlaG9sZGVyT25Gb2N1cz09PXRydWU/dGhpcy5zdGF0ZS5pc0ZvY3VzZWQ9PT1mYWxzZSYmaXNOb25FbXB0eT09PWZhbHNlOmlzTm9uRW1wdHk9PT1mYWxzZTtyZXR1cm4gc2hvdWxkU2hvd1BsYWNlaG9sZGVyP3RoaXMucHJvcHMuaW5wdXRQcm9wcy5wbGFjZWhvbGRlcjonJzt9fSx7a2V5OidyZW5kZXInLHZhbHVlOmZ1bmN0aW9uIHJlbmRlcigpe3JldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLmNvbXBvbmVudCxfZXh0ZW5kcyh7fSxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQoKSh0aGlzLnByb3BzLElucHV0LmludGVybmFsS2V5cykse2NsYXNzTmFtZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQoKSgnYi1pbnB1dC13cmFwcGVyJyx0aGlzLnByb3BzLmNsYXNzTmFtZSksdGl0bGU6dGhpcy5nZXRQbGFjZWhvbGRlclRleHQoKX0pLF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KCdpbnB1dCcsX2V4dGVuZHMoe30sdGhpcy5wcm9wcy5pbnB1dFByb3BzLHtyZWY6J2ZpZWxkJyxjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2ItaW5wdXQnLHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jbGFzc05hbWUpLHBsYWNlaG9sZGVyOm51bGwsb25CbHVyOnRoaXMuaGFuZGxlQmx1cixvbkZvY3VzOnRoaXMuaGFuZGxlRm9jdXMsb25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2V9KSksX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2Rpdicse2NsYXNzTmFtZTonYi1pbnB1dC1wbGFjZWhvbGRlciBiLWlucHV0J30sdGhpcy5nZXRQbGFjZWhvbGRlclRleHQoKSkpO319XSk7cmV0dXJuIElucHV0O30oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLlB1cmVDb21wb25lbnQpO0lucHV0LnByb3BUeXBlcz17JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFueSxjb21wb25lbnQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLGhpZGVQbGFjZWhvbGRlck9uRm9jdXM6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uYm9vbCxpbnB1dFByb3BzOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLnNoYXBlKHsnKic6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uYW55LGRlZmF1bHRWYWx1ZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zdHJpbmcsb25CbHVyOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMsb25Gb2N1czpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5mdW5jLG9uQ2hhbmdlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMscGxhY2Vob2xkZXI6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLHR5cGU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLHZhbHVlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLnN0cmluZ30pfTtJbnB1dC5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDonZGl2JyxoaWRlUGxhY2Vob2xkZXJPbkZvY3VzOnRydWUsaW5wdXRQcm9wczp7dHlwZTondGV4dCd9fTtJbnB1dC5pbnRlcm5hbEtleXM9T2JqZWN0LmtleXMoSW5wdXQuZGVmYXVsdFByb3BzKTsvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gSW5wdXQ7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gaW5kZXguanMiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBlN2EyZGIzZDNlYWFhMDAxYzNiOCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCJ9XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJjbGFzc25hbWVzXCJ9XG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuXG5jb25zdCBpc0Z1bmN0aW9uID0gKHgpID0+IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuXG4vKipcbl9fQW4gaW5wdXQgY29udHJvbCB3aXRoIHBsYWNlaG9sZGVyIGVtdWxhdGlvbiBmb3Igbm9uLXN1cHBvcnRpbmcgcGxhdGZvcm1zLl9fXG5cbklucHV0IGFic3RyYWN0cyBhd2F5IHRoZSBjcm9zcy1wbGF0Zm9ybSBkaWZmZXJlbmNlcyBvZiBwbGFjZWhvbGRlciBzdHlsaW5nIGFuZCBiZWhhdmlvcnMsIGZvciBleGFtcGxlOiBJbnRlcm5ldCBFeHBsb3JlciBkaXNtaXNzZXMgbmF0aXZlIHBsYWNlaG9sZGVycyBvbiBpbnB1dCBmb2N1cyBhbmQgb3RoZXIgcGxhdGZvcm1zIGRvIG5vdC4gVGhpcyBjb21wb25lbnQgZW5zdXJlcyB0aGF0IHRleHQgaW5wdXQgY29udHJvbHMgd2lsbCBmZWVsIGFuZCBiZWhhdmUgc2ltaWxhcmx5IG9uIG1vcmUgZGV2aWNlcy5cblxuIyMgQ29tcG9uZW50IEluc3RhbmNlIE1ldGhvZHNcblxuV2hlbiB1c2luZyBgSW5wdXRgIGluIHlvdXIgcHJvamVjdCwgeW91IG1heSBjYWxsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbiBhIHJlbmRlcmVkIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQuIFVzZSBbYHJlZnNgXShodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3JlZnMtYW5kLXRoZS1kb20uaHRtbCkgdG8gZ2V0IHRoZSBpbnN0YW5jZS5cblxuLSBfX2dldFZhbHVlKClfX1xuICByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZFxuXG4tIF9fc2V0VmFsdWUoc3RyaW5nKV9fXG4gIHByb2dyYW1tYXRpY2FsbHkgc2V0IHRoZSBpbnB1dCB2YWx1ZTsgdXNlZnVsIGZvciBjbGVhcmluZyBvdXQgdGhlIGlucHV0IGluIFwidW5jb250cm9sbGVkXCIgbW9kZSAtLSBub3RlIHRoYXQgZGlnZ2luZyBpbnRvIHRoZSBpbnRlcm5hbHMgYW5kIHNldHRpbmcgdGhlIGByZWZzLmZpZWxkLnZhbHVlID0gJydgIGRpcmVjdGx5IHdpbGwgbm90IHRyaWdnZXIgZXZlbnRzIGFuZCBtZXNzZXMgdXAgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjb21wb25lbnRcblxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICovXG4gICAgICAgICcqJzogUHJvcFR5cGVzLmFueSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogb3ZlcnJpZGVzIHRoZSBIVE1MIGNvbnRhaW5lciB0YWdcbiAgICAgICAgICovXG4gICAgICAgIGNvbXBvbmVudDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogdHJpZ2dlcnMgdGhlIHBsYWNlaG9sZGVyIHRvIGRpc2FwcGVhciB3aGVuIHRoZSBpbnB1dCBmaWVsZCBpcyBmb2N1c2VkLCByZWFwcGVhcnMgd2hlbiB0aGUgdXNlciBoYXMgdGFiYmVkIGF3YXkgb3IgZm9jdXMgaXMgbW92ZWRcbiAgICAgICAgICovXG4gICAgICAgIGhpZGVQbGFjZWhvbGRlck9uRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgICAgIGlucHV0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGFueSBbUmVhY3Qtc3VwcG9ydGVkIGF0dHJpYnV0ZV0oaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90YWdzLWFuZC1hdHRyaWJ1dGVzLmh0bWwjaHRtbC1hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAnKic6IFByb3BUeXBlcy5hbnksXG5cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgICAgICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB9KSxcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBjb21wb25lbnQ6ICdkaXYnLFxuICAgICAgICBoaWRlUGxhY2Vob2xkZXJPbkZvY3VzOiB0cnVlLFxuICAgICAgICBpbnB1dFByb3BzOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgfVxuXG4gICAgc3RhdGljIGludGVybmFsS2V5cyA9IE9iamVjdC5rZXlzKElucHV0LmRlZmF1bHRQcm9wcylcblxuICAgIHN0YXRlID0ge1xuICAgICAgICBpbnB1dDogJycsXG4gICAgICAgIGlzQ29udHJvbGxlZDogdHlwZW9mIHRoaXMucHJvcHMuaW5wdXRQcm9wcy52YWx1ZSA9PT0gJ3N0cmluZycsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0NvbnRyb2xsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldElucHV0VmFsdWUodGhpcy5wcm9wcy5pbnB1dFByb3BzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnByb3BzLmlucHV0UHJvcHMuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICBpZiAobmV4dFByb3BzLmlucHV0UHJvcHMudmFsdWUgIT09IHRoaXMucHJvcHMuaW5wdXRQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG5leHRQcm9wcy5pbnB1dFByb3BzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldElucHV0VmFsdWUgPSAodmFsdWUgPSAnJykgPT4gdGhpcy5zZXRTdGF0ZSh7aW5wdXQ6IHZhbHVlfSlcblxuICAgIGdldFZhbHVlID0gKCkgPT4gdGhpcy5yZWZzLmZpZWxkLnZhbHVlXG5cbiAgICBzZXRWYWx1ZShuZXh0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgICAgIHRoaXMucmVmcy5maWVsZC52YWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0NvbnRyb2xsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIHNpbXVsYXRlIGlucHV0IGNoYW5nZSBldmVudCBmbG93XG4gICAgICAgICAgICB0aGlzLnJlZnMuZmllbGQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0Jywge2J1YmJsZXM6IHRydWV9KSk7XG4gICAgICAgICAgICB0aGlzLnJlZnMuZmllbGQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHtidWJibGVzOiB0cnVlfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1ciA9IChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtpc0ZvY3VzZWQ6IGZhbHNlfSk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQmx1cikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXMgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNGb2N1c2VkOiB0cnVlfSk7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uRm9jdXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0UHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gZm9yIFwiY29udHJvbGxlZFwiIHNjZW5hcmlvcywgdXBkYXRlcyB0byB0aGUgY2FjaGVkIGlucHV0IHRleHQgc2hvdWxkIGNvbWVcbiAgICAgICAgLy8gZXhjbHVzaXZlbHkgdmlhIHByb3BzIChjV1JQKSBzbyBpdCBleGFjdGx5IG1pcnJvcnMgdGhlIGN1cnJlbnQgYXBwbGljYXRpb25cbiAgICAgICAgLy8gc3RhdGUsIG90aGVyd2lzZSBhIHJlLXJlbmRlciB3aWxsIG9jY3VyIGJlZm9yZSB0aGUgbmV3IHRleHQgaGFzIGNvbXBsZXRlZCBpdHNcbiAgICAgICAgLy8gZmVlZGJhY2sgbG9vcCBhbmQgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyBsb3N0XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmlzQ29udHJvbGxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2hhbmdlKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBsYWNlaG9sZGVyVGV4dCgpIHtcbiAgICAgICAgY29uc3QgaXNOb25FbXB0eSA9IHRoaXMuc3RhdGUuaW5wdXQgIT09ICcnO1xuICAgICAgICBjb25zdCBzaG91bGRTaG93UGxhY2Vob2xkZXIgPSB0aGlzLnByb3BzLmhpZGVQbGFjZWhvbGRlck9uRm9jdXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnN0YXRlLmlzRm9jdXNlZCA9PT0gZmFsc2UgJiYgaXNOb25FbXB0eSA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc05vbkVtcHR5ID09PSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gc2hvdWxkU2hvd1BsYWNlaG9sZGVyID8gdGhpcy5wcm9wcy5pbnB1dFByb3BzLnBsYWNlaG9sZGVyIDogJyc7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoaXMucHJvcHMuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgey4uLm9taXQodGhpcy5wcm9wcywgSW5wdXQuaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KCdiLWlucHV0LXdyYXBwZXInLCB0aGlzLnByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgdGl0bGU9e3RoaXMuZ2V0UGxhY2Vob2xkZXJUZXh0KCl9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wcy5pbnB1dFByb3BzfVxuICAgICAgICAgICAgICAgICAgICByZWY9J2ZpZWxkJ1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KCdiLWlucHV0JywgdGhpcy5wcm9wcy5pbnB1dFByb3BzLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtudWxsfVxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17dGhpcy5oYW5kbGVGb2N1c31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSAvPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2ItaW5wdXQtcGxhY2Vob2xkZXIgYi1pbnB1dCc+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldFBsYWNlaG9sZGVyVGV4dCgpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90aGlzLnByb3BzLmNvbXBvbmVudD5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9wYWNrYWdlcy9ib3VuZGxlc3MtaW5wdXQvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9 |