New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

boundless-checkbox

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

boundless-checkbox - npm Package Compare versions

Comparing version 1.0.4 to 1.1.0

4

build/index.js

@@ -1,2 +0,2 @@

module.exports=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=4)}([function(e,n){e.exports=require("boundless-utils-omit-keys")},function(e,n){e.exports=require("boundless-utils-uuid")},function(e,n){e.exports=require("classnames")},function(e,n){e.exports=require("react")},function(e,n,t){"use strict";function r(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function o(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?e:n}function p(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}Object.defineProperty(n,"__esModule",{value:!0});var i=t(3),s=(t.n(i),t(2)),c=t.n(s),u=t(0),a=t.n(u),l=t(1),h=t.n(l),f=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},d=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),b=function(e){return"function"==typeof e},y=function(){},P=function(e){function n(){var e,t,p,i;r(this,n);for(var s=arguments.length,c=Array(s),u=0;u<s;u++)c[u]=arguments[u];return t=p=o(this,(e=n.__proto__||Object.getPrototypeOf(n)).call.apply(e,[this].concat(c))),p.id=h()(),p.handleChange=function(e){p.props.inputProps.disabled||(p.props[p.props.inputProps.checked?"onUnchecked":"onChecked"](p.props.inputProps.name),b(p.props.inputProps.onChange)&&p.props.inputProps.onChange(e))},p.handleClick=function(e){p.props.inputProps.disabled||(p.refs.input.focus(),b(p.props.inputProps.onClick)&&p.props.inputProps.onClick(e))},i=t,o(p,i)}return p(n,e),d(n,[{key:"componentDidMount",value:function(){this.props.inputProps.indeterminate&&this.setIndeterminate()}},{key:"componentDidUpdate",value:function(e){e.inputProps.indeterminate!==this.props.inputProps.indeterminate&&this.setIndeterminate()}},{key:"setIndeterminate",value:function(){this.refs.input.indeterminate=!!this.props.inputProps.indeterminate}},{key:"getAriaState",value:function(){return this.props.inputProps.indeterminate?"mixed":String(this.props.inputProps.checked)}},{key:"renderInput",value:function(){return t.i(i.createElement)("input",f({},a()(this.props.inputProps,"indeterminate"),{ref:"input",type:"checkbox",className:c()("b-checkbox",this.props.inputProps.className,{"b-checkbox-mixed":this.props.inputProps.indeterminate,"b-checkbox-checked":this.props.inputProps.checked,"b-checkbox-unchecked":!this.props.inputProps.indeterminate&&!this.props.inputProps.checked}),id:this.props.inputProps.id||this.id,"aria-checked":this.getAriaState(),onChange:this.handleChange,onClick:this.handleClick}))}},{key:"renderLabel",value:function(){if(this.props.label)return t.i(i.createElement)("label",f({},this.props.labelProps,{ref:"label",className:c()("b-checkbox-label",this.props.labelProps.className),htmlFor:this.props.inputProps.id||this.id}),this.props.label)}},{key:"render",value:function(){return t.i(i.createElement)(this.props.component,f({},a()(this.props,n.internalKeys),{ref:"wrapper",className:c()("b-checkbox-wrapper",this.props.className)}),this.renderInput(),this.renderLabel())}}]),n}(i.PureComponent);P.propTypes={"*":i.PropTypes.any,component:i.PropTypes.string,inputProps:i.PropTypes.shape({"*":i.PropTypes.any,checked:i.PropTypes.bool,className:i.PropTypes.string,disabled:i.PropTypes.bool,id:i.PropTypes.string,indeterminate:i.PropTypes.bool,onChange:i.PropTypes.func,onClick:i.PropTypes.func,name:i.PropTypes.string,value:i.PropTypes.string}),label:i.PropTypes.node,labelProps:i.PropTypes.shape({"*":i.PropTypes.any}),onChecked:i.PropTypes.func,onUnchecked:i.PropTypes.func},P.defaultProps={component:"div",inputProps:{checked:!1,indeterminate:!1},label:null,labelProps:{},onChecked:y,onUnchecked:y},P.internalKeys=Object.keys(P.defaultProps),n.default=P}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDU2N2FkYWQwNzY0MzQ3MzA2ZmViIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLXV1aWRcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifSIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9ib3VuZGxlc3MtY2hlY2tib3gvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIndyaXRhYmxlIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc191dWlkX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX3V1aWRfX19kZWZhdWx0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiaXNGdW5jdGlvbiIsIngiLCJub29wIiwiQ2hlY2tib3giLCJfUHVyZUNvbXBvbmVudCIsIl9yZWYiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsInRoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImdldFByb3RvdHlwZU9mIiwiYXBwbHkiLCJjb25jYXQiLCJpZCIsImhhbmRsZUNoYW5nZSIsImV2ZW50IiwiaW5wdXRQcm9wcyIsImRpc2FibGVkIiwiY2hlY2tlZCIsIm9uQ2hhbmdlIiwiaGFuZGxlQ2xpY2siLCJyZWZzIiwiaW5wdXQiLCJmb2N1cyIsIm9uQ2xpY2siLCJpbmRldGVybWluYXRlIiwic2V0SW5kZXRlcm1pbmF0ZSIsInByZXZQcm9wcyIsIlN0cmluZyIsInJlZiIsInR5cGUiLCJjbGFzc05hbWUiLCJiLWNoZWNrYm94LW1peGVkIiwiYi1jaGVja2JveC1jaGVja2VkIiwiYi1jaGVja2JveC11bmNoZWNrZWQiLCJhcmlhLWNoZWNrZWQiLCJnZXRBcmlhU3RhdGUiLCJsYWJlbCIsImxhYmVsUHJvcHMiLCJodG1sRm9yIiwiY29tcG9uZW50IiwiaW50ZXJuYWxLZXlzIiwicmVuZGVySW5wdXQiLCJyZW5kZXJMYWJlbCIsInByb3BUeXBlcyIsIioiLCJhbnkiLCJzdHJpbmciLCJzaGFwZSIsImJvb2wiLCJmdW5jIiwibm9kZSIsIm9uQ2hlY2tlZCIsIm9uVW5jaGVja2VkIiwiZGVmYXVsdFByb3BzIiwia2V5cyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLFFBQ0UsU0FBVUMsR0NHbkIsUUFBQUMsR0FBQUMsR0FHQSxHQUFBQyxFQUFBRCxHQUNBLE1BQUFDLEdBQUFELEdBQUFILE9BR0EsSUFBQUQsR0FBQUssRUFBQUQsSUFDQUUsRUFBQUYsRUFDQUcsR0FBQSxFQUNBTixXQVVBLE9BTkFDLEdBQUFFLEdBQUFJLEtBQUFSLEVBQUFDLFFBQUFELElBQUFDLFFBQUFFLEdBR0FILEVBQUFPLEdBQUEsRUFHQVAsRUFBQUMsUUF2QkEsR0FBQUksS0ErREEsT0FuQ0FGLEdBQUFNLEVBQUFQLEVBR0FDLEVBQUFPLEVBQUFMLEVBR0FGLEVBQUFHLEVBQUEsU0FBQUssR0FBMkMsTUFBQUEsSUFHM0NSLEVBQUFTLEVBQUEsU0FBQVgsRUFBQVksRUFBQUMsR0FDQVgsRUFBQVksRUFBQWQsRUFBQVksSUFDQUcsT0FBQUMsZUFBQWhCLEVBQUFZLEdBQ0FLLGNBQUEsRUFDQUMsWUFBQSxFQUNBQyxJQUFBTixLQU1BWCxFQUFBa0IsRUFBQSxTQUFBckIsR0FDQSxHQUFBYyxHQUFBZCxLQUFBc0IsV0FDQSxXQUEyQixNQUFBdEIsR0FBQSxTQUMzQixXQUFpQyxNQUFBQSxHQUVqQyxPQURBRyxHQUFBUyxFQUFBRSxFQUFBLElBQUFBLEdBQ0FBLEdBSUFYLEVBQUFZLEVBQUEsU0FBQVEsRUFBQUMsR0FBc0QsTUFBQVIsUUFBQVMsVUFBQUMsZUFBQWxCLEtBQUFlLEVBQUFDLElB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NUIsUUFBUzFDLEVBQUEsVUFBVXlFLEtBRW5CbEIsVUFBV3ZELEVBQUEsVUFBVXVFLE9BS3JCOUIsU0FBVXpDLEVBQUEsVUFBVXlFLEtBQ3BCcEMsR0FBSXJDLEVBQUEsVUFBVXVFLE9BS2R0QixjQUFlakQsRUFBQSxVQUFVeUUsS0FFekI5QixTQUFVM0MsRUFBQSxVQUFVMEUsS0FDcEIxQixRQUFTaEQsRUFBQSxVQUFVMEUsS0FLbkIzRyxLQUFNaUMsRUFBQSxVQUFVdUUsT0FLaEIxRyxNQUFPbUMsRUFBQSxVQUFVdUUsU0FNckJWLE1BQU83RCxFQUFBLFVBQVUyRSxLQUVqQmIsV0FBWTlELEVBQUEsVUFBVXdFLE9BSWxCSCxJQUFLckUsRUFBQSxVQUFVc0UsTUFNbkJNLFVBQVc1RSxFQUFBLFVBQVUwRSxLQUtyQkcsWUFBYTdFLEVBQUEsVUFBVTBFLE1BekVWbkQsRUE0RVZ1RCxjQUNIZCxVQUFXLE1BQ1h4QixZQUNJRSxTQUFTLEVBQ1RPLGVBQWUsR0FFbkJZLE1BQU8sS0FDUEMsY0FDQWMsVUFBV3RELEVBQ1h1RCxZQUFhdkQsR0FyRkFDLEVBd0ZWMEMsYUFBZS9GLE9BQU82RyxLQUFLeEQsRUFBU3VELGNOSzJoTTlGLEVBQTZCLFFNN0ZsbE11QyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvdW5kbGVzcy11dGlscy11dWlkXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2xhc3NuYW1lc1wiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9jbGFzc25hbWVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc191dWlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfdXVpZF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc191dWlkX18pO1xudmFyIF9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTt2YXIgX2NyZWF0ZUNsYXNzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ZmFsc2U7ZGVzY3JpcHRvci5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBkZXNjcmlwdG9yKWRlc2NyaXB0b3Iud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpO319cmV0dXJuIGZ1bmN0aW9uKENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe2lmKHByb3RvUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyk7aWYoc3RhdGljUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyk7cmV0dXJuIENvbnN0cnVjdG9yO307fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTt9fWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsY2FsbCl7aWYoIXNlbGYpe3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTt9cmV0dXJuIGNhbGwmJih0eXBlb2YgY2FsbD09PVwib2JqZWN0XCJ8fHR5cGVvZiBjYWxsPT09XCJmdW5jdGlvblwiKT9jYWxsOnNlbGY7fWZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcyxzdXBlckNsYXNzKXtpZih0eXBlb2Ygc3VwZXJDbGFzcyE9PVwiZnVuY3Rpb25cIiYmc3VwZXJDbGFzcyE9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBzdXBlckNsYXNzKTt9c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyYmc3VwZXJDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzdWJDbGFzcyxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9fSk7aWYoc3VwZXJDbGFzcylPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLHN1cGVyQ2xhc3MpOnN1YkNsYXNzLl9fcHJvdG9fXz1zdXBlckNsYXNzO312YXIgaXNGdW5jdGlvbj1mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpe3JldHVybiB0eXBlb2YgeD09PSdmdW5jdGlvbic7fTt2YXIgbm9vcD1mdW5jdGlvbiBub29wKCl7fTt2YXIgQ2hlY2tib3g9ZnVuY3Rpb24oX1B1cmVDb21wb25lbnQpe19pbmhlcml0cyhDaGVja2JveCxfUHVyZUNvbXBvbmVudCk7ZnVuY3Rpb24gQ2hlY2tib3goKXt2YXIgX3JlZjt2YXIgX3RlbXAsX3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxDaGVja2JveCk7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVtcD0oX3RoaXM9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1DaGVja2JveC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihDaGVja2JveCkpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29uY2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLmlkPV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfdXVpZF9fX2RlZmF1bHQoKSgpLF90aGlzLmhhbmRsZUNoYW5nZT1mdW5jdGlvbihldmVudCl7aWYoX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5kaXNhYmxlZCl7cmV0dXJuO31fdGhpcy5wcm9wc1shX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkPydvbkNoZWNrZWQnOidvblVuY2hlY2tlZCddKF90aGlzLnByb3BzLmlucHV0UHJvcHMubmFtZSk7aWYoaXNGdW5jdGlvbihfdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2hhbmdlKSl7X3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZShldmVudCk7fX0sX3RoaXMuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZXZlbnQpe2lmKF90aGlzLnByb3BzLmlucHV0UHJvcHMuZGlzYWJsZWQpe3JldHVybjt9X3RoaXMucmVmcy5pbnB1dC5mb2N1cygpO2lmKGlzRnVuY3Rpb24oX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKSl7X3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKGV2ZW50KTt9fSxfdGVtcCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsX3JldCk7fV9jcmVhdGVDbGFzcyhDaGVja2JveCxbe2tleTonY29tcG9uZW50RGlkTW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCl7aWYodGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUpe3RoaXMuc2V0SW5kZXRlcm1pbmF0ZSgpO319fSx7a2V5Oidjb21wb25lbnREaWRVcGRhdGUnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpe2lmKHByZXZQcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUhPT10aGlzLnByb3BzLmlucHV0UHJvcHMuaW5kZXRlcm1pbmF0ZSl7dGhpcy5zZXRJbmRldGVybWluYXRlKCk7fX19LHtrZXk6J3NldEluZGV0ZXJtaW5hdGUnLHZhbHVlOmZ1bmN0aW9uIHNldEluZGV0ZXJtaW5hdGUoKXt0aGlzLnJlZnMuaW5wdXQuaW5kZXRlcm1pbmF0ZT0hIXRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlO319LHtrZXk6J2dldEFyaWFTdGF0ZScsdmFsdWU6ZnVuY3Rpb24gZ2V0QXJpYVN0YXRlKCl7cmV0dXJuIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlPydtaXhlZCc6U3RyaW5nKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkKTt9fSx7a2V5OidyZW5kZXJJbnB1dCcsdmFsdWU6ZnVuY3Rpb24gcmVuZGVySW5wdXQoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiY3JlYXRlRWxlbWVudFwiXSkoJ2lucHV0JyxfZXh0ZW5kcyh7fSxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQoKSh0aGlzLnByb3BzLmlucHV0UHJvcHMsJ2luZGV0ZXJtaW5hdGUnKSx7cmVmOidpbnB1dCcsdHlwZTonY2hlY2tib3gnLGNsYXNzTmFtZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfY2xhc3NuYW1lc19fX2RlZmF1bHQoKSgnYi1jaGVja2JveCcsdGhpcy5wcm9wcy5pbnB1dFByb3BzLmNsYXNzTmFtZSx7J2ItY2hlY2tib3gtbWl4ZWQnOnRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlLCdiLWNoZWNrYm94LWNoZWNrZWQnOnRoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkLCdiLWNoZWNrYm94LXVuY2hlY2tlZCc6IXRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlJiYhdGhpcy5wcm9wcy5pbnB1dFByb3BzLmNoZWNrZWR9KSxpZDp0aGlzLnByb3BzLmlucHV0UHJvcHMuaWR8fHRoaXMuaWQsJ2FyaWEtY2hlY2tlZCc6dGhpcy5nZXRBcmlhU3RhdGUoKSxvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxvbkNsaWNrOnRoaXMuaGFuZGxlQ2xpY2t9KSk7fX0se2tleToncmVuZGVyTGFiZWwnLHZhbHVlOmZ1bmN0aW9uIHJlbmRlckxhYmVsKCl7aWYodGhpcy5wcm9wcy5sYWJlbCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKCdsYWJlbCcsX2V4dGVuZHMoe30sdGhpcy5wcm9wcy5sYWJlbFByb3BzLHtyZWY6J2xhYmVsJyxjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2ItY2hlY2tib3gtbGFiZWwnLHRoaXMucHJvcHMubGFiZWxQcm9wcy5jbGFzc05hbWUpLGh0bWxGb3I6dGhpcy5wcm9wcy5pbnB1dFByb3BzLmlkfHx0aGlzLmlkfSksdGhpcy5wcm9wcy5sYWJlbCk7fX19LHtrZXk6J3JlbmRlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKHRoaXMucHJvcHMuY29tcG9uZW50LF9leHRlbmRzKHt9LF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCgpKHRoaXMucHJvcHMsQ2hlY2tib3guaW50ZXJuYWxLZXlzKSx7cmVmOid3cmFwcGVyJyxjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2ItY2hlY2tib3gtd3JhcHBlcicsdGhpcy5wcm9wcy5jbGFzc05hbWUpfSksdGhpcy5yZW5kZXJJbnB1dCgpLHRoaXMucmVuZGVyTGFiZWwoKSk7fX1dKTtyZXR1cm4gQ2hlY2tib3g7fShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlB1cmVDb21wb25lbnRcIl0pO0NoZWNrYm94LnByb3BUeXBlcz17JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFueSxjb21wb25lbnQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLGlucHV0UHJvcHM6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc2hhcGUoeycqJzpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5hbnksY2hlY2tlZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5ib29sLGNsYXNzTmFtZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zdHJpbmcsZGlzYWJsZWQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uYm9vbCxpZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zdHJpbmcsaW5kZXRlcm1pbmF0ZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5ib29sLG9uQ2hhbmdlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmMsb25DbGljazpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5mdW5jLG5hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXCJQcm9wVHlwZXNcIl0uc3RyaW5nLHZhbHVlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLnN0cmluZ30pLGxhYmVsOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLm5vZGUsbGFiZWxQcm9wczpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5zaGFwZSh7JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmFueX0pLG9uQ2hlY2tlZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcIlByb3BUeXBlc1wiXS5mdW5jLG9uVW5jaGVja2VkOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1wiUHJvcFR5cGVzXCJdLmZ1bmN9O0NoZWNrYm94LmRlZmF1bHRQcm9wcz17Y29tcG9uZW50OidkaXYnLGlucHV0UHJvcHM6e2NoZWNrZWQ6ZmFsc2UsaW5kZXRlcm1pbmF0ZTpmYWxzZX0sbGFiZWw6bnVsbCxsYWJlbFByb3BzOnt9LG9uQ2hlY2tlZDpub29wLG9uVW5jaGVja2VkOm5vb3B9O0NoZWNrYm94LmludGVybmFsS2V5cz1PYmplY3Qua2V5cyhDaGVja2JveC5kZWZhdWx0UHJvcHMpOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSBDaGVja2JveDtcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBpbmRleC5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDU2N2FkYWQwNzY0MzQ3MzA2ZmViIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy1vbWl0LWtleXNcIn1cbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLXV1aWRcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtdXVpZFwifVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiY2xhc3NuYW1lc1wifVxuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcInJlYWN0XCJ9XG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7Y3JlYXRlRWxlbWVudCwgUHJvcFR5cGVzLCBQdXJlQ29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuaW1wb3J0IHV1aWQgZnJvbSAnYm91bmRsZXNzLXV0aWxzLXV1aWQnO1xuXG5jb25zdCBpc0Z1bmN0aW9uID0gKHgpID0+IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbkNoZWNrYm94IGlzIGltcGxlbWVudGVkIGFzIGEgXCJjb250cm9sbGVkIGlucHV0XCIsIG1lYW5pbmcgaXQgaXMgYSBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIGRhdGEgcGFzc2VkXG5pbnNpZGUuIFVzZXIgaW50ZXJhY3Rpb24gd2lsbCBidWJibGUgY2hhbmdlcyBpbiB0aGUgZm9ybSBvZiBgb25DaGVja2VkYCBhbmQgYG9uVW5jaGVja2VkYCB0aGF0IGEgY29udHJvbGxlclxudmlldyBtdXN0IGludGVyY2VwdCBhbmQgYXBwbHkgYWdhaW5zdCB0aGUgZGF0YSBwcm92aWRlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hlY2tib3ggZXh0ZW5kcyBQdXJlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogYW55IFtSZWFjdC1zdXBwb3J0ZWQgYXR0cmlidXRlXShodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RhZ3MtYW5kLWF0dHJpYnV0ZXMuaHRtbCNodG1sLWF0dHJpYnV0ZXMpXG4gICAgICAgICAqL1xuICAgICAgICAnKic6IFByb3BUeXBlcy5hbnksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFueSB2YWxpZCBIVE1MIHRhZyBuYW1lXG4gICAgICAgICAqL1xuICAgICAgICBjb21wb25lbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFsbCBpbnB1dC1zcGVjaWZpYyBwcm9wcyBsaWtlIGB2YWx1ZWAsIGBuYW1lYCwgZXRjIHNob3VsZCBiZSBwYXNzZWQgaGVyZSAtLSBjb21tb24gb25lcyBhcmUgbGlzdGVkIGJlbG93XG4gICAgICAgICAqL1xuICAgICAgICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRldGVybWluZXMgaWYgdGhlIGNoZWNrYm94IGlzIHJlbmRlcmVkIGFzIGNoZWNrZWQvdW5jaGVja2VkLCBzZWUgUmVhY3QgW1wiY29udHJvbGxlZCBpbnB1dHNcIl0oaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50cykpXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgICAgICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogcHJldmVudHMgdGhlIGBvbntDaGVja2VkLFVuY2hlY2tlZH1gIGV2ZW50cyBmcm9tIGZpcmluZyB3aGVuIGB0cnVlYFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBlbmFibGVzIG9yIGRpc2FibGVzIFwibWl4ZWRcIiBjaGVja2JveCBzdGF0ZSwgcmVhZCB0aGlzIFtDU1MtVHJpY2tzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vaW5kZXRlcm1pbmF0ZS1jaGVja2JveGVzLykgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgICAgICAgICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICAgICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogcmVuZGVyZWQgYXMgdGhlIGlucHV0IGNvbnRyb2wncyBmb3JtIG5hbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiAgcGFzc2VkLXRocm91Z2ggdG8gdGhlIGlucHV0IG5vZGUsIGxpa2UgYG5hbWVgXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB9KSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogYW55IFJlYWN0LXJlbmRlcmFibGUgY29udGVudCwgbW9zdCBjb21tb25seSBhIHNpbXBsZSBzdHJpbmdcbiAgICAgICAgICovXG4gICAgICAgIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAgICAgICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuICAgICAgICB9KSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyBjaGVja2VkOyBiYWNraW5nIGRhdGEgbXVzdCBiZSB1cGRhdGVkIHRvIHBlcnNpc3QgdGhlIHN0YXRlIGNoYW5nZVxuICAgICAgICAgKi9cbiAgICAgICAgb25DaGVja2VkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB1bmNoZWNrZWQ7IGJhY2tpbmcgZGF0YSBtdXN0IGJlIHVwZGF0ZWQgdG8gcGVyc2lzdCB0aGUgc3RhdGUgY2hhbmdlXG4gICAgICAgICAqL1xuICAgICAgICBvblVuY2hlY2tlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgICAgY29tcG9uZW50OiAnZGl2JyxcbiAgICAgICAgaW5wdXRQcm9wczoge1xuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWw6IG51bGwsXG4gICAgICAgIGxhYmVsUHJvcHM6IHt9LFxuICAgICAgICBvbkNoZWNrZWQ6IG5vb3AsXG4gICAgICAgIG9uVW5jaGVja2VkOiBub29wLFxuICAgIH1cblxuICAgIHN0YXRpYyBpbnRlcm5hbEtleXMgPSBPYmplY3Qua2V5cyhDaGVja2JveC5kZWZhdWx0UHJvcHMpXG5cbiAgICBpZCA9IHV1aWQoKVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmlucHV0UHJvcHMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRldGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlICE9PSB0aGlzLnByb3BzLmlucHV0UHJvcHMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRldGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJbmRldGVybWluYXRlKCkge1xuICAgICAgICB0aGlzLnJlZnMuaW5wdXQuaW5kZXRlcm1pbmF0ZSA9ICEhdGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlID0gKGV2ZW50KSA9PiB7IC8vIFNlbmQgdGhlIG9wcG9zaXRlIHNpZ25hbCBmcm9tIHdoYXQgd2FzIHBhc3NlZCB0byB0b2dnbGUgdGhlIGRhdGFcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLnByb3BzWyF0aGlzLnByb3BzLmlucHV0UHJvcHMuY2hlY2tlZCA/ICdvbkNoZWNrZWQnIDogJ29uVW5jaGVja2VkJ10odGhpcy5wcm9wcy5pbnB1dFByb3BzLm5hbWUpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5pbnB1dFByb3BzLmRpc2FibGVkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMucmVmcy5pbnB1dC5mb2N1cygpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QXJpYVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUgPyAnbWl4ZWQnIDogU3RyaW5nKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICByZW5kZXJJbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHsuLi5vbWl0KHRoaXMucHJvcHMuaW5wdXRQcm9wcywgJ2luZGV0ZXJtaW5hdGUnKX1cbiAgICAgICAgICAgICAgICByZWY9J2lucHV0J1xuICAgICAgICAgICAgICAgIHR5cGU9J2NoZWNrYm94J1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goJ2ItY2hlY2tib3gnLCB0aGlzLnByb3BzLmlucHV0UHJvcHMuY2xhc3NOYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICdiLWNoZWNrYm94LW1peGVkJzogdGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgICAgICAgICAgICdiLWNoZWNrYm94LWNoZWNrZWQnOiB0aGlzLnByb3BzLmlucHV0UHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgJ2ItY2hlY2tib3gtdW5jaGVja2VkJzogIXRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlICYmICF0aGlzLnByb3BzLmlucHV0UHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pbnB1dFByb3BzLmlkIHx8IHRoaXMuaWR9XG4gICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPXt0aGlzLmdldEFyaWFTdGF0ZSgpfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSAvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlckxhYmVsKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5sYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHMubGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgcmVmPSdsYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnYi1jaGVja2JveC1sYWJlbCcsIHRoaXMucHJvcHMubGFiZWxQcm9wcy5jbGFzc05hbWUpfVxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPXt0aGlzLnByb3BzLmlucHV0UHJvcHMuaWQgfHwgdGhpcy5pZH0+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoaXMucHJvcHMuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgey4uLm9taXQodGhpcy5wcm9wcywgQ2hlY2tib3guaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICByZWY9J3dyYXBwZXInXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnYi1jaGVja2JveC13cmFwcGVyJywgdGhpcy5wcm9wcy5jbGFzc05hbWUpfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJJbnB1dCgpfVxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxhYmVsKCl9XG4gICAgICAgICAgICA8L3RoaXMucHJvcHMuY29tcG9uZW50PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL2JvdW5kbGVzcy1jaGVja2JveC9pbmRleC5qcyJdLCJzb3VyY2VSb290IjoiIn0=
module.exports=function(e){function t(r){if(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=9)}([function(e,t,n){"function"==typeof Symbol&&Symbol.iterator;e.exports=n(7)()},function(e,t){e.exports=require("boundless-utils-omit-keys")},function(e,t){e.exports=require("boundless-utils-uuid")},function(e,t){e.exports=require("classnames")},function(e,t){e.exports=require("react")},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";function r(e,t,n,r,i,s,p,a){if(o(t),!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,i,s,p,a],l=0;u=new Error(t.replace(/%s/g,function(){return c[l++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r=n(5),o=n(6),i=n(8);e.exports=function(){function e(e,t,n,r,s,p){p!==i&&o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t};return n.checkPropTypes=r,n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},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 i(e,t){if("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 s=n(0),p=n.n(s),a=n(4),u=(n.n(a),n(3)),c=n.n(u),l=n(1),f=n.n(l),h=n(2),d=n.n(h),b=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},m=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}}(),y=function(e){return"function"==typeof e},P=function(){},k=function(e){function t(){var e,n,i,s;r(this,t);for(var p=arguments.length,a=Array(p),u=0;u<p;u++)a[u]=arguments[u];return n=i=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(a))),i.id=d()(),i.handleChange=function(e){i.props.inputProps.disabled||(i.props[i.props.inputProps.checked?"onUnchecked":"onChecked"](i.props.inputProps.name),y(i.props.inputProps.onChange)&&i.props.inputProps.onChange(e))},i.handleClick=function(e){i.props.inputProps.disabled||(i.refs.input.focus(),y(i.props.inputProps.onClick)&&i.props.inputProps.onClick(e))},s=n,o(i,s)}return i(t,e),m(t,[{key:"componentDidMount",value:function(){this.props.inputProps.indeterminate&&this.setIndeterminate()}},{key:"componentDidUpdate",value:function(e){e.inputProps.indeterminate!==this.props.inputProps.indeterminate&&this.setIndeterminate()}},{key:"setIndeterminate",value:function(){this.refs.input.indeterminate=!!this.props.inputProps.indeterminate}},{key:"getAriaState",value:function(){return this.props.inputProps.indeterminate?"mixed":String(this.props.inputProps.checked)}},{key:"renderInput",value:function(){return n.i(a.createElement)("input",b({},f()(this.props.inputProps,"indeterminate"),{ref:"input",type:"checkbox",className:c()("b-checkbox",this.props.inputProps.className,{"b-checkbox-mixed":this.props.inputProps.indeterminate,"b-checkbox-checked":this.props.inputProps.checked,"b-checkbox-unchecked":!this.props.inputProps.indeterminate&&!this.props.inputProps.checked}),id:this.props.inputProps.id||this.id,"aria-checked":this.getAriaState(),onChange:this.handleChange,onClick:this.handleClick}))}},{key:"renderLabel",value:function(){if(this.props.label)return n.i(a.createElement)("label",b({},this.props.labelProps,{ref:"label",className:c()("b-checkbox-label",this.props.labelProps.className),htmlFor:this.props.inputProps.id||this.id}),this.props.label)}},{key:"render",value:function(){return n.i(a.createElement)(this.props.component,b({},f()(this.props,t.internalKeys),{ref:"wrapper",className:c()("b-checkbox-wrapper",this.props.className)}),this.renderInput(),this.renderLabel())}}]),t}(a.PureComponent);k.propTypes={"*":p.a.any,component:p.a.string,inputProps:p.a.shape({"*":p.a.any,checked:p.a.bool,className:p.a.string,disabled:p.a.bool,id:p.a.string,indeterminate:p.a.bool,onChange:p.a.func,onClick:p.a.func,name:p.a.string,value:p.a.string}),label:p.a.node,labelProps:p.a.shape({"*":p.a.any}),onChecked:p.a.func,onUnchecked:p.a.func},k.defaultProps={component:"div",inputProps:{checked:!1,indeterminate:!1},label:null,labelProps:{},onChecked:P,onUnchecked:P},k.internalKeys=Object.keys(k.defaultProps),t.default=k}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIGFlN2I4ZTgzN2I1N2E1MGYzMGY1Iiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy11dWlkXCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJjb21tb25qczJcIjpcImNsYXNzbmFtZXNcIn0iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaW52YXJpYW50LmpzIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9ib3VuZGxlc3MtY2hlY2tib3gvaW5kZXguanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJ2YWx1ZSIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJyZXF1aXJlIiwibWFrZUVtcHR5RnVuY3Rpb24iLCJhcmciLCJlbXB0eUZ1bmN0aW9uIiwidGhhdFJldHVybnMiLCJ0aGF0UmV0dXJuc0ZhbHNlIiwidGhhdFJldHVybnNUcnVlIiwidGhhdFJldHVybnNOdWxsIiwidGhhdFJldHVybnNUaGlzIiwidGhpcyIsInRoYXRSZXR1cm5zQXJndW1lbnQiLCJpbnZhcmlhbnQiLCJjb25kaXRpb24iLCJmb3JtYXQiLCJhIiwiYiIsImUiLCJmIiwidmFsaWRhdGVGb3JtYXQiLCJlcnJvciIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXJncyIsImFyZ0luZGV4IiwicmVwbGFjZSIsImZyYW1lc1RvUG9wIiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJzaGltIiwicHJvcHMiLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImdldFNoaW0iLCJpc1JlcXVpcmVkIiwiUmVhY3RQcm9wVHlwZXMiLCJhcnJheSIsImJvb2wiLCJmdW5jIiwibnVtYmVyIiwic3RyaW5nIiwic3ltYm9sIiwiYW55IiwiYXJyYXlPZiIsImVsZW1lbnQiLCJpbnN0YW5jZU9mIiwibm9kZSIsIm9iamVjdE9mIiwib25lT2YiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9pbmhlcml0cyIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwid3JpdGFibGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9jbGFzc25hbWVzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfY2xhc3NuYW1lc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc191dWlkX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYm91bmRsZXNzX3V0aWxzX3V1aWRfX19kZWZhdWx0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsImlzRnVuY3Rpb24iLCJ4Iiwibm9vcCIsIkNoZWNrYm94IiwiX1B1cmVDb21wb25lbnQiLCJfcmVmIiwiX3RlbXAiLCJfdGhpcyIsIl9yZXQiLCJfbGVuIiwiQXJyYXkiLCJfa2V5IiwiZ2V0UHJvdG90eXBlT2YiLCJhcHBseSIsImNvbmNhdCIsImlkIiwiaGFuZGxlQ2hhbmdlIiwiZXZlbnQiLCJpbnB1dFByb3BzIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJoYW5kbGVDbGljayIsInJlZnMiLCJpbnB1dCIsImZvY3VzIiwib25DbGljayIsImluZGV0ZXJtaW5hdGUiLCJzZXRJbmRldGVybWluYXRlIiwicHJldlByb3BzIiwiU3RyaW5nIiwicmVmIiwidHlwZSIsImNsYXNzTmFtZSIsImItY2hlY2tib3gtbWl4ZWQiLCJiLWNoZWNrYm94LWNoZWNrZWQiLCJiLWNoZWNrYm94LXVuY2hlY2tlZCIsImFyaWEtY2hlY2tlZCIsImdldEFyaWFTdGF0ZSIsImxhYmVsIiwibGFiZWxQcm9wcyIsImh0bWxGb3IiLCJjb21wb25lbnQiLCJpbnRlcm5hbEtleXMiLCJyZW5kZXJJbnB1dCIsInJlbmRlckxhYmVsIiwicHJvcFR5cGVzIiwiKiIsIm9uQ2hlY2tlZCIsIm9uVW5jaGVja2VkIiwiZGVmYXVsdFByb3BzIiwia2V5cyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQU9DLFFBQ0UsU0FBVUMsR0NHbkIsUUFBQUMsR0FBQUMsR0FHQSxHQUFBQyxFQUFBRCxHQUNBLE1BQUFDLEdBQUFELEdBQUFILE9BR0EsSUFBQUQsR0FBQUssRUFBQUQsSUFDQUUsRUFBQUYsRUFDQUcsR0FBQSxFQUNBTixXQVVBLE9BTkFDLEdBQUFFLEdBQUFJLEtBQUFSLEVBQUFDLFFBQUFELElBQUFDLFFBQUFFLEdBR0FILEVBQUFPLEdBQUEsRUFHQVAsRUFBQUMsUUF2QkEsR0FBQUksS0ErREEsT0FuQ0FGLEdBQUFNLEVBQUFQLEVBR0FDLEVBQUFPLEVBQUFMLEVBR0FGLEVBQUFHLEVBQUEsU0FBQUssR0FBMkMsTUFBQUEsSUFHM0NSLEVBQUFTLEVBQUEsU0FBQVgsRUFBQVksRUFBQUMsR0FDQVgsRUFBQVksRUFBQWQsRUFBQVksSUFDQUcsT0FBQUMsZUFBQWhCLEVBQUFZLEdBQ0FLLGNBQUEsRUFDQUMsWUFBQSxFQUNBQyxJQUFBTixLQU1BWCxFQUFBa0IsRUFBQSxTQUFBckIsR0FDQSxHQUFBYyxHQUFBZCxLQUFBc0IsV0FDQSxXQUEyQixNQUFBdEIsR0FBQSxTQUMzQixXQUFpQyxNQUFBQSxHQUVqQyxPQURBRyxHQUFBUyxFQUFBRSxFQUFBLElBQUFBLEdBQ0FBLEdBSUFYLEVBQUFZLEVBQUEsU0FBQVEsRUFBQUMsR0FBc0QsTUFBQVIsUUFBQVMsVUFBQUMsZUFBQWxCLEtBQUFlLEVBQUFDLElBR3REckIsRUFBQXdCLEVBQUEsR0FHQXhC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LE1BekVWdUQsRUE0RVYrQyxjQUNIUixVQUFXLE1BQ1h4QixZQUNJRSxTQUFTLEVBQ1RPLGVBQWUsR0FFbkJZLE1BQU8sS0FDUEMsY0FDQVEsVUFBVzlDLEVBQ1grQyxZQUFhL0MsR0FyRkFDLEVBd0ZWd0MsYUFBZXJKLE9BQU82SixLQUFLaEQsRUFBUytDLGNYd0Mrak12RixFQUE2QixRQUFJIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBfdHlwZW9mPXR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PT1cInN5bWJvbFwiP2Z1bmN0aW9uKG9iail7cmV0dXJuIHR5cGVvZiBvYmo7fTpmdW5jdGlvbihvYmope3JldHVybiBvYmomJnR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJm9iai5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmb2JqIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBvYmo7fTtpZihmYWxzZSl7dmFyIFJFQUNUX0VMRU1FTlRfVFlQRT10eXBlb2YgU3ltYm9sPT09J2Z1bmN0aW9uJyYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpfHwweGVhYzc7dmFyIGlzVmFsaWRFbGVtZW50PWZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCl7cmV0dXJuKHR5cGVvZiBvYmplY3Q9PT0ndW5kZWZpbmVkJz8ndW5kZWZpbmVkJzpfdHlwZW9mKG9iamVjdCkpPT09J29iamVjdCcmJm9iamVjdCE9PW51bGwmJm9iamVjdC4kJHR5cGVvZj09PVJFQUNUX0VMRU1FTlRfVFlQRTt9O3ZhciB0aHJvd09uRGlyZWN0QWNjZXNzPXRydWU7bW9kdWxlLmV4cG9ydHM9cmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LHRocm93T25EaXJlY3RBY2Nlc3MpO31lbHNle21vZHVsZS5leHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oNykoKTt9XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYm91bmRsZXNzLXV0aWxzLXV1aWRcIik7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGFyZzt9O312YXIgZW1wdHlGdW5jdGlvbj1mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCl7fTtlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zPW1ha2VFbXB0eUZ1bmN0aW9uO2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZT1tYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU9bWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw9bWFrZUVtcHR5RnVuY3Rpb24obnVsbCk7ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9O2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudD1mdW5jdGlvbihhcmcpe3JldHVybiBhcmc7fTttb2R1bGUuZXhwb3J0cz1lbXB0eUZ1bmN0aW9uO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdmFsaWRhdGVGb3JtYXQ9ZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KXt9O2lmKGZhbHNlKXt2YWxpZGF0ZUZvcm1hdD1mdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpe2lmKGZvcm1hdD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO319O31mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLGZvcm1hdCxhLGIsYyxkLGUsZil7dmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtpZighY29uZGl0aW9uKXt2YXIgZXJyb3I7aWYoZm9ybWF0PT09dW5kZWZpbmVkKXtlcnJvcj1uZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcrJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7fWVsc2V7dmFyIGFyZ3M9W2EsYixjLGQsZSxmXTt2YXIgYXJnSW5kZXg9MDtlcnJvcj1uZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gYXJnc1thcmdJbmRleCsrXTt9KSk7ZXJyb3IubmFtZT0nSW52YXJpYW50IFZpb2xhdGlvbic7fWVycm9yLmZyYW1lc1RvUG9wPTE7dGhyb3cgZXJyb3I7fX1tb2R1bGUuZXhwb3J0cz1pbnZhcmlhbnQ7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBlbXB0eUZ1bmN0aW9uPV9fd2VicGFja19yZXF1aXJlX18oNSk7dmFyIGludmFyaWFudD1fX3dlYnBhY2tfcmVxdWlyZV9fKDYpO3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldD1fX3dlYnBhY2tfcmVxdWlyZV9fKDgpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gc2hpbShwcm9wcyxwcm9wTmFtZSxjb21wb25lbnROYW1lLGxvY2F0aW9uLHByb3BGdWxsTmFtZSxzZWNyZXQpe2lmKHNlY3JldD09PVJlYWN0UHJvcFR5cGVzU2VjcmV0KXtyZXR1cm47fWludmFyaWFudChmYWxzZSwnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJysnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJysnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcycpO307c2hpbS5pc1JlcXVpcmVkPXNoaW07ZnVuY3Rpb24gZ2V0U2hpbSgpe3JldHVybiBzaGltO307dmFyIFJlYWN0UHJvcFR5cGVzPXthcnJheTpzaGltLGJvb2w6c2hpbSxmdW5jOnNoaW0sbnVtYmVyOnNoaW0sb2JqZWN0OnNoaW0sc3RyaW5nOnNoaW0sc3ltYm9sOnNoaW0sYW55OnNoaW0sYXJyYXlPZjpnZXRTaGltLGVsZW1lbnQ6c2hpbSxpbnN0YW5jZU9mOmdldFNoaW0sbm9kZTpzaGltLG9iamVjdE9mOmdldFNoaW0sb25lT2Y6Z2V0U2hpbSxvbmVPZlR5cGU6Z2V0U2hpbSxzaGFwZTpnZXRTaGltfTtSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcz1lbXB0eUZ1bmN0aW9uO1JlYWN0UHJvcFR5cGVzLlByb3BUeXBlcz1SZWFjdFByb3BUeXBlcztyZXR1cm4gUmVhY3RQcm9wVHlwZXM7fTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0PSdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7bW9kdWxlLmV4cG9ydHM9UmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9jbGFzc25hbWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9jbGFzc25hbWVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfY2xhc3NuYW1lc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JvdW5kbGVzc191dGlsc19vbWl0X2tleXNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc191dWlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9ib3VuZGxlc3NfdXRpbHNfdXVpZF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JvdW5kbGVzc191dGlsc191dWlkX18pO1xudmFyIF9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gc291cmNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpe3RhcmdldFtrZXldPXNvdXJjZVtrZXldO319fXJldHVybiB0YXJnZXQ7fTt2YXIgX2NyZWF0ZUNsYXNzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ZmFsc2U7ZGVzY3JpcHRvci5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBkZXNjcmlwdG9yKWRlc2NyaXB0b3Iud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpO319cmV0dXJuIGZ1bmN0aW9uKENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe2lmKHByb3RvUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyk7aWYoc3RhdGljUHJvcHMpZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyk7cmV0dXJuIENvbnN0cnVjdG9yO307fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTt9fWZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsY2FsbCl7aWYoIXNlbGYpe3Rocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTt9cmV0dXJuIGNhbGwmJih0eXBlb2YgY2FsbD09PVwib2JqZWN0XCJ8fHR5cGVvZiBjYWxsPT09XCJmdW5jdGlvblwiKT9jYWxsOnNlbGY7fWZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcyxzdXBlckNsYXNzKXtpZih0eXBlb2Ygc3VwZXJDbGFzcyE9PVwiZnVuY3Rpb25cIiYmc3VwZXJDbGFzcyE9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBzdXBlckNsYXNzKTt9c3ViQ2xhc3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyYmc3VwZXJDbGFzcy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzdWJDbGFzcyxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9fSk7aWYoc3VwZXJDbGFzcylPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLHN1cGVyQ2xhc3MpOnN1YkNsYXNzLl9fcHJvdG9fXz1zdXBlckNsYXNzO312YXIgaXNGdW5jdGlvbj1mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpe3JldHVybiB0eXBlb2YgeD09PSdmdW5jdGlvbic7fTt2YXIgbm9vcD1mdW5jdGlvbiBub29wKCl7fTt2YXIgQ2hlY2tib3g9ZnVuY3Rpb24oX1B1cmVDb21wb25lbnQpe19pbmhlcml0cyhDaGVja2JveCxfUHVyZUNvbXBvbmVudCk7ZnVuY3Rpb24gQ2hlY2tib3goKXt2YXIgX3JlZjt2YXIgX3RlbXAsX3RoaXMsX3JldDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxDaGVja2JveCk7Zm9yKHZhciBfbGVuPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShfbGVuKSxfa2V5PTA7X2tleTxfbGVuO19rZXkrKyl7YXJnc1tfa2V5XT1hcmd1bWVudHNbX2tleV07fXJldHVybiBfcmV0PShfdGVtcD0oX3RoaXM9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoX3JlZj1DaGVja2JveC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihDaGVja2JveCkpLmNhbGwuYXBwbHkoX3JlZixbdGhpc10uY29uY2F0KGFyZ3MpKSksX3RoaXMpLF90aGlzLmlkPV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9ib3VuZGxlc3NfdXRpbHNfdXVpZF9fX2RlZmF1bHQoKSgpLF90aGlzLmhhbmRsZUNoYW5nZT1mdW5jdGlvbihldmVudCl7aWYoX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5kaXNhYmxlZCl7cmV0dXJuO31fdGhpcy5wcm9wc1shX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkPydvbkNoZWNrZWQnOidvblVuY2hlY2tlZCddKF90aGlzLnByb3BzLmlucHV0UHJvcHMubmFtZSk7aWYoaXNGdW5jdGlvbihfdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2hhbmdlKSl7X3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZShldmVudCk7fX0sX3RoaXMuaGFuZGxlQ2xpY2s9ZnVuY3Rpb24oZXZlbnQpe2lmKF90aGlzLnByb3BzLmlucHV0UHJvcHMuZGlzYWJsZWQpe3JldHVybjt9X3RoaXMucmVmcy5pbnB1dC5mb2N1cygpO2lmKGlzRnVuY3Rpb24oX3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKSl7X3RoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKGV2ZW50KTt9fSxfdGVtcCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsX3JldCk7fV9jcmVhdGVDbGFzcyhDaGVja2JveCxbe2tleTonY29tcG9uZW50RGlkTW91bnQnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCl7aWYodGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUpe3RoaXMuc2V0SW5kZXRlcm1pbmF0ZSgpO319fSx7a2V5Oidjb21wb25lbnREaWRVcGRhdGUnLHZhbHVlOmZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpe2lmKHByZXZQcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUhPT10aGlzLnByb3BzLmlucHV0UHJvcHMuaW5kZXRlcm1pbmF0ZSl7dGhpcy5zZXRJbmRldGVybWluYXRlKCk7fX19LHtrZXk6J3NldEluZGV0ZXJtaW5hdGUnLHZhbHVlOmZ1bmN0aW9uIHNldEluZGV0ZXJtaW5hdGUoKXt0aGlzLnJlZnMuaW5wdXQuaW5kZXRlcm1pbmF0ZT0hIXRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlO319LHtrZXk6J2dldEFyaWFTdGF0ZScsdmFsdWU6ZnVuY3Rpb24gZ2V0QXJpYVN0YXRlKCl7cmV0dXJuIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlPydtaXhlZCc6U3RyaW5nKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkKTt9fSx7a2V5OidyZW5kZXJJbnB1dCcsdmFsdWU6ZnVuY3Rpb24gcmVuZGVySW5wdXQoKXtyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1wiY3JlYXRlRWxlbWVudFwiXSkoJ2lucHV0JyxfZXh0ZW5kcyh7fSxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYm91bmRsZXNzX3V0aWxzX29taXRfa2V5c19fX2RlZmF1bHQoKSh0aGlzLnByb3BzLmlucHV0UHJvcHMsJ2luZGV0ZXJtaW5hdGUnKSx7cmVmOidpbnB1dCcsdHlwZTonY2hlY2tib3gnLGNsYXNzTmFtZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfY2xhc3NuYW1lc19fX2RlZmF1bHQoKSgnYi1jaGVja2JveCcsdGhpcy5wcm9wcy5pbnB1dFByb3BzLmNsYXNzTmFtZSx7J2ItY2hlY2tib3gtbWl4ZWQnOnRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlLCdiLWNoZWNrYm94LWNoZWNrZWQnOnRoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkLCdiLWNoZWNrYm94LXVuY2hlY2tlZCc6IXRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlJiYhdGhpcy5wcm9wcy5pbnB1dFByb3BzLmNoZWNrZWR9KSxpZDp0aGlzLnByb3BzLmlucHV0UHJvcHMuaWR8fHRoaXMuaWQsJ2FyaWEtY2hlY2tlZCc6dGhpcy5nZXRBcmlhU3RhdGUoKSxvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxvbkNsaWNrOnRoaXMuaGFuZGxlQ2xpY2t9KSk7fX0se2tleToncmVuZGVyTGFiZWwnLHZhbHVlOmZ1bmN0aW9uIHJlbmRlckxhYmVsKCl7aWYodGhpcy5wcm9wcy5sYWJlbCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKCdsYWJlbCcsX2V4dGVuZHMoe30sdGhpcy5wcm9wcy5sYWJlbFByb3BzLHtyZWY6J2xhYmVsJyxjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2ItY2hlY2tib3gtbGFiZWwnLHRoaXMucHJvcHMubGFiZWxQcm9wcy5jbGFzc05hbWUpLGh0bWxGb3I6dGhpcy5wcm9wcy5pbnB1dFByb3BzLmlkfHx0aGlzLmlkfSksdGhpcy5wcm9wcy5sYWJlbCk7fX19LHtrZXk6J3JlbmRlcicsdmFsdWU6ZnVuY3Rpb24gcmVuZGVyKCl7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcImNyZWF0ZUVsZW1lbnRcIl0pKHRoaXMucHJvcHMuY29tcG9uZW50LF9leHRlbmRzKHt9LF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ib3VuZGxlc3NfdXRpbHNfb21pdF9rZXlzX19fZGVmYXVsdCgpKHRoaXMucHJvcHMsQ2hlY2tib3guaW50ZXJuYWxLZXlzKSx7cmVmOid3cmFwcGVyJyxjbGFzc05hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2NsYXNzbmFtZXNfX19kZWZhdWx0KCkoJ2ItY2hlY2tib3gtd3JhcHBlcicsdGhpcy5wcm9wcy5jbGFzc05hbWUpfSksdGhpcy5yZW5kZXJJbnB1dCgpLHRoaXMucmVuZGVyTGFiZWwoKSk7fX1dKTtyZXR1cm4gQ2hlY2tib3g7fShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcIlB1cmVDb21wb25lbnRcIl0pO0NoZWNrYm94LnByb3BUeXBlcz17JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmFueSxjb21wb25lbnQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc3RyaW5nLGlucHV0UHJvcHM6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoeycqJzpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5hbnksY2hlY2tlZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5ib29sLGNsYXNzTmFtZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5zdHJpbmcsZGlzYWJsZWQ6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuYm9vbCxpZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5zdHJpbmcsaW5kZXRlcm1pbmF0ZTpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5ib29sLG9uQ2hhbmdlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMsb25DbGljazpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLG5hbWU6X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc3RyaW5nLHZhbHVlOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnN0cmluZ30pLGxhYmVsOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLm5vZGUsbGFiZWxQcm9wczpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5zaGFwZSh7JyonOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmFueX0pLG9uQ2hlY2tlZDpfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLG9uVW5jaGVja2VkOl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmN9O0NoZWNrYm94LmRlZmF1bHRQcm9wcz17Y29tcG9uZW50OidkaXYnLGlucHV0UHJvcHM6e2NoZWNrZWQ6ZmFsc2UsaW5kZXRlcm1pbmF0ZTpmYWxzZX0sbGFiZWw6bnVsbCxsYWJlbFByb3BzOnt9LG9uQ2hlY2tlZDpub29wLG9uVW5jaGVja2VkOm5vb3B9O0NoZWNrYm94LmludGVybmFsS2V5cz1PYmplY3Qua2V5cyhDaGVja2JveC5kZWZhdWx0UHJvcHMpOy8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQ2hlY2tib3gpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGluZGV4LmpzIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBhZTdiOGU4MzdiNTdhNTBmMzBmNSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvaW5kZXguanMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtb21pdC1rZXlzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwiYm91bmRsZXNzLXV0aWxzLW9taXQta2V5c1wifVxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJib3VuZGxlc3MtdXRpbHMtdXVpZFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qczJcIjpcImJvdW5kbGVzcy11dGlscy11dWlkXCJ9XG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanMyXCI6XCJjbGFzc25hbWVzXCJ9XG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzMlwiOlwicmVhY3RcIn1cbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xudmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO1xuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2ludmFyaWFudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCBvbWl0IGZyb20gJ2JvdW5kbGVzcy11dGlscy1vbWl0LWtleXMnO1xuaW1wb3J0IHV1aWQgZnJvbSAnYm91bmRsZXNzLXV0aWxzLXV1aWQnO1xuXG5jb25zdCBpc0Z1bmN0aW9uID0gKHgpID0+IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbkNoZWNrYm94IGlzIGltcGxlbWVudGVkIGFzIGEgXCJjb250cm9sbGVkIGlucHV0XCIsIG1lYW5pbmcgaXQgaXMgYSBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIGRhdGEgcGFzc2VkXG5pbnNpZGUuIFVzZXIgaW50ZXJhY3Rpb24gd2lsbCBidWJibGUgY2hhbmdlcyBpbiB0aGUgZm9ybSBvZiBgb25DaGVja2VkYCBhbmQgYG9uVW5jaGVja2VkYCB0aGF0IGEgY29udHJvbGxlclxudmlldyBtdXN0IGludGVyY2VwdCBhbmQgYXBwbHkgYWdhaW5zdCB0aGUgZGF0YSBwcm92aWRlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hlY2tib3ggZXh0ZW5kcyBQdXJlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogYW55IFtSZWFjdC1zdXBwb3J0ZWQgYXR0cmlidXRlXShodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RhZ3MtYW5kLWF0dHJpYnV0ZXMuaHRtbCNodG1sLWF0dHJpYnV0ZXMpXG4gICAgICAgICAqL1xuICAgICAgICAnKic6IFByb3BUeXBlcy5hbnksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFueSB2YWxpZCBIVE1MIHRhZyBuYW1lXG4gICAgICAgICAqL1xuICAgICAgICBjb21wb25lbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFsbCBpbnB1dC1zcGVjaWZpYyBwcm9wcyBsaWtlIGB2YWx1ZWAsIGBuYW1lYCwgZXRjIHNob3VsZCBiZSBwYXNzZWQgaGVyZSAtLSBjb21tb24gb25lcyBhcmUgbGlzdGVkIGJlbG93XG4gICAgICAgICAqL1xuICAgICAgICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRldGVybWluZXMgaWYgdGhlIGNoZWNrYm94IGlzIHJlbmRlcmVkIGFzIGNoZWNrZWQvdW5jaGVja2VkLCBzZWUgUmVhY3QgW1wiY29udHJvbGxlZCBpbnB1dHNcIl0oaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50cykpXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgICAgICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogcHJldmVudHMgdGhlIGBvbntDaGVja2VkLFVuY2hlY2tlZH1gIGV2ZW50cyBmcm9tIGZpcmluZyB3aGVuIGB0cnVlYFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBlbmFibGVzIG9yIGRpc2FibGVzIFwibWl4ZWRcIiBjaGVja2JveCBzdGF0ZSwgcmVhZCB0aGlzIFtDU1MtVHJpY2tzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vaW5kZXRlcm1pbmF0ZS1jaGVja2JveGVzLykgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgICAgICAgICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICAgICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogcmVuZGVyZWQgYXMgdGhlIGlucHV0IGNvbnRyb2wncyBmb3JtIG5hbWVcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiAgcGFzc2VkLXRocm91Z2ggdG8gdGhlIGlucHV0IG5vZGUsIGxpa2UgYG5hbWVgXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB9KSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogYW55IFJlYWN0LXJlbmRlcmFibGUgY29udGVudCwgbW9zdCBjb21tb25seSBhIHNpbXBsZSBzdHJpbmdcbiAgICAgICAgICovXG4gICAgICAgIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAgICAgICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBhbnkgW1JlYWN0LXN1cHBvcnRlZCBhdHRyaWJ1dGVdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdGFncy1hbmQtYXR0cmlidXRlcy5odG1sI2h0bWwtYXR0cmlidXRlcylcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgJyonOiBQcm9wVHlwZXMuYW55LFxuICAgICAgICB9KSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyBjaGVja2VkOyBiYWNraW5nIGRhdGEgbXVzdCBiZSB1cGRhdGVkIHRvIHBlcnNpc3QgdGhlIHN0YXRlIGNoYW5nZVxuICAgICAgICAgKi9cbiAgICAgICAgb25DaGVja2VkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB1bmNoZWNrZWQ7IGJhY2tpbmcgZGF0YSBtdXN0IGJlIHVwZGF0ZWQgdG8gcGVyc2lzdCB0aGUgc3RhdGUgY2hhbmdlXG4gICAgICAgICAqL1xuICAgICAgICBvblVuY2hlY2tlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgICAgY29tcG9uZW50OiAnZGl2JyxcbiAgICAgICAgaW5wdXRQcm9wczoge1xuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWw6IG51bGwsXG4gICAgICAgIGxhYmVsUHJvcHM6IHt9LFxuICAgICAgICBvbkNoZWNrZWQ6IG5vb3AsXG4gICAgICAgIG9uVW5jaGVja2VkOiBub29wLFxuICAgIH1cblxuICAgIHN0YXRpYyBpbnRlcm5hbEtleXMgPSBPYmplY3Qua2V5cyhDaGVja2JveC5kZWZhdWx0UHJvcHMpXG5cbiAgICBpZCA9IHV1aWQoKVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmlucHV0UHJvcHMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRldGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlICE9PSB0aGlzLnByb3BzLmlucHV0UHJvcHMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRldGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJbmRldGVybWluYXRlKCkge1xuICAgICAgICB0aGlzLnJlZnMuaW5wdXQuaW5kZXRlcm1pbmF0ZSA9ICEhdGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGU7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlID0gKGV2ZW50KSA9PiB7IC8vIFNlbmQgdGhlIG9wcG9zaXRlIHNpZ25hbCBmcm9tIHdoYXQgd2FzIHBhc3NlZCB0byB0b2dnbGUgdGhlIGRhdGFcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLnByb3BzWyF0aGlzLnByb3BzLmlucHV0UHJvcHMuY2hlY2tlZCA/ICdvbkNoZWNrZWQnIDogJ29uVW5jaGVja2VkJ10odGhpcy5wcm9wcy5pbnB1dFByb3BzLm5hbWUpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNoYW5nZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5pbnB1dFByb3BzLmRpc2FibGVkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMucmVmcy5pbnB1dC5mb2N1cygpO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5vbkNsaWNrKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dFByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QXJpYVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUgPyAnbWl4ZWQnIDogU3RyaW5nKHRoaXMucHJvcHMuaW5wdXRQcm9wcy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICByZW5kZXJJbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHsuLi5vbWl0KHRoaXMucHJvcHMuaW5wdXRQcm9wcywgJ2luZGV0ZXJtaW5hdGUnKX1cbiAgICAgICAgICAgICAgICByZWY9J2lucHV0J1xuICAgICAgICAgICAgICAgIHR5cGU9J2NoZWNrYm94J1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goJ2ItY2hlY2tib3gnLCB0aGlzLnByb3BzLmlucHV0UHJvcHMuY2xhc3NOYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICdiLWNoZWNrYm94LW1peGVkJzogdGhpcy5wcm9wcy5pbnB1dFByb3BzLmluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgICAgICAgICAgICdiLWNoZWNrYm94LWNoZWNrZWQnOiB0aGlzLnByb3BzLmlucHV0UHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgJ2ItY2hlY2tib3gtdW5jaGVja2VkJzogIXRoaXMucHJvcHMuaW5wdXRQcm9wcy5pbmRldGVybWluYXRlICYmICF0aGlzLnByb3BzLmlucHV0UHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pbnB1dFByb3BzLmlkIHx8IHRoaXMuaWR9XG4gICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPXt0aGlzLmdldEFyaWFTdGF0ZSgpfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSAvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlckxhYmVsKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5sYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHMubGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgcmVmPSdsYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnYi1jaGVja2JveC1sYWJlbCcsIHRoaXMucHJvcHMubGFiZWxQcm9wcy5jbGFzc05hbWUpfVxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPXt0aGlzLnByb3BzLmlucHV0UHJvcHMuaWQgfHwgdGhpcy5pZH0+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoaXMucHJvcHMuY29tcG9uZW50XG4gICAgICAgICAgICAgICAgey4uLm9taXQodGhpcy5wcm9wcywgQ2hlY2tib3guaW50ZXJuYWxLZXlzKX1cbiAgICAgICAgICAgICAgICByZWY9J3dyYXBwZXInXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnYi1jaGVja2JveC13cmFwcGVyJywgdGhpcy5wcm9wcy5jbGFzc05hbWUpfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJJbnB1dCgpfVxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxhYmVsKCl9XG4gICAgICAgICAgICA8L3RoaXMucHJvcHMuY29tcG9uZW50PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3BhY2thZ2VzL2JvdW5kbGVzcy1jaGVja2JveC9pbmRleC5qcyJdLCJzb3VyY2VSb290IjoiIn0=

@@ -1,2 +0,2 @@

import {createElement, PureComponent} from 'react';
import { createElement, PureComponent } from 'react';
import Checkbox from '../';

@@ -6,3 +6,3 @@

state = {
checkboxes: [{
checkboxes: [ {
checked: false,

@@ -22,3 +22,3 @@ indeterminate: false,

name: 'box3',
}],
} ],
}

@@ -25,0 +25,0 @@

@@ -1,2 +0,3 @@

import {createElement, PropTypes, PureComponent} from 'react';
import PropTypes from 'prop-types';
import { createElement, PureComponent } from 'react';
import cx from 'classnames';

@@ -3,0 +4,0 @@

/* eslint no-unused-expressions:0 */
import {createElement} from 'react';
import { createElement } from 'react';
import ReactDOM from 'react-dom';

@@ -8,3 +8,3 @@ import sinon from 'sinon';

import Checkbox from './index';
import {$, conformanceChecker} from '../boundless-utils-test-helpers/index';
import { $, conformanceChecker } from '../boundless-utils-test-helpers/index';

@@ -45,3 +45,3 @@ describe('Checkbox component', () => {

it('accepts arbitrary React-supported HTML attributes via the `inputProps` prop', () => {
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, 'data-id': 'foo'}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, 'data-id': 'foo' }} />);
const node = element.refs.input;

@@ -53,3 +53,3 @@

it('accepts arbitrary React-supported HTML attributes via the `labelProps` prop', () => {
const element = render(<Checkbox {...props} labelProps={{'data-id': 'foo'}} label='foo' />);
const element = render(<Checkbox {...props} labelProps={{ 'data-id': 'foo' }} label='foo' />);
const node = element.refs.label;

@@ -91,3 +91,3 @@

it('renders .b-checkbox-checked when the checkbox value is truthy', () => {
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, checked: true}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, checked: true }} />);

@@ -104,3 +104,3 @@ expect(element.refs.input.classList.contains('b-checkbox-checked')).toBe(true);

it('renders .b-checkbox-mixed when the checkbox is indeterminate', () => {
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, checked: true, indeterminate: true}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, checked: true, indeterminate: true }} />);

@@ -129,3 +129,3 @@ expect(element.refs.input.classList.contains('b-checkbox-mixed')).toBe(true);

const stub = sandbox.stub();
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, checked: true}} onUnchecked={stub} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, checked: true }} onUnchecked={stub} />);

@@ -151,3 +151,3 @@ element.handleChange();

render(<Checkbox {...props} inputProps={{...props.inputProps, disabled: true}} onClick={stub} />);
render(<Checkbox {...props} inputProps={{ ...props.inputProps, disabled: true }} onClick={stub} />);
expect(stub.called).toBe(false);

@@ -159,3 +159,3 @@ });

it('is programmatically set on the underlying input', () => {
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, indeterminate: true}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, indeterminate: true }} />);

@@ -168,6 +168,6 @@ expect(element.refs.input.indeterminate).toBe(true);

element = render(<Checkbox {...props} inputProps={{...props.inputProps, indeterminate: false}} />);
element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, indeterminate: false }} />);
expect(element.refs.input.indeterminate).toBeFalsy();
element = render(<Checkbox {...props} inputProps={{...props.inputProps, indeterminate: true}} />);
element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, indeterminate: true }} />);
expect(element.refs.input.indeterminate).toBeTruthy();

@@ -180,5 +180,5 @@ });

const stub = sandbox.stub();
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, onChange: stub}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, onChange: stub }} />);
element.handleChange({checked: true});
element.handleChange({ checked: true });

@@ -190,5 +190,5 @@ expect(stub.calledOnce).toBe(true);

const stub = sandbox.stub();
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, onChange: stub, disabled: true}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, onChange: stub, disabled: true }} />);
element.handleChange({checked: true});
element.handleChange({ checked: true });

@@ -200,3 +200,3 @@ expect(stub.called).toBe(false);

const stub = sandbox.stub();
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, onClick: stub}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, onClick: stub }} />);

@@ -210,3 +210,3 @@ element.handleClick({});

const stub = sandbox.stub();
const element = render(<Checkbox {...props} inputProps={{...props.inputProps, onClick: stub, disabled: true}} />);
const element = render(<Checkbox {...props} inputProps={{ ...props.inputProps, onClick: stub, disabled: true }} />);

@@ -213,0 +213,0 @@ element.handleClick({});

{
"name": "boundless-checkbox",
"version": "1.0.4",
"version": "1.1.0",
"description": "An accessible checkbox with indeterminate support.",

@@ -28,4 +28,4 @@ "main": "build/index.js",

"classnames": "^2.1.5",
"boundless-utils-omit-keys": "^1.0.4",
"boundless-utils-uuid": "^1.0.4"
"boundless-utils-omit-keys": "^1.1.0",
"boundless-utils-uuid": "^1.1.0"
},

@@ -32,0 +32,0 @@ "peerDependencies": {

@@ -22,3 +22,3 @@ <!---

import {createElement, PureComponent} from 'react';
import { createElement, PureComponent } from 'react';
import Checkbox from 'boundless-checkbox';

@@ -28,3 +28,3 @@

state = {
checkboxes: [{
checkboxes: [ {
checked: false,

@@ -44,3 +44,3 @@ indeterminate: false,

name: 'box3',
}],
} ],
}

@@ -47,0 +47,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc