Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@untemps/react-vocal

Package Overview
Dependencies
Maintainers
1
Versions
60
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@untemps/react-vocal - npm Package Compare versions

Comparing version 1.1.1 to 1.1.2

8

CHANGELOG.md

@@ -0,1 +1,9 @@

## [1.1.2](https://github.com/untemps/react-vocal/compare/v1.1.1...v1.1.2) (2020-07-15)
### Bug Fixes
* Fix grammars default value to null ([d27db45](https://github.com/untemps/react-vocal/commit/d27db45db49a41b01875975c9a7d73525a847330))
* Regenerate yarn.lock ([9fc0556](https://github.com/untemps/react-vocal/commit/9fc0556ff96ede76a679e618f822f1942171a569))
## [1.1.1](https://github.com/untemps/react-vocal/compare/v1.1.0...v1.1.1) (2020-07-13)

@@ -2,0 +10,0 @@

4

dist/index.es.js

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

import e,{useRef as t,useState as n,useEffect as r,cloneElement as i,isValidElement as o}from"react";import a from"prop-types";function c(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function s(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)}}function u(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return h(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function m(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){d(o,r,i,a,c,"next",e)}function c(e){d(o,r,i,a,c,"throw",e)}a(void 0)}))}}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var g=function(){var e=m(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=m(regeneratorRuntime.mark((function e(n,r){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:i=e.sent,o=function e(t){i.removeEventListener("change",e),w(t.target.state,n,r)},i.addEventListener("change",o),w(i.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),w=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},E=function(){var e=m(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=m(regeneratorRuntime.mark((function e(r,i){var o,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}i(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,g(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:o=e.sent,a=y(o,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),i(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),S=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),l(this,"_instance",null),l(this,"_listeners",null),l(this,"_includesEventType",(function(t){return Object.values(e.eventTypes).find((function(e){return e===t}))}));var r=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition||{};this._instance=new r,this._listeners={},Object.entries(p(p({},e.defaultOptions),t||{})).forEach((function(e){var t=v(e,2),r=t[0],i=t[1];return n._instance[r]=i}))}var t,n;return u(e,null,[{key:"isSupported",get:function(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition)},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),u(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,E("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt("return",this);case 15:case"end":return e.stop()}}),e,this,[[1,10]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var o=t.apply(e,n);function a(e){c(o,r,i,a,s,"next",e)}function s(e){c(o,r,i,a,s,"throw",e)}a(void 0)}))},function(){return n.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(t,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var o=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[].concat(o,[i]))};this._instance.addEventListener(t,(function(e){return i(e)})),this._listeners[t]=i}return this}},{key:"removeEventListener",value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:"cleanup",value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),this._instance=null,this}},{key:"instance",get:function(){return this._instance},set:function(e){throw new Error("You cannot set instance directly.")}}]),e}();l(S,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),l(S,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var O=function(t){var n=t.iconColor,r=void 0===n?"black":n,i=t.activeColor,o=void 0===i?"red":i,a=t.isActive,c=void 0!==a&&a;return e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},e.createElement("g",null,e.createElement("path",{fill:r,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),c&&e.createElement("circle",{fill:o,cx:"16",cy:"4",r:"4"})))},_=function(a){var c=a.children,s=a.grammars,u=a.lang,l=a.timeout,f=a.ariaLabel,h=a.tabIndex,d=a.style,m=a.className,y=a.onStart,b=a.onEnd,g=a.onSpeechStart,w=a.onSpeechEnd,E=a.onResult,_=a.onError,R=a.onNoMatch,x=a.__recognitionInstance,k=t(null),L=t(null),j=v(n(!1),2),T=j[0],A=j[1];r((function(){if(S.isSupported)return L.current=x||new S({grammars:s,lang:u}),function(){L.current.abort(),L.current.cleanup(),clearTimeout(k.current)}}),[x]);var P=function(){k.current=setTimeout(I,l)},D=function(){clearTimeout(k.current),k.current=null},N=function(){try{A(!1);var e=L.current;e.removeEventListener("start",U),e.removeEventListener("end",I),e.removeEventListener("speechstart",M),e.removeEventListener("speechend",C),e.removeEventListener("result",z),e.removeEventListener("error",H),e.removeEventListener("nomatch",F),e.stop()}catch(e){_&&_(e)}},U=function(e){P(),y&&y(e)},I=function(e){D(),N(),b&&b(e)},M=function(e){D(),g&&g(e)},C=function(e){P(),w&&w(e)},z=function(e,t){N(),E&&E(e,t)},H=function(e){N(),_&&_(e)},F=function(e){R&&R(e)};return S.isSupported&&i(o(c)?c:e.createElement("div",{"data-testid":"__vocal-root__",role:"button","aria-label":f,tabIndex:h,style:m?null:p({width:24,height:24,cursor:T?null:"pointer"},d),className:m},e.createElement(O,{isActive:T,iconColor:"#aaa"})),p({},!T&&{onClick:function(){!function(){try{A(!0);var e=L.current;e.addEventListener("start",U),e.addEventListener("end",I),e.addEventListener("speechstart",M),e.addEventListener("speechend",C),e.addEventListener("result",z),e.addEventListener("error",H),e.addEventListener("nomatch",F),e.start()}catch(e){H(e)}}()}}))};_.propTypes={grammars:a.object,lang:a.string,timeout:a.number,ariaLabel:a.string,tabIndex:a.number,style:a.object,className:a.string,onStart:a.func,onEnd:a.func,onSpeechStart:a.func,onSpeechEnd:a.func,onResult:a.func,onError:a.func,onNoMatch:a.func},_.defaultProps={grammars:null,lang:"en-US",timeout:3e3,ariaLabel:"speech",tabIndex:-1,style:null,className:null,onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};export default _;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmpzIiwiLi4vc3JjL01pY3JvcGhvbmVJY29uLmpzIiwiLi4vc3JjL1ZvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGUoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiByKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe2UobyxhLGksdSxjLFwibmV4dFwiLHIpfWZ1bmN0aW9uIGMocil7ZShvLGEsaSx1LGMsXCJ0aHJvd1wiLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbihlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbihlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG4pe3ZhciBhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IucGVybWlzc2lvbnMpe2UubmV4dD00O2JyZWFrfW4obmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb25zIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0xNjticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUubmV4dD03LG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTp0fSk7Y2FzZSA3OmE9ZS5zZW50LG89ZnVuY3Rpb24gZSh0KXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSxpKHQudGFyZ2V0LnN0YXRlLHIsbil9LGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLGkoYS5zdGF0ZSxyLG4pLGUubmV4dD0xNjticmVhaztjYXNlIDEzOmUucHJldj0xMyxlLnQwPWUuY2F0Y2goNCksbihlLnQwKTtjYXNlIDE2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDEzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT1mdW5jdGlvbihlLHIsdCl7c3dpdGNoKGUpe2Nhc2VcImRlbmllZFwiOnQobmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb24gZGVuaWVkXCIsXCJOT1RfQUxMT1dFRF9FUlJcIikpO2JyZWFrO2RlZmF1bHQ6cihlKX19LG89ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKG4saSl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixvKXt2YXIgdSxjLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKXtlLm5leHQ9NDticmVha31vKG5ldyBET01FeGNlcHRpb24oXCJNZWRpYURldmljZXMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS50MD1Qcm9taXNlLGUubmV4dD04LGEobik7Y2FzZSA4OnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9MTEsbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoaSk7Y2FzZSAxMTpyZXR1cm4gZS50Mj1lLnNlbnQsZS50Mz1bZS50MSxlLnQyXSxlLm5leHQ9MTUsZS50MC5hbGwuY2FsbChlLnQwLGUudDMpO2Nhc2UgMTU6dT1lLnNlbnQsYz10KHUsMikscz1jWzFdLHIocyksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6ZS5wcmV2PTIxLGUudDQ9ZS5jYXRjaCg0KSxvKGUudDQpO2Nhc2UgMjQ6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMjFdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHthIGFzIGdldFBlcm1pc3Npb24sbyBhcyBnZXRVc2VyTWVkaWFTdHJlYW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5blpYUlFaWEp0YVhOemFXOXVMbXB6SWl3aUxpNHZjM0pqTDJkbGRGVnpaWEpOWldScFlWTjBjbVZoYlM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNseHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXBJRDArSUh0Y2JseDBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MFhIUnBaaUFvSVc1aGRtbG5ZWFJ2Y2k1d1pYSnRhWE56YVc5dWN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0oxQmxjbTFwYzNOcGIyNXpJRzV2ZENCemRYQndiM0owWldRbkxDQW5UazlVWDBaUFZVNUVYMFZTVWljcEtWeHVYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkRngwWTI5dWMzUWdiMjVEYUdGdVoyVWdQU0FvWlhabGJuUXBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJjZEhKbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNobGRtVnVkQzUwWVhKblpYUXVjM1JoZEdVc0lISmxjMjlzZG1Vc0lISmxhbVZqZENsY2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVW9jR1Z5YldsemMybHZibE4wWVhSMWN5NXpkR0YwWlN3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1Z4dVhIUmNkRngwZlNCallYUmphQ0FvWlhKeWIzSXBJSHRjYmx4MFhIUmNkRngwY21WcVpXTjBLR1Z5Y205eUtWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBmU2xjYm4xY2JseHVZMjl1YzNRZ2NtVnpiMngyWlU5eVVtVnFaV04wUW1GelpXUlBibE4wWVhSbElEMGdLSE4wWVhSbExDQnlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MGMzZHBkR05vSUNoemRHRjBaU2tnZTF4dVhIUmNkR05oYzJVZ0oyUmxibWxsWkNjNlhHNWNkRngwWEhSeVpXcGxZM1FvYm1WM0lFUlBUVVY0WTJWd2RHbHZiaWduVUdWeWJXbHpjMmx2YmlCa1pXNXBaV1FuTENBblRrOVVYMEZNVEU5WFJVUmZSVkpTSnlrcFhHNWNkRngwWEhSaWNtVmhhMXh1WEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMFlYUmxLVnh1WEhSOVhHNTlYRzRpTENKcGJYQnZjblFnWjJWMFVHVnliV2x6YzJsdmJpQm1jbTl0SUNjdUwyZGxkRkJsY20xcGMzTnBiMjRuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5SUdGdVpDQjBhR1VnYzNSeVpXRnRJR2x6SUhKbGRISnBaWFpsWkZ4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQndZWEpoYlNCdFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpJQ0FnSUVOdmJuTjBjbUZwYm5SeklHOWlhbVZqZEM0Z1FITmxaU0JvZEhSd2N6b3ZMMlJsZG1Wc2IzQmxjaTV0YjNwcGJHeGhMbTl5Wnk5bGJpMVZVeTlrYjJOekwxZGxZaTlCVUVrdlRXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlN3Z2JXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjeWtnUFQ0Z2UxeHVYSFJ5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvWVhONWJtTWdLSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkR2xtSUNnaGJtRjJhV2RoZEc5eUxtMWxaR2xoUkdWMmFXTmxjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOUdUMVZPUkY5RlVsSW5LU2xjYmx4MFhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEZ4MGRISjVJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdXeXdnYzNSeVpXRnRYU0E5SUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0Z0Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCblpYUlFaWEp0YVhOemFXOXVLSEJsY20xcGMzTnBiMjVPWVcxbEtTeGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEZ4MFhTbGNibHgwWEhSY2RGeDBjbVZ6YjJ4MlpTaHpkSEpsWVcwcFhHNWNkRngwWEhSOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dVhIUmNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVJbDBzSW01aGJXVnpJanBiSW5CbGNtMXBjM05wYjI1T1lXMWxJaXdpVUhKdmJXbHpaU0lzSW5KbGMyOXNkbVVpTENKeVpXcGxZM1FpTENKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSWtSUFRVVjRZMlZ3ZEdsdmJpSXNJbkYxWlhKNUlpd2libUZ0WlNJc0luQmxjbTFwYzNOcGIyNVRkR0YwZFhNaUxDSnZia05vWVc1blpTSXNJbVYyWlc1MElpd2ljbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaUlzSW5KbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNJc0luUmhjbWRsZENJc0luTjBZWFJsSWl3aVlXUmtSWFpsYm5STWFYTjBaVzVsY2lJc0ltMWxaR2xoVTNSeVpXRnRRMjl1YzNSeVlXbHVkSE1pTENKdFpXUnBZVVJsZG1salpYTWlMQ0puWlhSUVpYSnRhWE56YVc5dUlpd2laMlYwVlhObGNrMWxaR2xoSWl3aVlXeHNJaXdpYzNSeVpXRnRJbDBzSW0xaGNIQnBibWR6SWpvaWJYZERRVXRCTEd0RVFVRmxMRmRCUVU5QkxEUkhRVU5rTEVsQlFVbERMRzlFUVVGUkxGZEJRVTlETEVWQlFWTkRMRGhHUVVNM1FrTXNWVUZCVlVNc05FSkJRMlJHTEVWQlFVOHNTVUZCU1Vjc1lVRkJZU3cwUWtGQk5rSXNhMFZCUjNKQ1JpeFZRVUZWUXl4WlFVRlpSU3hOUVVGTkxFTkJRVVZETEV0QlFVMVNMRmRCUVRkRVV5eFRRVU5CUXl4RlFVRlhMRk5CUVZoQkxFVkJRVmxETEVkQlEycENSaXhGUVVGcFFrY3NiMEpCUVc5Q0xGTkJRVlZHTEVkQlF5OURSeXhGUVVFMFFrWXNSVUZCVFVjc1QwRkJUME1zVFVGQlQySXNSVUZCVTBNc1NVRkZNVVJOTEVWQlFXbENUeXhwUWtGQmFVSXNVMEZCVlU0c1IwRkROVU5ITEVWQlFUUkNTaXhGUVVGcFFrMHNUVUZCVDJJc1JVRkJVME1zY1VSQlJUZEVRU3cyVGtGTlJWVXNSVUZCT0VJc1UwRkJRMFVzUlVGQlQySXNSVUZCVTBNc1ZVRkROVU5aTEU5QlEwWXNVMEZEU2xvc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTEc5Q1FVRnhRaXhyUTBGSE4wTktMRVZCUVZGaExHMUVRM1pDU1N4WFFVRlBaaXhGUVVGblFtbENMRFJIUVVNNVFpeEpRVUZKYUVJc2IwUkJRVkVzVjBGQlQwTXNSVUZCVTBNc1owZEJRemRDUXl4VlFVRlZZeXcyUWtGRFpHWXNSVUZCVHl4SlFVRkpSeXhoUVVGaExEWkNRVUU0UWl3NFJFRkhOVUpNTEdsQ1FVTnNRbXRDTEVWQlFXTnVRaXgxUTBGRFpFa3NWVUZCVldNc1lVRkJZVVVzWVVGQllVZ3NPRVJCUmxaSkxEaERRVUY0UWtNc1QwRkpWSEJDTEVWQlFWRnZRaXh4UkVGRlVtNUNJbjA9XG4iLCJpbXBvcnQgeyBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIge1xuXHRzdGF0aWMgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Z3JhbW1hcnM6IG51bGwsXG5cdFx0bGFuZzogJ2VuLVVTJyxcblx0XHRjb250aW51b3VzOiBmYWxzZSxcblx0XHRpbnRlcmltUmVzdWx0czogZmFsc2UsXG5cdFx0bWF4QWx0ZXJuYXRpdmVzOiAxLFxuXHRcdHNlcnZpY2VVUkk6IG51bGwsXG5cdH1cblxuXHRzdGF0aWMgZXZlbnRUeXBlcyA9IHtcblx0XHRBVURJT19FTkQ6ICdhdWRpb2VuZCcsXG5cdFx0QVVESU9fU1RBUlQ6ICdhdWRpb3N0YXJ0Jyxcblx0XHRFTkQ6ICdlbmQnLFxuXHRcdEVSUk9SOiAnZXJyb3InLFxuXHRcdE5PX01BVENIOiAnbm9tYXRjaCcsXG5cdFx0UkVTVUxUOiAncmVzdWx0Jyxcblx0XHRTT1VORF9FTkQ6ICdzb3VuZGVuZCcsXG5cdFx0U09VTkRfU1RBUlQ6ICdzb3VuZHN0YXJ0Jyxcblx0XHRTUEVFQ0hfRU5EOiAnc3BlZWNoZW5kJyxcblx0XHRTUEVFQ0hfU1RBUlQ6ICdzcGVlY2hzdGFydCcsXG5cdFx0U1RBUlQ6ICdzdGFydCcsXG5cdH1cblxuXHRzdGF0aWMgZ2V0IGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIXdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0ISF3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdCEhd2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHQhIXdpbmRvdy5tc1NwZWVjaFJlY29nbml0aW9uXG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9XG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0e31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdE9iamVjdC5lbnRyaWVzKHsgLi4uU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmRlZmF1bHRPcHRpb25zLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSkuZm9yRWFjaChcblx0XHRcdChba2V5LCB2YWx1ZV0pID0+ICh0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWUpXG5cdFx0KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZSh0eXBlKSkge1xuXHRcdFx0aWYgKCEhdGhpcy5fbGlzdGVuZXJzW3R5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmICh0eXBlID09PSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZXZlbnRUeXBlcy5SRVNVTFQpIHtcblx0XHRcdFx0XHRpZiAoISFldmVudC5yZXN1bHRzICYmIGV2ZW50LnJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0YWRkaXRpb25hbEFyZ3MucHVzaChldmVudC5yZXN1bHRzWzBdWzBdLnRyYW5zY3JpcHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ISFjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseSh0aGlzLCBbLi4uYWRkaXRpb25hbEFyZ3MsIGV2ZW50XSlcblx0XHRcdH1cblx0XHRcdHRoaXMuX2luc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgKGUpID0+IGhhbmRsZXIoZSkpXG5cblx0XHRcdHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA9IGhhbmRsZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXVxuXHRcdHRoaXMuX2luc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlcilcblxuXHRcdGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbdHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlID0gKGV2ZW50VHlwZSkgPT5cblx0XHRPYmplY3QudmFsdWVzKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzKS5maW5kKCh0eXBlKSA9PiB0eXBlID09PSBldmVudFR5cGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBNaWNyb3Bob25lSWNvbiA9ICh7IGljb25Db2xvciA9ICdibGFjaycsIGFjdGl2ZUNvbG9yID0gJ3JlZCcsIGlzQWN0aXZlID0gZmFsc2UgfSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG5cdFx0XHQ8Zz5cblx0XHRcdFx0PHBhdGhcblx0XHRcdFx0XHRmaWxsPXtpY29uQ29sb3J9XG5cdFx0XHRcdFx0ZD1cIk0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6XCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0e2lzQWN0aXZlICYmIDxjaXJjbGUgZmlsbD17YWN0aXZlQ29sb3J9IGN4PVwiMTZcIiBjeT1cIjRcIiByPVwiNFwiIC8+fVxuXHRcdFx0PC9nPlxuXHRcdDwvc3ZnPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1pY3JvcGhvbmVJY29uXG4iLCJpbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBNaWNyb3Bob25lSWNvbiBmcm9tICcuL01pY3JvcGhvbmVJY29uJ1xuXG5jb25zdCBWb2NhbCA9ICh7XG5cdGNoaWxkcmVuLFxuXHRncmFtbWFycyxcblx0bGFuZyxcblx0dGltZW91dCxcblx0YXJpYUxhYmVsLFxuXHR0YWJJbmRleCxcblx0c3R5bGUsXG5cdGNsYXNzTmFtZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JlY29nbml0aW9uSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbClcblx0Y29uc3QgcmVjb2duaXRpb25SZWYgPSB1c2VSZWYobnVsbClcblxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVjb2duaXRpb25SZWYuY3VycmVudCA9IF9fcmVjb2duaXRpb25JbnN0YW5jZSB8fCBuZXcgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyKHsgZ3JhbW1hcnMsIGxhbmcgfSlcblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdHJlY29nbml0aW9uUmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdFx0XHRyZWNvZ25pdGlvblJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW19fcmVjb2duaXRpb25JbnN0YW5jZV0pXG5cblx0Y29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHtcblx0XHR0aW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblx0fVxuXG5cdGNvbnN0IHN0b3BUaW1lciA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdHRpbWVvdXRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdGNvbnN0IHN0YXJ0UmVjb2duaXRpb24gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHNldElzTGlzdGVuaW5nKHRydWUpXG5cblx0XHRcdGNvbnN0IHsgY3VycmVudDogciB9ID0gcmVjb2duaXRpb25SZWZcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBfb25TdGFydClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgX29uRW5kKVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hzdGFydCcsIF9vblNwZWVjaFN0YXJ0KVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hlbmQnLCBfb25TcGVlY2hFbmQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIF9vblJlc3VsdClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBfb25FcnJvcilcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignbm9tYXRjaCcsIF9vbk5vTWF0Y2gpXG5cdFx0XHRyLnN0YXJ0KClcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0X29uRXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RvcFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyhmYWxzZSlcblxuXHRcdFx0Y29uc3QgeyBjdXJyZW50OiByIH0gPSByZWNvZ25pdGlvblJlZlxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmQnLCBfb25FbmQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdub21hdGNoJywgX29uTm9NYXRjaClcblx0XHRcdHIuc3RvcCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXHR9XG5cblx0Y29uc3QgZW5kID0gKCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkNsaWNrID0gKCkgPT4ge1xuXHRcdHN0YXJ0UmVjb2duaXRpb24oKVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0KClcblxuXHRcdCEhb25TdGFydCAmJiBvblN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25FbmQgPSAoZSkgPT4ge1xuXHRcdGVuZCgpXG5cblx0XHQhIW9uRW5kICYmIG9uRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hTdGFydCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hTdGFydCAmJiBvblNwZWVjaFN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hFbmQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaEVuZCAmJiBvblNwZWVjaEVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uUmVzdWx0ID0gKHJlc3VsdCwgZXZlbnQpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvblJlc3VsdCAmJiBvblJlc3VsdChyZXN1bHQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgX29uRXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbkVycm9yICYmIG9uRXJyb3IoZXJyb3IpXG5cdH1cblxuXHRjb25zdCBfb25Ob01hdGNoID0gKGUpID0+IHtcblx0XHQhIW9uTm9NYXRjaCAmJiBvbk5vTWF0Y2goZSlcblx0fVxuXG5cdGNvbnN0IF9yZW5kZXJEZWZhdWx0ID0gKCkgPT4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPVwiX192b2NhbC1yb290X19cIlxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHR0YWJJbmRleD17dGFiSW5kZXh9XG5cdFx0XHRzdHlsZT17Y2xhc3NOYW1lID8gbnVsbCA6IHsgd2lkdGg6IDI0LCBoZWlnaHQ6IDI0LCBjdXJzb3I6ICFpc0xpc3RlbmluZyA/ICdwb2ludGVyJyA6IG51bGwsIC4uLnN0eWxlIH19XG5cdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHQ+XG5cdFx0XHQ8TWljcm9waG9uZUljb24gaXNBY3RpdmU9e2lzTGlzdGVuaW5nfSBpY29uQ29sb3I9XCIjYWFhXCIgLz5cblx0XHQ8L2Rpdj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0U3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmlzU3VwcG9ydGVkICYmXG5cdFx0Y2xvbmVFbGVtZW50KGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogX3JlbmRlckRlZmF1bHQoKSwge1xuXHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdH0pXG5cdClcbn1cblxuVm9jYWwucHJvcFR5cGVzID0ge1xuXHQvKiogRGVmaW5lcyB0aGUgZ3JhbW1hcnMgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9ncmFtbWFycykgKi9cblx0Z3JhbW1hcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSBsYW5ndWFnZSB1bmRlcnN0b29kIGJ5IHRoZSByZWNvZ25pdGlvbiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL2xhbmcpICovXG5cdGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIGRpc2NhcmRpbmcgdGhlIHJlY29nbml0aW9uICovXG5cdHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBhMTF5IGxhYmVsIGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0YXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSB0YWIgaW5kZXggZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbiAqL1xuXHR0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBzdGFydHMgKi9cblx0b25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBlbmRzICovXG5cdG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBzdGFydHMgKi9cblx0b25TcGVlY2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggZW5kcyAqL1xuXHRvblNwZWVjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcmVzdWx0IGlzIHJldHVybmVkIGZyb20gdGUgcmVjb2duaXRpb24gKi9cblx0b25SZXN1bHQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi9cblx0b25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIG5vIHJlc3VsdCBjYW4gYmUgcmVjb2duaXplZCAqL1xuXHRvbk5vTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxufVxuXG5Wb2NhbC5kZWZhdWx0UHJvcHMgPSB7XG5cdGdyYW1tYXJzOiBudWxsLFxuXHRsYW5nOiAnZW4tVVMnLFxuXHR0aW1lb3V0OiAzMDAwLFxuXHRhcmlhTGFiZWw6ICdzcGVlY2gnLFxuXHR0YWJJbmRleDogLTEsXG5cdHN0eWxlOiBudWxsLFxuXHRjbGFzc05hbWU6IG51bGwsXG5cdG9uU3RhcnQ6IG51bGwsXG5cdG9uRW5kOiBudWxsLFxuXHRvblNwZWVjaFN0YXJ0OiBudWxsLFxuXHRvblNwZWVjaEVuZDogbnVsbCxcblx0b25SZXN1bHQ6IG51bGwsXG5cdG9uRXJyb3I6IG51bGwsXG5cdG9uTm9NYXRjaDogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsImV2ZW50VHlwZSIsInZhbHVlcyIsImV2ZW50VHlwZXMiLCJmaW5kIiwidHlwZSIsIlNwZWVjaFJlY29nbml0aW9uIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJfaW5zdGFuY2UiLCJfbGlzdGVuZXJzIiwiZW50cmllcyIsImRlZmF1bHRPcHRpb25zIiwiZm9yRWFjaCIsImtleSIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiUkVTVUxUIiwicmVzdWx0cyIsInRyYW5zY3JpcHQiLCJfdGhpczIiLCJrZXlzIiwiX3RoaXMzIiwiZ3JhbW1hcnMiLCJsYW5nIiwiY29udGludW91cyIsImludGVyaW1SZXN1bHRzIiwibWF4QWx0ZXJuYXRpdmVzIiwic2VydmljZVVSSSIsIkFVRElPX0VORCIsIkFVRElPX1NUQVJUIiwiRU5EIiwiRVJST1IiLCJOT19NQVRDSCIsIlNPVU5EX0VORCIsIlNPVU5EX1NUQVJUIiwiU1BFRUNIX0VORCIsIlNQRUVDSF9TVEFSVCIsIlNUQVJUIiwiTWljcm9waG9uZUljb24iLCJpY29uQ29sb3IiLCJhY3RpdmVDb2xvciIsImlzQWN0aXZlIiwiUmVhY3QiLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJkIiwiY3giLCJjeSIsIlZvY2FsIiwiY2hpbGRyZW4iLCJ0aW1lb3V0IiwiYXJpYUxhYmVsIiwidGFiSW5kZXgiLCJzdHlsZSIsImNsYXNzTmFtZSIsIm9uU3RhcnQiLCJvbkVuZCIsIm9uU3BlZWNoU3RhcnQiLCJvblNwZWVjaEVuZCIsIm9uUmVzdWx0Iiwib25FcnJvciIsIm9uTm9NYXRjaCIsIl9fcmVjb2duaXRpb25JbnN0YW5jZSIsInRpbWVvdXRSZWYiLCJ1c2VSZWYiLCJyZWNvZ25pdGlvblJlZiIsInVzZVN0YXRlIiwiaXNMaXN0ZW5pbmciLCJzZXRJc0xpc3RlbmluZyIsInVzZUVmZmVjdCIsImlzU3VwcG9ydGVkIiwiY3VycmVudCIsImNsZWFudXAiLCJjbGVhclRpbWVvdXQiLCJzdGFydFRpbWVyIiwic2V0VGltZW91dCIsIl9vbkVuZCIsInN0b3BUaW1lciIsInN0b3BSZWNvZ25pdGlvbiIsIl9vblN0YXJ0IiwiX29uU3BlZWNoU3RhcnQiLCJfb25TcGVlY2hFbmQiLCJfb25SZXN1bHQiLCJfb25FcnJvciIsIl9vbk5vTWF0Y2giLCJyZXN1bHQiLCJjbG9uZUVsZW1lbnQiLCJpc1ZhbGlkRWxlbWVudCIsInJvbGUiLCJjdXJzb3IiLCJvbkNsaWNrIiwic3RhcnRSZWNvZ25pdGlvbiIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsInN0cmluZyIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiXSwibWFwcGluZ3MiOiJxbEVBQUEsU0FBU0EsRUFBRUEsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsR0FBRyxJQUFJLElBQUlDLEVBQUVQLEVBQUVLLEdBQUdDLEdBQUdFLEVBQUVELEVBQUVFLE1BQU0sTUFBTVQsR0FBRyxZQUFZRSxFQUFFRixHQUFHTyxFQUFFRyxLQUFLVCxFQUFFTyxHQUFHRyxRQUFRQyxRQUFRSixHQUFHSyxLQUFLVixFQUFFQyxHQUFHLFNBQVNILEVBQUVBLEdB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
import e,{useRef as t,useState as n,useEffect as r,cloneElement as i,isValidElement as o}from"react";import a from"prop-types";function c(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function s(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)}}function u(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return h(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function m(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function d(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){m(o,r,i,a,c,"next",e)}function c(e){m(o,r,i,a,c,"throw",e)}a(void 0)}))}}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w=function(){var e=d(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=d(regeneratorRuntime.mark((function e(n,r){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:i=e.sent,o=function e(t){i.removeEventListener("change",e),g(t.target.state,n,r)},i.addEventListener("change",o),g(i.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),g=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},E=function(){var e=d(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=d(regeneratorRuntime.mark((function e(r,i){var o,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}i(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,w(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:o=e.sent,a=y(o,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),i(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),S=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),l(this,"_instance",null),l(this,"_listeners",null),l(this,"_includesEventType",(function(t){return Object.values(e.eventTypes).find((function(e){return e===t}))}));var r=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition||{};if(this._instance=new r,this._listeners={},t&&!t.grammars){var i=window.SpeechGrammarList||window.webkitSpeechGrammarList||window.mozSpeechGrammarList||window.msSpeechGrammarList||{};this._instance.grammars=new i}Object.entries(p(p({},e.defaultOptions),t||{})).forEach((function(e){var t=v(e,2),r=t[0],i=t[1];return n._instance[r]=i}))}var t,n;return u(e,null,[{key:"isSupported",get:function(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition)},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),u(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,E("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt("return",this);case 15:case"end":return e.stop()}}),e,this,[[1,10]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,i){var o=t.apply(e,n);function a(e){c(o,r,i,a,s,"next",e)}function s(e){c(o,r,i,a,s,"throw",e)}a(void 0)}))},function(){return n.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(t,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var o=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[].concat(o,[i]))};this._instance.addEventListener(t,(function(e){return i(e)})),this._listeners[t]=i}return this}},{key:"removeEventListener",value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:"cleanup",value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),this._instance=null,this}},{key:"instance",get:function(){return this._instance},set:function(e){throw new Error("You cannot set instance directly.")}}]),e}();l(S,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),l(S,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var O=function(t){var n=t.iconColor,r=void 0===n?"black":n,i=t.activeColor,o=void 0===i?"red":i,a=t.isActive,c=void 0!==a&&a;return e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},e.createElement("g",null,e.createElement("path",{fill:r,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),c&&e.createElement("circle",{fill:o,cx:"16",cy:"4",r:"4"})))},_=function(a){var c=a.children,s=a.grammars,u=a.lang,l=a.timeout,f=a.ariaLabel,h=a.tabIndex,m=a.style,d=a.className,y=a.onStart,b=a.onEnd,w=a.onSpeechStart,g=a.onSpeechEnd,E=a.onResult,_=a.onError,R=a.onNoMatch,x=a.__recognitionInstance,L=t(null),k=t(null),j=v(n(!1),2),T=j[0],A=j[1];r((function(){if(S.isSupported)return k.current=x||new S({grammars:s,lang:u}),function(){k.current.abort(),k.current.cleanup(),clearTimeout(L.current)}}),[x]);var P=function(){L.current=setTimeout(I,l)},D=function(){clearTimeout(L.current),L.current=null},N=function(){try{A(!1);var e=k.current;e.removeEventListener("start",U),e.removeEventListener("end",I),e.removeEventListener("speechstart",M),e.removeEventListener("speechend",C),e.removeEventListener("result",z),e.removeEventListener("error",G),e.removeEventListener("nomatch",H),e.stop()}catch(e){_&&_(e)}},U=function(e){P(),y&&y(e)},I=function(e){D(),N(),b&&b(e)},M=function(e){D(),w&&w(e)},C=function(e){P(),g&&g(e)},z=function(e,t){N(),E&&E(e,t)},G=function(e){N(),_&&_(e)},H=function(e){R&&R(e)};return S.isSupported&&i(o(c)?c:e.createElement("div",{"data-testid":"__vocal-root__",role:"button","aria-label":f,tabIndex:h,style:d?null:p({width:24,height:24,cursor:T?null:"pointer"},m),className:d},e.createElement(O,{isActive:T,iconColor:"#aaa"})),p({},!T&&{onClick:function(){!function(){try{A(!0);var e=k.current;e.addEventListener("start",U),e.addEventListener("end",I),e.addEventListener("speechstart",M),e.addEventListener("speechend",C),e.addEventListener("result",z),e.addEventListener("error",G),e.addEventListener("nomatch",H),e.start()}catch(e){G(e)}}()}}))};_.propTypes={grammars:a.object,lang:a.string,timeout:a.number,ariaLabel:a.string,tabIndex:a.number,style:a.object,className:a.string,onStart:a.func,onEnd:a.func,onSpeechStart:a.func,onSpeechEnd:a.func,onResult:a.func,onError:a.func,onNoMatch:a.func},_.defaultProps={grammars:null,lang:"en-US",timeout:3e3,ariaLabel:"speech",tabIndex:-1,style:null,className:null,onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null};export default _;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmpzIiwiLi4vc3JjL01pY3JvcGhvbmVJY29uLmpzIiwiLi4vc3JjL1ZvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGUoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiByKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe2UobyxhLGksdSxjLFwibmV4dFwiLHIpfWZ1bmN0aW9uIGMocil7ZShvLGEsaSx1LGMsXCJ0aHJvd1wiLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbihlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbihlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG4pe3ZhciBhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IucGVybWlzc2lvbnMpe2UubmV4dD00O2JyZWFrfW4obmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb25zIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0xNjticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUubmV4dD03LG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTp0fSk7Y2FzZSA3OmE9ZS5zZW50LG89ZnVuY3Rpb24gZSh0KXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSxpKHQudGFyZ2V0LnN0YXRlLHIsbil9LGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLGkoYS5zdGF0ZSxyLG4pLGUubmV4dD0xNjticmVhaztjYXNlIDEzOmUucHJldj0xMyxlLnQwPWUuY2F0Y2goNCksbihlLnQwKTtjYXNlIDE2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDEzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT1mdW5jdGlvbihlLHIsdCl7c3dpdGNoKGUpe2Nhc2VcImRlbmllZFwiOnQobmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb24gZGVuaWVkXCIsXCJOT1RfQUxMT1dFRF9FUlJcIikpO2JyZWFrO2RlZmF1bHQ6cihlKX19LG89ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKG4saSl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixvKXt2YXIgdSxjLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKXtlLm5leHQ9NDticmVha31vKG5ldyBET01FeGNlcHRpb24oXCJNZWRpYURldmljZXMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS50MD1Qcm9taXNlLGUubmV4dD04LGEobik7Y2FzZSA4OnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9MTEsbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoaSk7Y2FzZSAxMTpyZXR1cm4gZS50Mj1lLnNlbnQsZS50Mz1bZS50MSxlLnQyXSxlLm5leHQ9MTUsZS50MC5hbGwuY2FsbChlLnQwLGUudDMpO2Nhc2UgMTU6dT1lLnNlbnQsYz10KHUsMikscz1jWzFdLHIocyksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6ZS5wcmV2PTIxLGUudDQ9ZS5jYXRjaCg0KSxvKGUudDQpO2Nhc2UgMjQ6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMjFdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHthIGFzIGdldFBlcm1pc3Npb24sbyBhcyBnZXRVc2VyTWVkaWFTdHJlYW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5blpYUlFaWEp0YVhOemFXOXVMbXB6SWl3aUxpNHZjM0pqTDJkbGRGVnpaWEpOWldScFlWTjBjbVZoYlM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNseHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXBJRDArSUh0Y2JseDBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MFhIUnBaaUFvSVc1aGRtbG5ZWFJ2Y2k1d1pYSnRhWE56YVc5dWN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0oxQmxjbTFwYzNOcGIyNXpJRzV2ZENCemRYQndiM0owWldRbkxDQW5UazlVWDBaUFZVNUVYMFZTVWljcEtWeHVYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkRngwWTI5dWMzUWdiMjVEYUdGdVoyVWdQU0FvWlhabGJuUXBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJjZEhKbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNobGRtVnVkQzUwWVhKblpYUXVjM1JoZEdVc0lISmxjMjlzZG1Vc0lISmxhbVZqZENsY2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVW9jR1Z5YldsemMybHZibE4wWVhSMWN5NXpkR0YwWlN3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1Z4dVhIUmNkRngwZlNCallYUmphQ0FvWlhKeWIzSXBJSHRjYmx4MFhIUmNkRngwY21WcVpXTjBLR1Z5Y205eUtWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBmU2xjYm4xY2JseHVZMjl1YzNRZ2NtVnpiMngyWlU5eVVtVnFaV04wUW1GelpXUlBibE4wWVhSbElEMGdLSE4wWVhSbExDQnlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MGMzZHBkR05vSUNoemRHRjBaU2tnZTF4dVhIUmNkR05oYzJVZ0oyUmxibWxsWkNjNlhHNWNkRngwWEhSeVpXcGxZM1FvYm1WM0lFUlBUVVY0WTJWd2RHbHZiaWduVUdWeWJXbHpjMmx2YmlCa1pXNXBaV1FuTENBblRrOVVYMEZNVEU5WFJVUmZSVkpTSnlrcFhHNWNkRngwWEhSaWNtVmhhMXh1WEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMFlYUmxLVnh1WEhSOVhHNTlYRzRpTENKcGJYQnZjblFnWjJWMFVHVnliV2x6YzJsdmJpQm1jbTl0SUNjdUwyZGxkRkJsY20xcGMzTnBiMjRuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5SUdGdVpDQjBhR1VnYzNSeVpXRnRJR2x6SUhKbGRISnBaWFpsWkZ4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQndZWEpoYlNCdFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpJQ0FnSUVOdmJuTjBjbUZwYm5SeklHOWlhbVZqZEM0Z1FITmxaU0JvZEhSd2N6b3ZMMlJsZG1Wc2IzQmxjaTV0YjNwcGJHeGhMbTl5Wnk5bGJpMVZVeTlrYjJOekwxZGxZaTlCVUVrdlRXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlN3Z2JXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjeWtnUFQ0Z2UxeHVYSFJ5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvWVhONWJtTWdLSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkR2xtSUNnaGJtRjJhV2RoZEc5eUxtMWxaR2xoUkdWMmFXTmxjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOUdUMVZPUkY5RlVsSW5LU2xjYmx4MFhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEZ4MGRISjVJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdXeXdnYzNSeVpXRnRYU0E5SUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0Z0Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCblpYUlFaWEp0YVhOemFXOXVLSEJsY20xcGMzTnBiMjVPWVcxbEtTeGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEZ4MFhTbGNibHgwWEhSY2RGeDBjbVZ6YjJ4MlpTaHpkSEpsWVcwcFhHNWNkRngwWEhSOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dVhIUmNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVJbDBzSW01aGJXVnpJanBiSW5CbGNtMXBjM05wYjI1T1lXMWxJaXdpVUhKdmJXbHpaU0lzSW5KbGMyOXNkbVVpTENKeVpXcGxZM1FpTENKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSWtSUFRVVjRZMlZ3ZEdsdmJpSXNJbkYxWlhKNUlpd2libUZ0WlNJc0luQmxjbTFwYzNOcGIyNVRkR0YwZFhNaUxDSnZia05vWVc1blpTSXNJbVYyWlc1MElpd2ljbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaUlzSW5KbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNJc0luUmhjbWRsZENJc0luTjBZWFJsSWl3aVlXUmtSWFpsYm5STWFYTjBaVzVsY2lJc0ltMWxaR2xoVTNSeVpXRnRRMjl1YzNSeVlXbHVkSE1pTENKdFpXUnBZVVJsZG1salpYTWlMQ0puWlhSUVpYSnRhWE56YVc5dUlpd2laMlYwVlhObGNrMWxaR2xoSWl3aVlXeHNJaXdpYzNSeVpXRnRJbDBzSW0xaGNIQnBibWR6SWpvaWJYZERRVXRCTEd0RVFVRmxMRmRCUVU5QkxEUkhRVU5rTEVsQlFVbERMRzlFUVVGUkxGZEJRVTlETEVWQlFWTkRMRGhHUVVNM1FrTXNWVUZCVlVNc05FSkJRMlJHTEVWQlFVOHNTVUZCU1Vjc1lVRkJZU3cwUWtGQk5rSXNhMFZCUjNKQ1JpeFZRVUZWUXl4WlFVRlpSU3hOUVVGTkxFTkJRVVZETEV0QlFVMVNMRmRCUVRkRVV5eFRRVU5CUXl4RlFVRlhMRk5CUVZoQkxFVkJRVmxETEVkQlEycENSaXhGUVVGcFFrY3NiMEpCUVc5Q0xGTkJRVlZHTEVkQlF5OURSeXhGUVVFMFFrWXNSVUZCVFVjc1QwRkJUME1zVFVGQlQySXNSVUZCVTBNc1NVRkZNVVJOTEVWQlFXbENUeXhwUWtGQmFVSXNVMEZCVlU0c1IwRkROVU5ITEVWQlFUUkNTaXhGUVVGcFFrMHNUVUZCVDJJc1JVRkJVME1zY1VSQlJUZEVRU3cyVGtGTlJWVXNSVUZCT0VJc1UwRkJRMFVzUlVGQlQySXNSVUZCVTBNc1ZVRkROVU5aTEU5QlEwWXNVMEZEU2xvc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTEc5Q1FVRnhRaXhyUTBGSE4wTktMRVZCUVZGaExHMUVRM1pDU1N4WFFVRlBaaXhGUVVGblFtbENMRFJIUVVNNVFpeEpRVUZKYUVJc2IwUkJRVkVzVjBGQlQwTXNSVUZCVTBNc1owZEJRemRDUXl4VlFVRlZZeXcyUWtGRFpHWXNSVUZCVHl4SlFVRkpSeXhoUVVGaExEWkNRVUU0UWl3NFJFRkhOVUpNTEdsQ1FVTnNRbXRDTEVWQlFXTnVRaXgxUTBGRFpFa3NWVUZCVldNc1lVRkJZVVVzWVVGQllVZ3NPRVJCUmxaSkxEaERRVUY0UWtNc1QwRkpWSEJDTEVWQlFWRnZRaXh4UkVGRlVtNUNJbjA9XG4iLCJpbXBvcnQgeyBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIge1xuXHRzdGF0aWMgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Z3JhbW1hcnM6IG51bGwsXG5cdFx0bGFuZzogJ2VuLVVTJyxcblx0XHRjb250aW51b3VzOiBmYWxzZSxcblx0XHRpbnRlcmltUmVzdWx0czogZmFsc2UsXG5cdFx0bWF4QWx0ZXJuYXRpdmVzOiAxLFxuXHRcdHNlcnZpY2VVUkk6IG51bGwsXG5cdH1cblxuXHRzdGF0aWMgZXZlbnRUeXBlcyA9IHtcblx0XHRBVURJT19FTkQ6ICdhdWRpb2VuZCcsXG5cdFx0QVVESU9fU1RBUlQ6ICdhdWRpb3N0YXJ0Jyxcblx0XHRFTkQ6ICdlbmQnLFxuXHRcdEVSUk9SOiAnZXJyb3InLFxuXHRcdE5PX01BVENIOiAnbm9tYXRjaCcsXG5cdFx0UkVTVUxUOiAncmVzdWx0Jyxcblx0XHRTT1VORF9FTkQ6ICdzb3VuZGVuZCcsXG5cdFx0U09VTkRfU1RBUlQ6ICdzb3VuZHN0YXJ0Jyxcblx0XHRTUEVFQ0hfRU5EOiAnc3BlZWNoZW5kJyxcblx0XHRTUEVFQ0hfU1RBUlQ6ICdzcGVlY2hzdGFydCcsXG5cdFx0U1RBUlQ6ICdzdGFydCcsXG5cdH1cblxuXHRzdGF0aWMgZ2V0IGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIXdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0ISF3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdCEhd2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHQhIXdpbmRvdy5tc1NwZWVjaFJlY29nbml0aW9uXG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9XG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0e31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdGlmKCEhb3B0aW9ucyAmJiAhb3B0aW9ucy5ncmFtbWFycykge1xuXHRcdFx0Y29uc3QgU3BlZWNoR3JhbW1hckxpc3QgPVxuXHRcdFx0XHR3aW5kb3cuU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdFx0d2luZG93LndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHRcdHdpbmRvdy5tb3pTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0XHR3aW5kb3cubXNTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0XHR7fVxuXHRcdFx0dGhpcy5faW5zdGFuY2UuZ3JhbW1hcnMgPSBuZXcgU3BlZWNoR3JhbW1hckxpc3QoKVxuXHRcdH1cblxuXHRcdE9iamVjdC5lbnRyaWVzKHsgLi4uU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmRlZmF1bHRPcHRpb25zLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSkuZm9yRWFjaChcblx0XHRcdChba2V5LCB2YWx1ZV0pID0+ICh0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWUpXG5cdFx0KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZSh0eXBlKSkge1xuXHRcdFx0aWYgKCEhdGhpcy5fbGlzdGVuZXJzW3R5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmICh0eXBlID09PSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZXZlbnRUeXBlcy5SRVNVTFQpIHtcblx0XHRcdFx0XHRpZiAoISFldmVudC5yZXN1bHRzICYmIGV2ZW50LnJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0YWRkaXRpb25hbEFyZ3MucHVzaChldmVudC5yZXN1bHRzWzBdWzBdLnRyYW5zY3JpcHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ISFjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseSh0aGlzLCBbLi4uYWRkaXRpb25hbEFyZ3MsIGV2ZW50XSlcblx0XHRcdH1cblx0XHRcdHRoaXMuX2luc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgKGUpID0+IGhhbmRsZXIoZSkpXG5cblx0XHRcdHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA9IGhhbmRsZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXVxuXHRcdHRoaXMuX2luc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlcilcblxuXHRcdGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbdHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlID0gKGV2ZW50VHlwZSkgPT5cblx0XHRPYmplY3QudmFsdWVzKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzKS5maW5kKCh0eXBlKSA9PiB0eXBlID09PSBldmVudFR5cGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBNaWNyb3Bob25lSWNvbiA9ICh7IGljb25Db2xvciA9ICdibGFjaycsIGFjdGl2ZUNvbG9yID0gJ3JlZCcsIGlzQWN0aXZlID0gZmFsc2UgfSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG5cdFx0XHQ8Zz5cblx0XHRcdFx0PHBhdGhcblx0XHRcdFx0XHRmaWxsPXtpY29uQ29sb3J9XG5cdFx0XHRcdFx0ZD1cIk0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6XCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0e2lzQWN0aXZlICYmIDxjaXJjbGUgZmlsbD17YWN0aXZlQ29sb3J9IGN4PVwiMTZcIiBjeT1cIjRcIiByPVwiNFwiIC8+fVxuXHRcdFx0PC9nPlxuXHRcdDwvc3ZnPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1pY3JvcGhvbmVJY29uXG4iLCJpbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBNaWNyb3Bob25lSWNvbiBmcm9tICcuL01pY3JvcGhvbmVJY29uJ1xuXG5jb25zdCBWb2NhbCA9ICh7XG5cdGNoaWxkcmVuLFxuXHRncmFtbWFycyxcblx0bGFuZyxcblx0dGltZW91dCxcblx0YXJpYUxhYmVsLFxuXHR0YWJJbmRleCxcblx0c3R5bGUsXG5cdGNsYXNzTmFtZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JlY29nbml0aW9uSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbClcblx0Y29uc3QgcmVjb2duaXRpb25SZWYgPSB1c2VSZWYobnVsbClcblxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVjb2duaXRpb25SZWYuY3VycmVudCA9IF9fcmVjb2duaXRpb25JbnN0YW5jZSB8fCBuZXcgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyKHsgZ3JhbW1hcnMsIGxhbmcgfSlcblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdHJlY29nbml0aW9uUmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdFx0XHRyZWNvZ25pdGlvblJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW19fcmVjb2duaXRpb25JbnN0YW5jZV0pXG5cblx0Y29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHtcblx0XHR0aW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblx0fVxuXG5cdGNvbnN0IHN0b3BUaW1lciA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdHRpbWVvdXRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdGNvbnN0IHN0YXJ0UmVjb2duaXRpb24gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHNldElzTGlzdGVuaW5nKHRydWUpXG5cblx0XHRcdGNvbnN0IHsgY3VycmVudDogciB9ID0gcmVjb2duaXRpb25SZWZcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBfb25TdGFydClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgX29uRW5kKVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hzdGFydCcsIF9vblNwZWVjaFN0YXJ0KVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hlbmQnLCBfb25TcGVlY2hFbmQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIF9vblJlc3VsdClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBfb25FcnJvcilcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignbm9tYXRjaCcsIF9vbk5vTWF0Y2gpXG5cdFx0XHRyLnN0YXJ0KClcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0X29uRXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RvcFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyhmYWxzZSlcblxuXHRcdFx0Y29uc3QgeyBjdXJyZW50OiByIH0gPSByZWNvZ25pdGlvblJlZlxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmQnLCBfb25FbmQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdub21hdGNoJywgX29uTm9NYXRjaClcblx0XHRcdHIuc3RvcCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXHR9XG5cblx0Y29uc3QgZW5kID0gKCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkNsaWNrID0gKCkgPT4ge1xuXHRcdHN0YXJ0UmVjb2duaXRpb24oKVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0KClcblxuXHRcdCEhb25TdGFydCAmJiBvblN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25FbmQgPSAoZSkgPT4ge1xuXHRcdGVuZCgpXG5cblx0XHQhIW9uRW5kICYmIG9uRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hTdGFydCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hTdGFydCAmJiBvblNwZWVjaFN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hFbmQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaEVuZCAmJiBvblNwZWVjaEVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uUmVzdWx0ID0gKHJlc3VsdCwgZXZlbnQpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvblJlc3VsdCAmJiBvblJlc3VsdChyZXN1bHQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgX29uRXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbkVycm9yICYmIG9uRXJyb3IoZXJyb3IpXG5cdH1cblxuXHRjb25zdCBfb25Ob01hdGNoID0gKGUpID0+IHtcblx0XHQhIW9uTm9NYXRjaCAmJiBvbk5vTWF0Y2goZSlcblx0fVxuXG5cdGNvbnN0IF9yZW5kZXJEZWZhdWx0ID0gKCkgPT4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPVwiX192b2NhbC1yb290X19cIlxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHR0YWJJbmRleD17dGFiSW5kZXh9XG5cdFx0XHRzdHlsZT17Y2xhc3NOYW1lID8gbnVsbCA6IHsgd2lkdGg6IDI0LCBoZWlnaHQ6IDI0LCBjdXJzb3I6ICFpc0xpc3RlbmluZyA/ICdwb2ludGVyJyA6IG51bGwsIC4uLnN0eWxlIH19XG5cdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHQ+XG5cdFx0XHQ8TWljcm9waG9uZUljb24gaXNBY3RpdmU9e2lzTGlzdGVuaW5nfSBpY29uQ29sb3I9XCIjYWFhXCIgLz5cblx0XHQ8L2Rpdj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0U3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmlzU3VwcG9ydGVkICYmXG5cdFx0Y2xvbmVFbGVtZW50KGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogX3JlbmRlckRlZmF1bHQoKSwge1xuXHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdH0pXG5cdClcbn1cblxuVm9jYWwucHJvcFR5cGVzID0ge1xuXHQvKiogRGVmaW5lcyB0aGUgZ3JhbW1hcnMgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9ncmFtbWFycykgKi9cblx0Z3JhbW1hcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSBsYW5ndWFnZSB1bmRlcnN0b29kIGJ5IHRoZSByZWNvZ25pdGlvbiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL2xhbmcpICovXG5cdGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIGRpc2NhcmRpbmcgdGhlIHJlY29nbml0aW9uICovXG5cdHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBhMTF5IGxhYmVsIGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0YXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSB0YWIgaW5kZXggZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbiAqL1xuXHR0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBzdGFydHMgKi9cblx0b25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBlbmRzICovXG5cdG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBzdGFydHMgKi9cblx0b25TcGVlY2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggZW5kcyAqL1xuXHRvblNwZWVjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcmVzdWx0IGlzIHJldHVybmVkIGZyb20gdGUgcmVjb2duaXRpb24gKi9cblx0b25SZXN1bHQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi9cblx0b25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIG5vIHJlc3VsdCBjYW4gYmUgcmVjb2duaXplZCAqL1xuXHRvbk5vTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxufVxuXG5Wb2NhbC5kZWZhdWx0UHJvcHMgPSB7XG5cdGdyYW1tYXJzOiBudWxsLFxuXHRsYW5nOiAnZW4tVVMnLFxuXHR0aW1lb3V0OiAzMDAwLFxuXHRhcmlhTGFiZWw6ICdzcGVlY2gnLFxuXHR0YWJJbmRleDogLTEsXG5cdHN0eWxlOiBudWxsLFxuXHRjbGFzc05hbWU6IG51bGwsXG5cdG9uU3RhcnQ6IG51bGwsXG5cdG9uRW5kOiBudWxsLFxuXHRvblNwZWVjaFN0YXJ0OiBudWxsLFxuXHRvblNwZWVjaEVuZDogbnVsbCxcblx0b25SZXN1bHQ6IG51bGwsXG5cdG9uRXJyb3I6IG51bGwsXG5cdG9uTm9NYXRjaDogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsImV2ZW50VHlwZSIsInZhbHVlcyIsImV2ZW50VHlwZXMiLCJmaW5kIiwidHlwZSIsIlNwZWVjaFJlY29nbml0aW9uIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJfaW5zdGFuY2UiLCJfbGlzdGVuZXJzIiwiZ3JhbW1hcnMiLCJTcGVlY2hHcmFtbWFyTGlzdCIsIndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IiwibW96U3BlZWNoR3JhbW1hckxpc3QiLCJtc1NwZWVjaEdyYW1tYXJMaXN0IiwiZW50cmllcyIsImRlZmF1bHRPcHRpb25zIiwiZm9yRWFjaCIsImtleSIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiUkVTVUxUIiwicmVzdWx0cyIsInRyYW5zY3JpcHQiLCJfdGhpczIiLCJrZXlzIiwiX3RoaXMzIiwibGFuZyIsImNvbnRpbnVvdXMiLCJpbnRlcmltUmVzdWx0cyIsIm1heEFsdGVybmF0aXZlcyIsInNlcnZpY2VVUkkiLCJBVURJT19FTkQiLCJBVURJT19TVEFSVCIsIkVORCIsIkVSUk9SIiwiTk9fTUFUQ0giLCJTT1VORF9FTkQiLCJTT1VORF9TVEFSVCIsIlNQRUVDSF9FTkQiLCJTUEVFQ0hfU1RBUlQiLCJTVEFSVCIsIk1pY3JvcGhvbmVJY29uIiwiaWNvbkNvbG9yIiwiYWN0aXZlQ29sb3IiLCJpc0FjdGl2ZSIsIlJlYWN0IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZCIsImN4IiwiY3kiLCJWb2NhbCIsImNoaWxkcmVuIiwidGltZW91dCIsImFyaWFMYWJlbCIsInRhYkluZGV4Iiwic3R5bGUiLCJjbGFzc05hbWUiLCJvblN0YXJ0Iiwib25FbmQiLCJvblNwZWVjaFN0YXJ0Iiwib25TcGVlY2hFbmQiLCJvblJlc3VsdCIsIm9uRXJyb3IiLCJvbk5vTWF0Y2giLCJfX3JlY29nbml0aW9uSW5zdGFuY2UiLCJ0aW1lb3V0UmVmIiwidXNlUmVmIiwicmVjb2duaXRpb25SZWYiLCJ1c2VTdGF0ZSIsImlzTGlzdGVuaW5nIiwic2V0SXNMaXN0ZW5pbmciLCJ1c2VFZmZlY3QiLCJpc1N1cHBvcnRlZCIsImN1cnJlbnQiLCJjbGVhbnVwIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnRUaW1lciIsInNldFRpbWVvdXQiLCJfb25FbmQiLCJzdG9wVGltZXIiLCJzdG9wUmVjb2duaXRpb24iLCJfb25TdGFydCIsIl9vblNwZWVjaFN0YXJ0IiwiX29uU3BlZWNoRW5kIiwiX29uUmVzdWx0IiwiX29uRXJyb3IiLCJfb25Ob01hdGNoIiwicmVzdWx0IiwiY2xvbmVFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJyb2xlIiwiY3Vyc29yIiwib25DbGljayIsInN0YXJ0UmVjb2duaXRpb24iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJzdHJpbmciLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoicWxFQUFBLFNBQVNBLEVBQUVBLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEdBQUcsSUFBSSxJQUFJQyxFQUFFUCxFQUFFSyxHQUFHQyxHQUFHRSxFQUFFRCxFQUFFRSxNQUFNLE1BQU1ULEdBQUcsWUFBWUUsRUFBRUYsR0FBR08sRUFBRUcsS0FBS1QsRUFBRU8sR0FBR0csUUFBUUMsUUFBUUosR0FBR0ssS0FBS1YsRUFBRUMsR0FBRyxTQUFTSCxFQUFFQSxHQUFHLE9BQU8sV0FBVyxJQUFJQyxFQUFFWSxLQUFLWCxFQUFFWSxVQUFVLE9BQU8sSUFBSUosa0JBQWtCUCxFQUFFQyxHQUFHLElBQUlDLEVBQUVMLEVBQUVlLE1BQU1kLEVBQUVDLEdBQUcsU0FBU0ksRUFBRU4sR0FBR0QsRUFBRU0sRUFBRUYsRUFBRUMsRUFBRUUsRUFBRUMsRUFBRSxPQUFPUCxHQUFHLFNBQVNPLEVBQUVQLEdBQUdELEVBQUVNLEVBQUVGLEVBQUVDLEVBQUVFLEVBQUVDLEVBQUUsUUFBUVAsR0FBR00sT0FBRSxPQUFZLFNBQVNMLEVBQUVGLEVBQUVDLEdBQUcsT0FBTyxTQUFTRCxHQUFHLEdBQUdpQixNQUFNQyxRQUFRbEIsR0FBRyxPQUFPQSxFQUF2QyxDQUEwQ0EsSUFBSSxTQUFTQSxFQUFFQyxHQUFHLEdBQUcsb0JBQW9Ca0IsUUFBVUEsT0FBT0MsWUFBWUMsT0FBT3JCLEdBQTNELENBQXNFLElBQUlFLEVBQUUsR0FBR0MsR0FBRSxFQUFHQyxHQUFFLEVBQUdDLE9BQUUsRUFBTyxJQUFJLElBQUksSUFBSUMsRUFBRUMsRUFBRVAsRUFBRW1CLE9BQU9DLGNBQWNqQixHQUFHRyxFQUFFQyxFQUFFZSxRQUFRWixRQUFRUixFQUFFcUIsS0FBS2pCLEVBQUVHLFFBQVFSLEdBQUdDLEVBQUVzQixTQUFTdkIsR0FBR0UsR0FBRSxJQUFLLE1BQU1ILEdBQUdJLEdBQUUsRUFBR0MsRUFBRUwsRUFBRSxRQUFRLElBQUlHLEdBQUcsTUFBTUksRUFBRWtCLFFBQVFsQixFQUFFa0IsU0FBUyxRQUFRLEdBQUdyQixFQUFFLE1BQU1DLEdBQUcsT0FBT0gsR0FBaFQsQ0FBbVRGLEVBQUVDLElBQUksU0FBU0QsRUFBRUMsR0FBRyxHQUFJRCxFQUFKLENBQWEsR0FBRyxpQkFBaUJBLEVBQUUsT0FBT0csRUFBRUgsRUFBRUMsR0FBRyxJQUFJQyxFQUFFbUIsT0FBT0ssVUFBVUMsU0FBU0MsS0FBSzVCLEdBQUc2QixNQUFNLEdBQUcsR0FBdUQsTUFBcEQsV0FBVzNCLEdBQUdGLEVBQUU4QixjQUFjNUIsRUFBRUYsRUFBRThCLFlBQVlDLE1BQVMsUUFBUTdCLEdBQUcsUUFBUUEsRUFBU2UsTUFBTWUsS0FBS2hDLEdBQU0sY0FBY0UsR0FBRywyQ0FBMkMrQixLQUFLL0IsR0FBVUMsRUFBRUgsRUFBRUMsUUFBbEYsR0FBcE4sQ0FBMFNELEVBQUVDLElBQUksV0FBVyxNQUFNLElBQUlpQyxVQUFVLDZJQUEvQixHQUErSyxTQUFTL0IsRUFBRUgsRUFBRUMsSUFBSSxNQUFNQSxHQUFHQSxFQUFFRCxFQUFFd0IsVUFBVXZCLEVBQUVELEVBQUV3QixRQUFRLElBQUksSUFBSXRCLEVBQUUsRUFBRUMsRUFBRSxJQUFJYyxNQUFNaEIsR0FBR0MsRUFBRUQsRUFBRUMsSUFBSUMsRUFBRUQsR0FBR0YsRUFBRUUsR0FBRyxPQUFPQyxFQUFFLElBQUlDLEVBQUUsV0FBVyxJQUFJSixFQUFFQyxFQUFFa0MsbUJBQW1CQyxlQUFlcEMsRUFBRUUsR0FBRyxPQUFPaUMsbUJBQW1CRSxlQUFlckMsR0FBRyxPQUFPLE9BQU9BLEVBQUVzQyxLQUFLdEMsRUFBRXNCLE1BQU0sS0FBSyxFQUFFLE9BQU90QixFQUFFdUMsT0FBTyxTQUFTLElBQUk1QixRQUFRLFdBQVcsSUFBSVgsRUFBRUMsRUFBRWtDLG1CQUFtQkMsZUFBZXBDLEVBQUVDLEVBQUVFLEdBQUcsSUFBSUMsRUFBRUUsRUFBRSxPQUFPNkIsbUJBQW1CRSxlQUFlckMsR0FBRyxPQUFPLE9BQU9BLEVBQUVzQyxLQUFLdEMsRUFBRXNCLE1BQU0sS0FBSyxFQUFFLEdBQUdrQixVQUFVQyxZQUFZLENBQUN6QyxFQUFFc0IsS0FBSyxFQUFFLE1BQU1uQixFQUFFLElBQUl1QyxhQUFhLDRCQUE0QixrQkFBa0IxQyxFQUFFc0IsS0FBSyxHQUFHLE1BQU0sS0FBSyxFQUFFLE9BQU90QixFQUFFc0MsS0FBSyxFQUFFdEMsRUFBRXNCLEtBQUssRUFBRWtCLFVBQVVDLFlBQVlFLE1BQU0sQ0FBQ1osS0FBSzdCLElBQUksS0FBSyxFQUFFRSxFQUFFSixFQUFFNEMsS0FBS3RDLEVBQUUsU0FBU04sRUFBRUUsR0FBR0UsRUFBRXlDLG9CQUFvQixTQUFTN0MsR0FBR0ssRUFBRUgsRUFBRTRDLE9BQU9DLE1BQU05QyxFQUFFRSxJQUFJQyxFQUFFNEMsaUJBQWlCLFNBQVMxQyxHQUFHRCxFQUFFRCxFQUFFMkMsTUFBTTlDLEVBQUVFLEdBQUdILEVBQUVzQixLQUFLLEdBQUcsTUFBTSxLQUFLLEdBQUd0QixFQUFFc0MsS0FBSyxHQUFHdEMsRUFBRWlELEdBQUdqRCxFQUFFa0QsTUFBTSxHQUFHL0MsRUFBRUgsRUFBRWlELElBQUksS0FBSyxHQUFHLElBQUksTUFBTSxPQUFPakQsRUFBRW1ELFVBQVVuRCxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxPQUFPLFNBQVNDLEVBQUVDLEdBQUcsT0FBT0YsRUFBRWdCLE1BQU1GLEtBQUtDLFlBQXhuQixLQUF5b0IsS0FBSyxFQUFFLElBQUksTUFBTSxPQUFPZixFQUFFbUQsVUFBVW5ELE9BQU8sT0FBTyxTQUFTQyxHQUFHLE9BQU9ELEVBQUVnQixNQUFNRixLQUFLQyxZQUExNEIsR0FBeTVCVixFQUFFLFNBQVNMLEVBQUVDLEVBQUVDLEdBQUcsT0FBT0YsR0FBRyxJQUFJLFNBQVNFLEVBQUUsSUFBSXdDLGFBQWEsb0JBQW9CLG9CQUFvQixNQUFNLFFBQVF6QyxFQUFFRCxLQUFLTSxFQUFFLFdBQVcsSUFBSU4sRUFBRUMsRUFBRWtDLG1CQUFtQkMsZUFBZXBDLEVBQUVHLEVBQUVFLEdBQUcsT0FBTzhCLG1CQUFtQkUsZUFBZXJDLEdBQUcsT0FBTyxPQUFPQSxFQUFFc0MsS0FBS3RDLEVBQUVzQixNQUFNLEtBQUssRUFBRSxPQUFPdEIsRUFBRXVDLE9BQU8sU0FBUyxJQUFJNUIsUUFBUSxXQUFXLElBQUlYLEVBQUVDLEVBQUVrQyxtQkFBbUJDLGVBQWVwQyxFQUFFQyxFQUFFSyxHQUFHLElBQUlDLEVBQUVDLEVBQUU0QyxFQUFFLE9BQU9qQixtQkFBbUJFLGVBQWVyQyxHQUFHLE9BQU8sT0FBT0EsRUFBRXNDLEtBQUt0QyxFQUFFc0IsTUFBTSxLQUFLLEVBQUUsR0FBR2tCLFVBQVVhLGFBQWEsQ0FBQ3JELEVBQUVzQixLQUFLLEVBQUUsTUFBTWhCLEVBQUUsSUFBSW9DLGFBQWEsNkJBQTZCLGtCQUFrQjFDLEVBQUVzQixLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUUsT0FBT3RCLEVBQUVzQyxLQUFLLEVBQUV0QyxFQUFFaUQsR0FBR3RDLFFBQVFYLEVBQUVzQixLQUFLLEVBQUVsQixFQUFFRCxHQUFHLEtBQUssRUFBRSxPQUFPSCxFQUFFc0QsR0FBR3RELEVBQUU0QyxLQUFLNUMsRUFBRXNCLEtBQUssR0FBR2tCLFVBQVVhLGFBQWFFLGFBQWFsRCxHQUFHLEtBQUssR0FBRyxPQUFPTCxFQUFFd0QsR0FBR3hELEVBQUU0QyxLQUFLNUMsRUFBRXlELEdBQUcsQ0FBQ3pELEVBQUVzRCxHQUFHdEQsRUFBRXdELElBQUl4RCxFQUFFc0IsS0FBSyxHQUFHdEIsRUFBRWlELEdBQUdTLElBQUk5QixLQUFLNUIsRUFBRWlELEdBQUdqRCxFQUFFeUQsSUFBSSxLQUFLLEdBQUdsRCxFQUFFUCxFQUFFNEMsS0FBS3BDLEVBQUVOLEVBQUVLLEVBQUUsR0FBRzZDLEVBQUU1QyxFQUFFLEdBQUdQLEVBQUVtRCxHQUFHcEQsRUFBRXNCLEtBQUssR0FBRyxNQUFNLEtBQUssR0FBR3RCLEVBQUVzQyxLQUFLLEdBQUd0QyxFQUFFMkQsR0FBRzNELEVBQUVrRCxNQUFNLEdBQUc1QyxFQUFFTixFQUFFMkQsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLE9BQU8zRCxFQUFFbUQsVUFBVW5ELEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLE9BQU8sU0FBU0MsRUFBRUMsR0FBRyxPQUFPRixFQUFFZ0IsTUFBTUYsS0FBS0MsWUFBanFCLEtBQWtyQixLQUFLLEVBQUUsSUFBSSxNQUFNLE9BQU9mLEVBQUVtRCxVQUFVbkQsT0FBTyxPQUFPLFNBQVNDLEVBQUVDLEdBQUcsT0FBT0YsRUFBRWdCLE1BQU1GLEtBQUtDLFlBQXY3QixHQ0V2eEU2Qyx3QkF3Q09DLHVJQUhBLDBCQUNDLG1DQWdIUSxTQUFDQyxVQUNyQnpDLE9BQU8wQyxPQUFPSCxFQUF5QkksWUFBWUMsTUFBSyxTQUFDQyxVQUFTQSxJQUFTSixZQTlHckVLLEVBQ0xDLE9BQU9ELG1CQUNQQyxPQUFPQyx5QkFDUEQsT0FBT0Usc0JBQ1BGLE9BQU9HLHFCQUNQLFdBQ0lDLFVBQVksSUFBSUwsT0FDaEJNLFdBQWEsR0FFYlosSUFBWUEsRUFBUWEsU0FBVSxLQUM1QkMsRUFDTFAsT0FBT08sbUJBQ1BQLE9BQU9RLHlCQUNQUixPQUFPUyxzQkFDUFQsT0FBT1UscUJBQ1AsUUFDSU4sVUFBVUUsU0FBVyxJQUFJQyxFQUcvQnRELE9BQU8wRCxlQUFhbkIsRUFBeUJvQixnQkFBb0JuQixHQUFXLEtBQU9vQixTQUNsRix5QkFBRUMsT0FBS3pFLGNBQVkwRSxFQUFLWCxVQUFVVSxHQUFPekUseUVBbkN2QzJELE9BQU9ELG1CQUNQQyxPQUFPQyx5QkFDUEQsT0FBT0Usc0JBQ1BGLE9BQU9HLG1DQUlZYSxTQUNoQixJQUFJQyxNQUFNLHVNQXdDVnZFLEtBQUswRCxvREFFWWMsRUFBbUIsYUFBYyxDQUFFQyxPQUFPLDJDQUV4RCxJQUFJRixNQUFNLCtEQUVaYixVQUFVZ0IsMkRBRVRDLEVBQWUzRSxLQUFLMkQsV0FBV2lCLFFBRXBDRCx5Q0FLSTNFLGdVQUlEQSxLQUFLMEQsZ0JBQ0xBLFVBQVVyQixPQUdUckMsNENBSURBLEtBQUswRCxnQkFDTEEsVUFBVW1CLFFBR1Q3RSw4Q0FHU29ELEVBQU0wQixpQkFDaEI5RSxLQUFLMEQsV0FBYTFELEtBQUsrRSxtQkFBbUIzQixHQUFPLENBQ2hEcEQsS0FBSzJELFdBQVdQLFNBQ2hCckIsb0JBQW9CcUIsT0FHcEI0QixFQUFVLFNBQUNDLE9BQ1pDLEVBQWlCLEdBQ2pCOUIsSUFBU04sRUFBeUJJLFdBQVdpQyxRQUMxQ0YsRUFBTUcsU0FBV0gsRUFBTUcsUUFBUTFFLE9BQVMsR0FDN0N3RSxFQUFlekUsS0FBS3dFLEVBQU1HLFFBQVEsR0FBRyxHQUFHQyxZQUl4Q1AsR0FBWUEsRUFBUzVFLE1BQU1vRixZQUFVSixHQUFnQkQsV0FFbkR2QixVQUFVeEIsaUJBQWlCa0IsR0FBTSxTQUFDbEUsVUFBTThGLEVBQVE5RixXQUVoRHlFLFdBQVdQLEdBQVE0QixTQUdsQmhGLGlEQUdZb0QsT0FDYjRCLEVBQVVoRixLQUFLMkQsV0FBV1AsZUFDM0JNLFVBQVUzQixvQkFBb0JxQixFQUFNNEIsVUFFbENoRixLQUFLMkQsV0FBV1AsR0FFaEJwRCw4REFJRnFDLE9BRUw5QixPQUFPZ0YsS0FBS3ZGLEtBQUsyRCxZQUFZUSxTQUFRLFNBQUNDLFVBQVFvQixFQUFLekQsb0JBQW9CcUMsV0FDbEVWLFVBQVksS0FFVjFELDZDQWpGQUEsS0FBSzBELHdCQUdBWSxTQUNOLElBQUlDLE1BQU0sZ0RBdEVaekIsbUJBQ21CLENBQ3ZCYyxTQUFVLEtBQ1Y2QixLQUFNLFFBQ05DLFlBQVksRUFDWkMsZ0JBQWdCLEVBQ2hCQyxnQkFBaUIsRUFDakJDLFdBQVksU0FQUi9DLGVBVWUsQ0FDbkJnRCxVQUFXLFdBQ1hDLFlBQWEsYUFDYkMsSUFBSyxNQUNMQyxNQUFPLFFBQ1BDLFNBQVUsVUFDVmYsT0FBUSxTQUNSZ0IsVUFBVyxXQUNYQyxZQUFhLGFBQ2JDLFdBQVksWUFDWkMsYUFBYyxjQUNkQyxNQUFPLFVDckJULElBQU1DLEVBQWlCLG9CQUFHQyxVQUFBQSxhQUFZLGNBQVNDLFlBQUFBLGFBQWMsWUFBT0MsU0FBQUEsdUJBRWxFQyx1QkFBS0MsTUFBTSw2QkFBNkJDLE1BQU0sT0FBT0MsT0FBTyxPQUFPQyxRQUFRLGFBQzFFSix5QkFDQ0Esd0JBQ0NLLEtBQU1SLEVBQ05TLEVBQUUsb01BRUZQLEdBQVlDLDBCQUFRSyxLQUFNUCxFQUFhUyxHQUFHLEtBQUtDLEdBQUcsSUFBSWpJLEVBQUUsU0NIdkRrSSxFQUFRLGdCQUNiQyxJQUFBQSxTQUNBMUQsSUFBQUEsU0FDQTZCLElBQUFBLEtBQ0E4QixJQUFBQSxRQUNBQyxJQUFBQSxVQUNBQyxJQUFBQSxTQUNBQyxJQUFBQSxNQUNBQyxJQUFBQSxVQUNBQyxJQUFBQSxRQUNBQyxJQUFBQSxNQUNBQyxJQUFBQSxjQUNBQyxJQUFBQSxZQUNBQyxJQUFBQSxTQUNBQyxJQUFBQSxRQUNBQyxJQUFBQSxVQUNBQyxJQUFBQSxzQkFFTUMsRUFBYUMsRUFBTyxNQUNwQkMsRUFBaUJELEVBQU8sVUFFUUUsR0FBUyxNQUF4Q0MsT0FBYUMsT0FFcEJDLEdBQVUsY0FDTDVGLEVBQXlCNkYsbUJBQzVCTCxFQUFlTSxRQUFVVCxHQUF5QixJQUFJckYsRUFBeUIsQ0FBRWMsU0FBQUEsRUFBVTZCLEtBQUFBLElBQ3BGLFdBQ042QyxFQUFlTSxRQUFRL0QsUUFDdkJ5RCxFQUFlTSxRQUFRQyxVQUN2QkMsYUFBYVYsRUFBV1EsWUFHeEIsQ0FBQ1QsUUFFRVksRUFBYSxXQUNsQlgsRUFBV1EsUUFBVUksV0FBV0MsRUFBUTFCLElBR25DMkIsRUFBWSxXQUNqQkosYUFBYVYsRUFBV1EsU0FDeEJSLEVBQVdRLFFBQVUsTUFxQmhCTyxFQUFrQixlQUV0QlYsR0FBZSxPQUVFdEosRUFBTW1KLEVBQWZNLFFBQ1J6SixFQUFFNEMsb0JBQW9CLFFBQVNxSCxHQUMvQmpLLEVBQUU0QyxvQkFBb0IsTUFBT2tILEdBQzdCOUosRUFBRTRDLG9CQUFvQixjQUFlc0gsR0FDckNsSyxFQUFFNEMsb0JBQW9CLFlBQWF1SCxHQUNuQ25LLEVBQUU0QyxvQkFBb0IsU0FBVXdILEdBQ2hDcEssRUFBRTRDLG9CQUFvQixRQUFTeUgsR0FDL0JySyxFQUFFNEMsb0JBQW9CLFVBQVcwSCxHQUNqQ3RLLEVBQUVrRCxPQUNELE1BQU91QyxHQUNOcUQsR0FBV0EsRUFBUXJELEtBaUJqQndFLEVBQVcsU0FBQ2xLLEdBWmpCNkosSUFlRW5CLEdBQVdBLEVBQVExSSxJQUdoQitKLEVBQVMsU0FBQy9KLEdBZGZnSyxJQUNBQyxJQWdCRXRCLEdBQVNBLEVBQU0zSSxJQUdabUssRUFBaUIsU0FBQ25LLEdBQ3ZCZ0ssSUFFRXBCLEdBQWlCQSxFQUFjNUksSUFHNUJvSyxFQUFlLFNBQUNwSyxHQUNyQjZKLElBRUVoQixHQUFlQSxFQUFZN0ksSUFHeEJxSyxFQUFZLFNBQUNHLEVBQVF6RSxHQUMxQmtFLElBRUVuQixHQUFZQSxFQUFTMEIsRUFBUXpFLElBRzFCdUUsRUFBVyxTQUFDNUUsR0FDakJ1RSxJQUVFbEIsR0FBV0EsRUFBUXJELElBR2hCNkUsRUFBYSxTQUFDdkssR0FDakJnSixHQUFhQSxFQUFVaEosV0FpQnpCNEQsRUFBeUI2RixhQUN6QmdCLEVBQWFDLEVBQWV0QyxHQUFZQSxFQWR4Q1YscUNBQ2EsaUJBQ1ppRCxLQUFLLHNCQUNPckMsRUFDWkMsU0FBVUEsRUFDVkMsTUFBT0MsRUFBWSxRQUFTYixNQUFPLEdBQUlDLE9BQVEsR0FBSStDLE9BQVN0QixFQUEwQixLQUFaLFdBQXFCZCxHQUMvRkMsVUFBV0EsR0FFWGYsZ0JBQUNKLEdBQWVHLFNBQVU2QixFQUFhL0IsVUFBVSxnQkFPNUMrQixHQUFlLENBQUV1QixRQTVEUCxZQTdDUSxlQUV2QnRCLEdBQWUsT0FFRXRKLEVBQU1tSixFQUFmTSxRQUNSekosRUFBRStDLGlCQUFpQixRQUFTa0gsR0FDNUJqSyxFQUFFK0MsaUJBQWlCLE1BQU8rRyxHQUMxQjlKLEVBQUUrQyxpQkFBaUIsY0FBZW1ILEdBQ2xDbEssRUFBRStDLGlCQUFpQixZQUFhb0gsR0FDaENuSyxFQUFFK0MsaUJBQWlCLFNBQVVxSCxHQUM3QnBLLEVBQUUrQyxpQkFBaUIsUUFBU3NILEdBQzVCckssRUFBRStDLGlCQUFpQixVQUFXdUgsR0FDOUJ0SyxFQUFFdUYsUUFDRCxNQUFPRSxHQUNSNEUsRUFBUzVFLElBZ0NWb0YsUUFnRUYzQyxFQUFNNEMsVUFBWSxDQUVqQnJHLFNBQVVzRyxFQUFVQyxPQUVwQjFFLEtBQU15RSxFQUFVRSxPQUVoQjdDLFFBQVMyQyxFQUFVRyxPQUVuQjdDLFVBQVcwQyxFQUFVRSxPQUVyQjNDLFNBQVV5QyxFQUFVRyxPQUVwQjNDLE1BQU93QyxFQUFVQyxPQUVqQnhDLFVBQVd1QyxFQUFVRSxPQUVyQnhDLFFBQVNzQyxFQUFVSSxLQUVuQnpDLE1BQU9xQyxFQUFVSSxLQUVqQnhDLGNBQWVvQyxFQUFVSSxLQUV6QnZDLFlBQWFtQyxFQUFVSSxLQUV2QnRDLFNBQVVrQyxFQUFVSSxLQUVwQnJDLFFBQVNpQyxFQUFVSSxLQUVuQnBDLFVBQVdnQyxFQUFVSSxNQUd0QmpELEVBQU1rRCxhQUFlLENBQ3BCM0csU0FBVSxLQUNWNkIsS0FBTSxRQUNOOEIsUUFBUyxJQUNUQyxVQUFXLFNBQ1hDLFVBQVcsRUFDWEMsTUFBTyxLQUNQQyxVQUFXLEtBQ1hDLFFBQVMsS0FDVEMsTUFBTyxLQUNQQyxjQUFlLEtBQ2ZDLFlBQWEsS0FDYkMsU0FBVSxLQUNWQyxRQUFTLEtBQ1RDLFVBQVcifQ==

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

"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=require("react"),n=e(t),r=e(require("prop-types"));function i(e,t,n,r,i,o,a){try{var c=e[o](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,i)}function o(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)}}function a(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,i,o,a){try{var c=e[o](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,i)}function v(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){p(o,r,i,a,c,"next",e)}function c(e){p(o,r,i,a,c,"throw",e)}a(void 0)}))}}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var m=function(){var e=v(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=v(regeneratorRuntime.mark((function e(n,r){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:i=e.sent,o=function e(t){i.removeEventListener("change",e),y(t.target.state,n,r)},i.addEventListener("change",o),y(i.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),y=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},b=function(){var e=v(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=v(regeneratorRuntime.mark((function e(r,i){var o,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}i(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,m(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:o=e.sent,a=h(o,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),i(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),g=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"_instance",null),c(this,"_listeners",null),c(this,"_includesEventType",(function(t){return Object.values(e.eventTypes).find((function(e){return e===t}))}));var r=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition||{};this._instance=new r,this._listeners={},Object.entries(s(s({},e.defaultOptions),t||{})).forEach((function(e){var t=l(e,2),r=t[0],i=t[1];return n._instance[r]=i}))}var t,n;return a(e,null,[{key:"isSupported",get:function(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition)},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),a(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,b("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt("return",this);case 15:case"end":return e.stop()}}),e,this,[[1,10]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function c(e){i(a,r,o,c,u,"next",e)}function u(e){i(a,r,o,c,u,"throw",e)}c(void 0)}))},function(){return n.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(t,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var o=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[].concat(o,[i]))};this._instance.addEventListener(t,(function(e){return i(e)})),this._listeners[t]=i}return this}},{key:"removeEventListener",value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:"cleanup",value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),this._instance=null,this}},{key:"instance",get:function(){return this._instance},set:function(e){throw new Error("You cannot set instance directly.")}}]),e}();c(g,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),c(g,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var w=function(e){var t=e.iconColor,r=void 0===t?"black":t,i=e.activeColor,o=void 0===i?"red":i,a=e.isActive,c=void 0!==a&&a;return n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},n.createElement("g",null,n.createElement("path",{fill:r,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),c&&n.createElement("circle",{fill:o,cx:"16",cy:"4",r:"4"})))},E=function(e){var r=e.children,i=e.grammars,o=e.lang,a=e.timeout,c=e.ariaLabel,u=e.tabIndex,f=e.style,p=e.className,v=e.onStart,h=e.onEnd,d=e.onSpeechStart,m=e.onSpeechEnd,y=e.onResult,b=e.onError,E=e.onNoMatch,S=e.__recognitionInstance,O=t.useRef(null),_=t.useRef(null),R=l(t.useState(!1),2),x=R[0],k=R[1];t.useEffect((function(){if(g.isSupported)return _.current=S||new g({grammars:i,lang:o}),function(){_.current.abort(),_.current.cleanup(),clearTimeout(O.current)}}),[S]);var L=function(){O.current=setTimeout(P,a)},j=function(){clearTimeout(O.current),O.current=null},T=function(){try{k(!1);var e=_.current;e.removeEventListener("start",A),e.removeEventListener("end",P),e.removeEventListener("speechstart",D),e.removeEventListener("speechend",N),e.removeEventListener("result",U),e.removeEventListener("error",I),e.removeEventListener("nomatch",M),e.stop()}catch(e){b&&b(e)}},A=function(e){L(),v&&v(e)},P=function(e){j(),T(),h&&h(e)},D=function(e){j(),d&&d(e)},N=function(e){L(),m&&m(e)},U=function(e,t){T(),y&&y(e,t)},I=function(e){T(),b&&b(e)},M=function(e){E&&E(e)};return g.isSupported&&t.cloneElement(t.isValidElement(r)?r:n.createElement("div",{"data-testid":"__vocal-root__",role:"button","aria-label":c,tabIndex:u,style:p?null:s({width:24,height:24,cursor:x?null:"pointer"},f),className:p},n.createElement(w,{isActive:x,iconColor:"#aaa"})),s({},!x&&{onClick:function(){!function(){try{k(!0);var e=_.current;e.addEventListener("start",A),e.addEventListener("end",P),e.addEventListener("speechstart",D),e.addEventListener("speechend",N),e.addEventListener("result",U),e.addEventListener("error",I),e.addEventListener("nomatch",M),e.start()}catch(e){I(e)}}()}}))};E.propTypes={grammars:r.object,lang:r.string,timeout:r.number,ariaLabel:r.string,tabIndex:r.number,style:r.object,className:r.string,onStart:r.func,onEnd:r.func,onSpeechStart:r.func,onSpeechEnd:r.func,onResult:r.func,onError:r.func,onNoMatch:r.func},E.defaultProps={grammars:null,lang:"en-US",timeout:3e3,ariaLabel:"speech",tabIndex:-1,style:null,className:null,onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null},module.exports=E;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmpzIiwiLi4vc3JjL01pY3JvcGhvbmVJY29uLmpzIiwiLi4vc3JjL1ZvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGUoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiByKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe2UobyxhLGksdSxjLFwibmV4dFwiLHIpfWZ1bmN0aW9uIGMocil7ZShvLGEsaSx1LGMsXCJ0aHJvd1wiLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbihlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbihlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG4pe3ZhciBhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IucGVybWlzc2lvbnMpe2UubmV4dD00O2JyZWFrfW4obmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb25zIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0xNjticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUubmV4dD03LG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTp0fSk7Y2FzZSA3OmE9ZS5zZW50LG89ZnVuY3Rpb24gZSh0KXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSxpKHQudGFyZ2V0LnN0YXRlLHIsbil9LGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLGkoYS5zdGF0ZSxyLG4pLGUubmV4dD0xNjticmVhaztjYXNlIDEzOmUucHJldj0xMyxlLnQwPWUuY2F0Y2goNCksbihlLnQwKTtjYXNlIDE2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDEzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT1mdW5jdGlvbihlLHIsdCl7c3dpdGNoKGUpe2Nhc2VcImRlbmllZFwiOnQobmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb24gZGVuaWVkXCIsXCJOT1RfQUxMT1dFRF9FUlJcIikpO2JyZWFrO2RlZmF1bHQ6cihlKX19LG89ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKG4saSl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixvKXt2YXIgdSxjLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKXtlLm5leHQ9NDticmVha31vKG5ldyBET01FeGNlcHRpb24oXCJNZWRpYURldmljZXMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS50MD1Qcm9taXNlLGUubmV4dD04LGEobik7Y2FzZSA4OnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9MTEsbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoaSk7Y2FzZSAxMTpyZXR1cm4gZS50Mj1lLnNlbnQsZS50Mz1bZS50MSxlLnQyXSxlLm5leHQ9MTUsZS50MC5hbGwuY2FsbChlLnQwLGUudDMpO2Nhc2UgMTU6dT1lLnNlbnQsYz10KHUsMikscz1jWzFdLHIocyksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6ZS5wcmV2PTIxLGUudDQ9ZS5jYXRjaCg0KSxvKGUudDQpO2Nhc2UgMjQ6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMjFdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHthIGFzIGdldFBlcm1pc3Npb24sbyBhcyBnZXRVc2VyTWVkaWFTdHJlYW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5blpYUlFaWEp0YVhOemFXOXVMbXB6SWl3aUxpNHZjM0pqTDJkbGRGVnpaWEpOWldScFlWTjBjbVZoYlM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNseHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXBJRDArSUh0Y2JseDBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MFhIUnBaaUFvSVc1aGRtbG5ZWFJ2Y2k1d1pYSnRhWE56YVc5dWN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0oxQmxjbTFwYzNOcGIyNXpJRzV2ZENCemRYQndiM0owWldRbkxDQW5UazlVWDBaUFZVNUVYMFZTVWljcEtWeHVYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkRngwWTI5dWMzUWdiMjVEYUdGdVoyVWdQU0FvWlhabGJuUXBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJjZEhKbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNobGRtVnVkQzUwWVhKblpYUXVjM1JoZEdVc0lISmxjMjlzZG1Vc0lISmxhbVZqZENsY2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVW9jR1Z5YldsemMybHZibE4wWVhSMWN5NXpkR0YwWlN3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1Z4dVhIUmNkRngwZlNCallYUmphQ0FvWlhKeWIzSXBJSHRjYmx4MFhIUmNkRngwY21WcVpXTjBLR1Z5Y205eUtWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBmU2xjYm4xY2JseHVZMjl1YzNRZ2NtVnpiMngyWlU5eVVtVnFaV04wUW1GelpXUlBibE4wWVhSbElEMGdLSE4wWVhSbExDQnlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MGMzZHBkR05vSUNoemRHRjBaU2tnZTF4dVhIUmNkR05oYzJVZ0oyUmxibWxsWkNjNlhHNWNkRngwWEhSeVpXcGxZM1FvYm1WM0lFUlBUVVY0WTJWd2RHbHZiaWduVUdWeWJXbHpjMmx2YmlCa1pXNXBaV1FuTENBblRrOVVYMEZNVEU5WFJVUmZSVkpTSnlrcFhHNWNkRngwWEhSaWNtVmhhMXh1WEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMFlYUmxLVnh1WEhSOVhHNTlYRzRpTENKcGJYQnZjblFnWjJWMFVHVnliV2x6YzJsdmJpQm1jbTl0SUNjdUwyZGxkRkJsY20xcGMzTnBiMjRuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5SUdGdVpDQjBhR1VnYzNSeVpXRnRJR2x6SUhKbGRISnBaWFpsWkZ4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQndZWEpoYlNCdFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpJQ0FnSUVOdmJuTjBjbUZwYm5SeklHOWlhbVZqZEM0Z1FITmxaU0JvZEhSd2N6b3ZMMlJsZG1Wc2IzQmxjaTV0YjNwcGJHeGhMbTl5Wnk5bGJpMVZVeTlrYjJOekwxZGxZaTlCVUVrdlRXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlN3Z2JXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjeWtnUFQ0Z2UxeHVYSFJ5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvWVhONWJtTWdLSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkR2xtSUNnaGJtRjJhV2RoZEc5eUxtMWxaR2xoUkdWMmFXTmxjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOUdUMVZPUkY5RlVsSW5LU2xjYmx4MFhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEZ4MGRISjVJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdXeXdnYzNSeVpXRnRYU0E5SUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0Z0Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCblpYUlFaWEp0YVhOemFXOXVLSEJsY20xcGMzTnBiMjVPWVcxbEtTeGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEZ4MFhTbGNibHgwWEhSY2RGeDBjbVZ6YjJ4MlpTaHpkSEpsWVcwcFhHNWNkRngwWEhSOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dVhIUmNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVJbDBzSW01aGJXVnpJanBiSW5CbGNtMXBjM05wYjI1T1lXMWxJaXdpVUhKdmJXbHpaU0lzSW5KbGMyOXNkbVVpTENKeVpXcGxZM1FpTENKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSWtSUFRVVjRZMlZ3ZEdsdmJpSXNJbkYxWlhKNUlpd2libUZ0WlNJc0luQmxjbTFwYzNOcGIyNVRkR0YwZFhNaUxDSnZia05vWVc1blpTSXNJbVYyWlc1MElpd2ljbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaUlzSW5KbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNJc0luUmhjbWRsZENJc0luTjBZWFJsSWl3aVlXUmtSWFpsYm5STWFYTjBaVzVsY2lJc0ltMWxaR2xoVTNSeVpXRnRRMjl1YzNSeVlXbHVkSE1pTENKdFpXUnBZVVJsZG1salpYTWlMQ0puWlhSUVpYSnRhWE56YVc5dUlpd2laMlYwVlhObGNrMWxaR2xoSWl3aVlXeHNJaXdpYzNSeVpXRnRJbDBzSW0xaGNIQnBibWR6SWpvaWJYZERRVXRCTEd0RVFVRmxMRmRCUVU5QkxEUkhRVU5rTEVsQlFVbERMRzlFUVVGUkxGZEJRVTlETEVWQlFWTkRMRGhHUVVNM1FrTXNWVUZCVlVNc05FSkJRMlJHTEVWQlFVOHNTVUZCU1Vjc1lVRkJZU3cwUWtGQk5rSXNhMFZCUjNKQ1JpeFZRVUZWUXl4WlFVRlpSU3hOUVVGTkxFTkJRVVZETEV0QlFVMVNMRmRCUVRkRVV5eFRRVU5CUXl4RlFVRlhMRk5CUVZoQkxFVkJRVmxETEVkQlEycENSaXhGUVVGcFFrY3NiMEpCUVc5Q0xGTkJRVlZHTEVkQlF5OURSeXhGUVVFMFFrWXNSVUZCVFVjc1QwRkJUME1zVFVGQlQySXNSVUZCVTBNc1NVRkZNVVJOTEVWQlFXbENUeXhwUWtGQmFVSXNVMEZCVlU0c1IwRkROVU5ITEVWQlFUUkNTaXhGUVVGcFFrMHNUVUZCVDJJc1JVRkJVME1zY1VSQlJUZEVRU3cyVGtGTlJWVXNSVUZCT0VJc1UwRkJRMFVzUlVGQlQySXNSVUZCVTBNc1ZVRkROVU5aTEU5QlEwWXNVMEZEU2xvc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTEc5Q1FVRnhRaXhyUTBGSE4wTktMRVZCUVZGaExHMUVRM1pDU1N4WFFVRlBaaXhGUVVGblFtbENMRFJIUVVNNVFpeEpRVUZKYUVJc2IwUkJRVkVzVjBGQlQwTXNSVUZCVTBNc1owZEJRemRDUXl4VlFVRlZZeXcyUWtGRFpHWXNSVUZCVHl4SlFVRkpSeXhoUVVGaExEWkNRVUU0UWl3NFJFRkhOVUpNTEdsQ1FVTnNRbXRDTEVWQlFXTnVRaXgxUTBGRFpFa3NWVUZCVldNc1lVRkJZVVVzWVVGQllVZ3NPRVJCUmxaSkxEaERRVUY0UWtNc1QwRkpWSEJDTEVWQlFWRnZRaXh4UkVGRlVtNUNJbjA9XG4iLCJpbXBvcnQgeyBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIge1xuXHRzdGF0aWMgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Z3JhbW1hcnM6IG51bGwsXG5cdFx0bGFuZzogJ2VuLVVTJyxcblx0XHRjb250aW51b3VzOiBmYWxzZSxcblx0XHRpbnRlcmltUmVzdWx0czogZmFsc2UsXG5cdFx0bWF4QWx0ZXJuYXRpdmVzOiAxLFxuXHRcdHNlcnZpY2VVUkk6IG51bGwsXG5cdH1cblxuXHRzdGF0aWMgZXZlbnRUeXBlcyA9IHtcblx0XHRBVURJT19FTkQ6ICdhdWRpb2VuZCcsXG5cdFx0QVVESU9fU1RBUlQ6ICdhdWRpb3N0YXJ0Jyxcblx0XHRFTkQ6ICdlbmQnLFxuXHRcdEVSUk9SOiAnZXJyb3InLFxuXHRcdE5PX01BVENIOiAnbm9tYXRjaCcsXG5cdFx0UkVTVUxUOiAncmVzdWx0Jyxcblx0XHRTT1VORF9FTkQ6ICdzb3VuZGVuZCcsXG5cdFx0U09VTkRfU1RBUlQ6ICdzb3VuZHN0YXJ0Jyxcblx0XHRTUEVFQ0hfRU5EOiAnc3BlZWNoZW5kJyxcblx0XHRTUEVFQ0hfU1RBUlQ6ICdzcGVlY2hzdGFydCcsXG5cdFx0U1RBUlQ6ICdzdGFydCcsXG5cdH1cblxuXHRzdGF0aWMgZ2V0IGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIXdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0ISF3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdCEhd2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHQhIXdpbmRvdy5tc1NwZWVjaFJlY29nbml0aW9uXG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9XG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0e31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdE9iamVjdC5lbnRyaWVzKHsgLi4uU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmRlZmF1bHRPcHRpb25zLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSkuZm9yRWFjaChcblx0XHRcdChba2V5LCB2YWx1ZV0pID0+ICh0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWUpXG5cdFx0KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZSh0eXBlKSkge1xuXHRcdFx0aWYgKCEhdGhpcy5fbGlzdGVuZXJzW3R5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmICh0eXBlID09PSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZXZlbnRUeXBlcy5SRVNVTFQpIHtcblx0XHRcdFx0XHRpZiAoISFldmVudC5yZXN1bHRzICYmIGV2ZW50LnJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0YWRkaXRpb25hbEFyZ3MucHVzaChldmVudC5yZXN1bHRzWzBdWzBdLnRyYW5zY3JpcHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ISFjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseSh0aGlzLCBbLi4uYWRkaXRpb25hbEFyZ3MsIGV2ZW50XSlcblx0XHRcdH1cblx0XHRcdHRoaXMuX2luc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgKGUpID0+IGhhbmRsZXIoZSkpXG5cblx0XHRcdHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA9IGhhbmRsZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXVxuXHRcdHRoaXMuX2luc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlcilcblxuXHRcdGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbdHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlID0gKGV2ZW50VHlwZSkgPT5cblx0XHRPYmplY3QudmFsdWVzKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzKS5maW5kKCh0eXBlKSA9PiB0eXBlID09PSBldmVudFR5cGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBNaWNyb3Bob25lSWNvbiA9ICh7IGljb25Db2xvciA9ICdibGFjaycsIGFjdGl2ZUNvbG9yID0gJ3JlZCcsIGlzQWN0aXZlID0gZmFsc2UgfSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG5cdFx0XHQ8Zz5cblx0XHRcdFx0PHBhdGhcblx0XHRcdFx0XHRmaWxsPXtpY29uQ29sb3J9XG5cdFx0XHRcdFx0ZD1cIk0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6XCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0e2lzQWN0aXZlICYmIDxjaXJjbGUgZmlsbD17YWN0aXZlQ29sb3J9IGN4PVwiMTZcIiBjeT1cIjRcIiByPVwiNFwiIC8+fVxuXHRcdFx0PC9nPlxuXHRcdDwvc3ZnPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1pY3JvcGhvbmVJY29uXG4iLCJpbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBNaWNyb3Bob25lSWNvbiBmcm9tICcuL01pY3JvcGhvbmVJY29uJ1xuXG5jb25zdCBWb2NhbCA9ICh7XG5cdGNoaWxkcmVuLFxuXHRncmFtbWFycyxcblx0bGFuZyxcblx0dGltZW91dCxcblx0YXJpYUxhYmVsLFxuXHR0YWJJbmRleCxcblx0c3R5bGUsXG5cdGNsYXNzTmFtZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JlY29nbml0aW9uSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbClcblx0Y29uc3QgcmVjb2duaXRpb25SZWYgPSB1c2VSZWYobnVsbClcblxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVjb2duaXRpb25SZWYuY3VycmVudCA9IF9fcmVjb2duaXRpb25JbnN0YW5jZSB8fCBuZXcgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyKHsgZ3JhbW1hcnMsIGxhbmcgfSlcblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdHJlY29nbml0aW9uUmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdFx0XHRyZWNvZ25pdGlvblJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW19fcmVjb2duaXRpb25JbnN0YW5jZV0pXG5cblx0Y29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHtcblx0XHR0aW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblx0fVxuXG5cdGNvbnN0IHN0b3BUaW1lciA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdHRpbWVvdXRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdGNvbnN0IHN0YXJ0UmVjb2duaXRpb24gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHNldElzTGlzdGVuaW5nKHRydWUpXG5cblx0XHRcdGNvbnN0IHsgY3VycmVudDogciB9ID0gcmVjb2duaXRpb25SZWZcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBfb25TdGFydClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgX29uRW5kKVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hzdGFydCcsIF9vblNwZWVjaFN0YXJ0KVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hlbmQnLCBfb25TcGVlY2hFbmQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIF9vblJlc3VsdClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBfb25FcnJvcilcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignbm9tYXRjaCcsIF9vbk5vTWF0Y2gpXG5cdFx0XHRyLnN0YXJ0KClcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0X29uRXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RvcFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyhmYWxzZSlcblxuXHRcdFx0Y29uc3QgeyBjdXJyZW50OiByIH0gPSByZWNvZ25pdGlvblJlZlxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmQnLCBfb25FbmQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdub21hdGNoJywgX29uTm9NYXRjaClcblx0XHRcdHIuc3RvcCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXHR9XG5cblx0Y29uc3QgZW5kID0gKCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkNsaWNrID0gKCkgPT4ge1xuXHRcdHN0YXJ0UmVjb2duaXRpb24oKVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0KClcblxuXHRcdCEhb25TdGFydCAmJiBvblN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25FbmQgPSAoZSkgPT4ge1xuXHRcdGVuZCgpXG5cblx0XHQhIW9uRW5kICYmIG9uRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hTdGFydCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hTdGFydCAmJiBvblNwZWVjaFN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hFbmQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaEVuZCAmJiBvblNwZWVjaEVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uUmVzdWx0ID0gKHJlc3VsdCwgZXZlbnQpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvblJlc3VsdCAmJiBvblJlc3VsdChyZXN1bHQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgX29uRXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbkVycm9yICYmIG9uRXJyb3IoZXJyb3IpXG5cdH1cblxuXHRjb25zdCBfb25Ob01hdGNoID0gKGUpID0+IHtcblx0XHQhIW9uTm9NYXRjaCAmJiBvbk5vTWF0Y2goZSlcblx0fVxuXG5cdGNvbnN0IF9yZW5kZXJEZWZhdWx0ID0gKCkgPT4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPVwiX192b2NhbC1yb290X19cIlxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHR0YWJJbmRleD17dGFiSW5kZXh9XG5cdFx0XHRzdHlsZT17Y2xhc3NOYW1lID8gbnVsbCA6IHsgd2lkdGg6IDI0LCBoZWlnaHQ6IDI0LCBjdXJzb3I6ICFpc0xpc3RlbmluZyA/ICdwb2ludGVyJyA6IG51bGwsIC4uLnN0eWxlIH19XG5cdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHQ+XG5cdFx0XHQ8TWljcm9waG9uZUljb24gaXNBY3RpdmU9e2lzTGlzdGVuaW5nfSBpY29uQ29sb3I9XCIjYWFhXCIgLz5cblx0XHQ8L2Rpdj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0U3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmlzU3VwcG9ydGVkICYmXG5cdFx0Y2xvbmVFbGVtZW50KGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogX3JlbmRlckRlZmF1bHQoKSwge1xuXHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdH0pXG5cdClcbn1cblxuVm9jYWwucHJvcFR5cGVzID0ge1xuXHQvKiogRGVmaW5lcyB0aGUgZ3JhbW1hcnMgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9ncmFtbWFycykgKi9cblx0Z3JhbW1hcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSBsYW5ndWFnZSB1bmRlcnN0b29kIGJ5IHRoZSByZWNvZ25pdGlvbiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL2xhbmcpICovXG5cdGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIGRpc2NhcmRpbmcgdGhlIHJlY29nbml0aW9uICovXG5cdHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBhMTF5IGxhYmVsIGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0YXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSB0YWIgaW5kZXggZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbiAqL1xuXHR0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBzdGFydHMgKi9cblx0b25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBlbmRzICovXG5cdG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBzdGFydHMgKi9cblx0b25TcGVlY2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggZW5kcyAqL1xuXHRvblNwZWVjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcmVzdWx0IGlzIHJldHVybmVkIGZyb20gdGUgcmVjb2duaXRpb24gKi9cblx0b25SZXN1bHQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi9cblx0b25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIG5vIHJlc3VsdCBjYW4gYmUgcmVjb2duaXplZCAqL1xuXHRvbk5vTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxufVxuXG5Wb2NhbC5kZWZhdWx0UHJvcHMgPSB7XG5cdGdyYW1tYXJzOiBudWxsLFxuXHRsYW5nOiAnZW4tVVMnLFxuXHR0aW1lb3V0OiAzMDAwLFxuXHRhcmlhTGFiZWw6ICdzcGVlY2gnLFxuXHR0YWJJbmRleDogLTEsXG5cdHN0eWxlOiBudWxsLFxuXHRjbGFzc05hbWU6IG51bGwsXG5cdG9uU3RhcnQ6IG51bGwsXG5cdG9uRW5kOiBudWxsLFxuXHRvblNwZWVjaFN0YXJ0OiBudWxsLFxuXHRvblNwZWVjaEVuZDogbnVsbCxcblx0b25SZXN1bHQ6IG51bGwsXG5cdG9uRXJyb3I6IG51bGwsXG5cdG9uTm9NYXRjaDogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsImV2ZW50VHlwZSIsInZhbHVlcyIsImV2ZW50VHlwZXMiLCJmaW5kIiwidHlwZSIsIlNwZWVjaFJlY29nbml0aW9uIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJfaW5zdGFuY2UiLCJfbGlzdGVuZXJzIiwiZW50cmllcyIsImRlZmF1bHRPcHRpb25zIiwiZm9yRWFjaCIsImtleSIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiUkVTVUxUIiwicmVzdWx0cyIsInRyYW5zY3JpcHQiLCJfdGhpczIiLCJrZXlzIiwiX3RoaXMzIiwiZ3JhbW1hcnMiLCJsYW5nIiwiY29udGludW91cyIsImludGVyaW1SZXN1bHRzIiwibWF4QWx0ZXJuYXRpdmVzIiwic2VydmljZVVSSSIsIkFVRElPX0VORCIsIkFVRElPX1NUQVJUIiwiRU5EIiwiRVJST1IiLCJOT19NQVRDSCIsIlNPVU5EX0VORCIsIlNPVU5EX1NUQVJUIiwiU1BFRUNIX0VORCIsIlNQRUVDSF9TVEFSVCIsIlNUQVJUIiwiTWljcm9waG9uZUljb24iLCJpY29uQ29sb3IiLCJhY3RpdmVDb2xvciIsImlzQWN0aXZlIiwiUmVhY3QiLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJkIiwiY3giLCJjeSIsIlZvY2FsIiwiY2hpbGRyZW4iLCJ0aW1lb3V0IiwiYXJpYUxhYmVsIiwidGFiSW5kZXgiLCJzdHlsZSIsImNsYXNzTmFtZSIsIm9uU3RhcnQiLCJvbkVuZCIsIm9uU3BlZWNoU3RhcnQiLCJvblNwZWVjaEVuZCIsIm9uUmVzdWx0Iiwib25FcnJvciIsIm9uTm9NYXRjaCIsIl9fcmVjb2duaXRpb25JbnN0YW5jZSIsInRpbWVvdXRSZWYiLCJ1c2VSZWYiLCJyZWNvZ25pdGlvblJlZiIsInVzZVN0YXRlIiwiaXNMaXN0ZW5pbmciLCJzZXRJc0xpc3RlbmluZyIsInVzZUVmZmVjdCIsImlzU3VwcG9ydGVkIiwiY3VycmVudCIsImNsZWFudXAiLCJjbGVhclRpbWVvdXQiLCJzdGFydFRpbWVyIiwic2V0VGltZW91dCIsIl9vbkVuZCIsInN0b3BUaW1lciIsInN0b3BSZWNvZ25pdGlvbiIsIl9vblN0YXJ0IiwiX29uU3BlZWNoU3RhcnQiLCJfb25TcGVlY2hFbmQiLCJfb25SZXN1bHQiLCJfb25FcnJvciIsIl9vbk5vTWF0Y2giLCJyZXN1bHQiLCJjbG9uZUVsZW1lbnQiLCJpc1ZhbGlkRWxlbWVudCIsInJvbGUiLCJjdXJzb3IiLCJvbkNsaWNrIiwic3RhcnRSZWNvZ25pdGlvbiIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsInN0cmluZyIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiXSwibWFwcGluZ3MiOiJrbUVBQUEsU0FBU0EsRUFBRUEsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsR0FBRyxJQUFJLElBQUlDLEVBQUVQLEVBQUVLLEdBQUdDLEdBQUdFLEVBQUVELEVBQUVFLE1BQU0sTUFBTVQsR0FBRyxZQUFZRSxFQUFFRixHQUFHTyxFQUFFRyxLQUFLVCxFQUFFTyxHQUFHRyxRQUFRQyxRQUFRSixHQUFHSyxLQUFLVixFQUFFQyxHQUFHLFNBQVNILEVBQUVBLEdBQUcsT0FBTyxXQUFXLElBQUlDLEVBQUVZLEtBQUtYLEVBQUVZLFVBQVUsT0FBTyxJQUFJSixrQkFBa0JQLEVBQUVDLEdBQUcsSUFBSUMsRUFBRUwsRUFBRWUsTUFBTWQsRUFBRUMsR0FBRyxTQUFTSSxFQUFFTixHQUFHRCxFQUFFTSxFQUFFRixFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLE9BQU9QLEdBQUcsU0FBU08sRUFBRVAsR0FBR0QsRUFBRU0sRUFBRUYsRUFBRUMsRUFBRUUsRUFBRUMsRUFBRSxRQUFRUCxHQUFHTSxPQUFFLE9BQVksU0FBU0wsRUFBRUYsRUFBRUMsR0FBRyxPQUFPLFNBQVNELEdBQUcsR0FBR2lCLE1BQU1DLFFBQVFsQixHQUFHLE9BQU9BLEVBQXZDLENBQTBDQSxJQUFJLFNBQVNBLEVBQUVDLEdBQUcsR0FBRyxvQkFBb0JrQixRQUFVQSxPQUFPQyxZQUFZQyxPQUFPckIsR0FBM0QsQ0FBc0UsSUFBSUUsRUFBRSxHQUFHQyxHQUFFLEVBQUdDLEdBQUUsRUFBR0MsT0FBRSxFQUFPLElBQUksSUFBSSxJQUFJQyxFQUFFQyxFQUFFUCxFQUFFbUIsT0FBT0MsY0FBY2pCLEdBQUdHLEVBQUVDLEVBQUVlLFFBQVFaLFFBQVFSLEVBQUVxQixLQUFLakIsRUFBRUcsUUFBUVIsR0FBR0MsRUFBRXNCLFNBQVN2QixHQUFHRSxHQUFFLElBQUssTUFBTUgsR0FBR0ksR0FBRSxFQUFHQyxFQUFFTCxFQUFFLFFBQVEsSUFBSUcsR0FBRyxNQUFNSSxFQUFFa0IsUUFBUWxCLEVBQUVrQixTQUFTLFFBQVEsR0FBR3JCLEVBQUUsTUFBTUMsR0FBRyxPQUFPSCxHQUFoVCxDQUFtVEYsRUFBRUMsSUFBSSxTQUFTRCxFQUFFQyxHQUFHLEdBQUlELEVBQUosQ0FBYSxHQUFHLGlCQUFpQkEsRUFBRSxPQUFPRyxFQUFFSCxFQUFFQyxHQUFHLElBQUlDLEVBQUVtQixPQUFPSyxVQUFVQyxTQUFTQyxLQUFLNUIsR0FBRzZCLE1BQU0sR0FBRyxHQUF1RCxNQUFwRCxXQUFXM0IsR0FBR0YsRUFBRThCLGNBQWM1QixFQUFFRixFQUFFOEIsWUFBWUMsTUFBUyxRQUFRN0IsR0FBRyxRQUFRQSxFQUFTZSxNQUFNZSxLQUFLaEMsR0FBTSxjQUFjRSxHQUFHLDJDQUEyQytCLEtBQUsvQixHQUFVQyxFQUFFSCxFQUFFQyxRQUFsRixHQUFwTixDQUEwU0QsRUFBRUMsSUFBSSxXQUFXLE1BQU0sSUFBSWlDLFVBQVUsNklBQS9CLEdBQStLLFNBQVMvQixFQUFFSCxFQUFFQyxJQUFJLE1BQU1BLEdBQUdBLEVBQUVELEVBQUV3QixVQUFVdkIsRUFBRUQsRUFBRXdCLFFBQVEsSUFBSSxJQUFJdEIsRUFBRSxFQUFFQyxFQUFFLElBQUljLE1BQU1oQixHQUFHQyxFQUFFRCxFQUFFQyxJQUFJQyxFQUFFRCxHQUFHRixFQUFFRSxHQUFHLE9BQU9DLEVBQUUsSUFBSUMsRUFBRSxXQUFXLElBQUlKLEVBQUVDLEVBQUVrQyxtQkFBbUJDLGVBQWVwQyxFQUFFRSxHQUFHLE9BQU9pQyxtQkFBbUJFLGVBQWVyQyxHQUFHLE9BQU8sT0FBT0EsRUFBRXNDLEtBQUt0QyxFQUFFc0IsTUFBTSxLQUFLLEVBQUUsT0FBT3RCLEVBQUV1QyxPQUFPLFNBQVMsSUFBSTVCLFFBQVEsV0FBVyxJQUFJWCxFQUFFQyxFQUFFa0MsbUJBQW1CQyxlQUFlcEMsRUFBRUMsRUFBRUUsR0FBRyxJQUFJQyxFQUFFRSxFQUFFLE9BQU82QixtQkFBbUJFLGVBQWVyQyxHQUFHLE9BQU8sT0FBT0EsRUFBRXNDLEtBQUt0QyxFQUFFc0IsTUFBTSxLQUFLLEVBQUUsR0FBR2tCLFVBQVVDLFlBQVksQ0FBQ3pDLEVBQUVzQixLQUFLLEVBQUUsTUFBTW5CLEVBQUUsSUFBSXVDLGFBQWEsNEJBQTRCLGtCQUFrQjFDLEVBQUVzQixLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUUsT0FBT3RCLEVBQUVzQyxLQUFLLEVBQUV0QyxFQUFFc0IsS0FBSyxFQUFFa0IsVUFBVUMsWUFBWUUsTUFBTSxDQUFDWixLQUFLN0IsSUFBSSxLQUFLLEVBQUVFLEVBQUVKLEVBQUU0QyxLQUFLdEMsRUFBRSxTQUFTTixFQUFFRSxHQUFHRSxFQUFFeUMsb0JBQW9CLFNBQVM3QyxHQUFHSyxFQUFFSCxFQUFFNEMsT0FBT0MsTUFBTTlDLEVBQUVFLElBQUlDLEVBQUU0QyxpQkFBaUIsU0FBUzFDLEdBQUdELEVBQUVELEVBQUUyQyxNQUFNOUMsRUFBRUUsR0FBR0gsRUFBRXNCLEtBQUssR0FBRyxNQUFNLEtBQUssR0FBR3RCLEVBQUVzQyxLQUFLLEdBQUd0QyxFQUFFaUQsR0FBR2pELEVBQUVrRCxNQUFNLEdBQUcvQyxFQUFFSCxFQUFFaUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLE9BQU9qRCxFQUFFbUQsVUFBVW5ELEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLE9BQU8sU0FBU0MsRUFBRUMsR0FBRyxPQUFPRixFQUFFZ0IsTUFBTUYsS0FBS0MsWUFBeG5CLEtBQXlvQixLQUFLLEVBQUUsSUFBSSxNQUFNLE9BQU9mLEVBQUVtRCxVQUFVbkQsT0FBTyxPQUFPLFNBQVNDLEdBQUcsT0FBT0QsRUFBRWdCLE1BQU1GLEtBQUtDLFlBQTE0QixHQUF5NUJWLEVBQUUsU0FBU0wsRUFBRUMsRUFBRUMsR0FBRyxPQUFPRixHQUFHLElBQUksU0FBU0UsRUFBRSxJQUFJd0MsYUFBYSxvQkFBb0Isb0JBQW9CLE1BQU0sUUFBUXpDLEVBQUVELEtBQUtNLEVBQUUsV0FBVyxJQUFJTixFQUFFQyxFQUFFa0MsbUJBQW1CQyxlQUFlcEMsRUFBRUcsRUFBRUUsR0FBRyxPQUFPOEIsbUJBQW1CRSxlQUFlckMsR0FBRyxPQUFPLE9BQU9BLEVBQUVzQyxLQUFLdEMsRUFBRXNCLE1BQU0sS0FBSyxFQUFFLE9BQU90QixFQUFFdUMsT0FBTyxTQUFTLElBQUk1QixRQUFRLFdBQVcsSUFBSVgsRUFBRUMsRUFBRWtDLG1CQUFtQkMsZUFBZXBDLEVBQUVDLEVBQUVLLEdBQUcsSUFBSUMsRUFBRUMsRUFBRTRDLEVBQUUsT0FBT2pCLG1CQUFtQkUsZUFBZXJDLEdBQUcsT0FBTyxPQUFPQSxFQUFFc0MsS0FBS3RDLEVBQUVzQixNQUFNLEtBQUssRUFBRSxHQUFHa0IsVUFBVWEsYUFBYSxDQUFDckQsRUFBRXNCLEtBQUssRUFBRSxNQUFNaEIsRUFBRSxJQUFJb0MsYUFBYSw2QkFBNkIsa0JBQWtCMUMsRUFBRXNCLEtBQUssR0FBRyxNQUFNLEtBQUssRUFBRSxPQUFPdEIsRUFBRXNDLEtBQUssRUFBRXRDLEVBQUVpRCxHQUFHdEMsUUFBUVgsRUFBRXNCLEtBQUssRUFBRWxCLEVBQUVELEdBQUcsS0FBSyxFQUFFLE9BQU9ILEVBQUVzRCxHQUFHdEQsRUFBRTRDLEtBQUs1QyxFQUFFc0IsS0FBSyxHQUFHa0IsVUFBVWEsYUFBYUUsYUFBYWxELEdBQUcsS0FBSyxHQUFHLE9BQU9MLEVBQUV3RCxHQUFHeEQsRUFBRTRDLEtBQUs1QyxFQUFFeUQsR0FBRyxDQUFDekQsRUFBRXNELEdBQUd0RCxFQUFFd0QsSUFBSXhELEVBQUVzQixLQUFLLEdBQUd0QixFQUFFaUQsR0FBR1MsSUFBSTlCLEtBQUs1QixFQUFFaUQsR0FBR2pELEVBQUV5RCxJQUFJLEtBQUssR0FBR2xELEVBQUVQLEVBQUU0QyxLQUFLcEMsRUFBRU4sRUFBRUssRUFBRSxHQUFHNkMsRUFBRTVDLEVBQUUsR0FBR1AsRUFBRW1ELEdBQUdwRCxFQUFFc0IsS0FBSyxHQUFHLE1BQU0sS0FBSyxHQUFHdEIsRUFBRXNDLEtBQUssR0FBR3RDLEVBQUUyRCxHQUFHM0QsRUFBRWtELE1BQU0sR0FBRzVDLEVBQUVOLEVBQUUyRCxJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sT0FBTzNELEVBQUVtRCxVQUFVbkQsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsT0FBTyxTQUFTQyxFQUFFQyxHQUFHLE9BQU9GLEVBQUVnQixNQUFNRixLQUFLQyxZQUFqcUIsS0FBa3JCLEtBQUssRUFBRSxJQUFJLE1BQU0sT0FBT2YsRUFBRW1ELFVBQVVuRCxPQUFPLE9BQU8sU0FBU0MsRUFBRUMsR0FBRyxPQUFPRixFQUFFZ0IsTUFBTUYsS0FBS0MsWUFBdjdCLEdDRXZ4RTZDLHdCQXdDT0MsdUlBSEEsMEJBQ0MsbUNBc0dRLFNBQUNDLFVBQ3JCekMsT0FBTzBDLE9BQU9ILEVBQXlCSSxZQUFZQyxNQUFLLFNBQUNDLFVBQVNBLElBQVNKLFlBcEdyRUssRUFDTEMsT0FBT0QsbUJBQ1BDLE9BQU9DLHlCQUNQRCxPQUFPRSxzQkFDUEYsT0FBT0cscUJBQ1AsUUFDSUMsVUFBWSxJQUFJTCxPQUNoQk0sV0FBYSxHQUVsQnBELE9BQU9xRCxlQUFhZCxFQUF5QmUsZ0JBQW9CZCxHQUFXLEtBQU9lLFNBQ2xGLHlCQUFFQyxPQUFLcEUsY0FBWXFFLEVBQUtOLFVBQVVLLEdBQU9wRSx5RUF6QnZDMkQsT0FBT0QsbUJBQ1BDLE9BQU9DLHlCQUNQRCxPQUFPRSxzQkFDUEYsT0FBT0csbUNBSVlRLFNBQ2hCLElBQUlDLE1BQU0sdU1BOEJWbEUsS0FBSzBELG9EQUVZUyxFQUFtQixhQUFjLENBQUVDLE9BQU8sMkNBRXhELElBQUlGLE1BQU0sK0RBRVpSLFVBQVVXLDJEQUVUQyxFQUFldEUsS0FBSzJELFdBQVdZLFFBRXBDRCx5Q0FLSXRFLGdVQUlEQSxLQUFLMEQsZ0JBQ0xBLFVBQVVyQixPQUdUckMsNENBSURBLEtBQUswRCxnQkFDTEEsVUFBVWMsUUFHVHhFLDhDQUdTb0QsRUFBTXFCLGlCQUNoQnpFLEtBQUswRCxXQUFhMUQsS0FBSzBFLG1CQUFtQnRCLEdBQU8sQ0FDaERwRCxLQUFLMkQsV0FBV1AsU0FDaEJyQixvQkFBb0JxQixPQUdwQnVCLEVBQVUsU0FBQ0MsT0FDWkMsRUFBaUIsR0FDakJ6QixJQUFTTixFQUF5QkksV0FBVzRCLFFBQzFDRixFQUFNRyxTQUFXSCxFQUFNRyxRQUFRckUsT0FBUyxHQUM3Q21FLEVBQWVwRSxLQUFLbUUsRUFBTUcsUUFBUSxHQUFHLEdBQUdDLFlBSXhDUCxHQUFZQSxFQUFTdkUsTUFBTStFLFlBQVVKLEdBQWdCRCxXQUVuRGxCLFVBQVV4QixpQkFBaUJrQixHQUFNLFNBQUNsRSxVQUFNeUYsRUFBUXpGLFdBRWhEeUUsV0FBV1AsR0FBUXVCLFNBR2xCM0UsaURBR1lvRCxPQUNidUIsRUFBVTNFLEtBQUsyRCxXQUFXUCxlQUMzQk0sVUFBVTNCLG9CQUFvQnFCLEVBQU11QixVQUVsQzNFLEtBQUsyRCxXQUFXUCxHQUVoQnBELDhEQUlGcUMsT0FFTDlCLE9BQU8yRSxLQUFLbEYsS0FBSzJELFlBQVlHLFNBQVEsU0FBQ0MsVUFBUW9CLEVBQUtwRCxvQkFBb0JnQyxXQUNsRUwsVUFBWSxLQUVWMUQsNkNBakZBQSxLQUFLMEQsd0JBR0FPLFNBQ04sSUFBSUMsTUFBTSxnREE1RFpwQixtQkFDbUIsQ0FDdkJzQyxTQUFVLEtBQ1ZDLEtBQU0sUUFDTkMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGdCQUFpQixFQUNqQkMsV0FBWSxTQVBSM0MsZUFVZSxDQUNuQjRDLFVBQVcsV0FDWEMsWUFBYSxhQUNiQyxJQUFLLE1BQ0xDLE1BQU8sUUFDUEMsU0FBVSxVQUNWaEIsT0FBUSxTQUNSaUIsVUFBVyxXQUNYQyxZQUFhLGFBQ2JDLFdBQVksWUFDWkMsYUFBYyxjQUNkQyxNQUFPLFVDckJULElBQU1DLEVBQWlCLG9CQUFHQyxVQUFBQSxhQUFZLGNBQVNDLFlBQUFBLGFBQWMsWUFBT0MsU0FBQUEsdUJBRWxFQyx1QkFBS0MsTUFBTSw2QkFBNkJDLE1BQU0sT0FBT0MsT0FBTyxPQUFPQyxRQUFRLGFBQzFFSix5QkFDQ0Esd0JBQ0NLLEtBQU1SLEVBQ05TLEVBQUUsb01BRUZQLEdBQVlDLDBCQUFRSyxLQUFNUCxFQUFhUyxHQUFHLEtBQUtDLEdBQUcsSUFBSTdILEVBQUUsU0NIdkQ4SCxFQUFRLGdCQUNiQyxJQUFBQSxTQUNBOUIsSUFBQUEsU0FDQUMsSUFBQUEsS0FDQThCLElBQUFBLFFBQ0FDLElBQUFBLFVBQ0FDLElBQUFBLFNBQ0FDLElBQUFBLE1BQ0FDLElBQUFBLFVBQ0FDLElBQUFBLFFBQ0FDLElBQUFBLE1BQ0FDLElBQUFBLGNBQ0FDLElBQUFBLFlBQ0FDLElBQUFBLFNBQ0FDLElBQUFBLFFBQ0FDLElBQUFBLFVBQ0FDLElBQUFBLHNCQUVNQyxFQUFhQyxTQUFPLE1BQ3BCQyxFQUFpQkQsU0FBTyxVQUVRRSxZQUFTLE1BQXhDQyxPQUFhQyxPQUVwQkMsYUFBVSxjQUNMeEYsRUFBeUJ5RixtQkFDNUJMLEVBQWVNLFFBQVVULEdBQXlCLElBQUlqRixFQUF5QixDQUFFc0MsU0FBQUEsRUFBVUMsS0FBQUEsSUFDcEYsV0FDTjZDLEVBQWVNLFFBQVFoRSxRQUN2QjBELEVBQWVNLFFBQVFDLFVBQ3ZCQyxhQUFhVixFQUFXUSxZQUd4QixDQUFDVCxRQUVFWSxFQUFhLFdBQ2xCWCxFQUFXUSxRQUFVSSxXQUFXQyxFQUFRMUIsSUFHbkMyQixFQUFZLFdBQ2pCSixhQUFhVixFQUFXUSxTQUN4QlIsRUFBV1EsUUFBVSxNQXFCaEJPLEVBQWtCLGVBRXRCVixHQUFlLE9BRUVsSixFQUFNK0ksRUFBZk0sUUFDUnJKLEVBQUU0QyxvQkFBb0IsUUFBU2lILEdBQy9CN0osRUFBRTRDLG9CQUFvQixNQUFPOEcsR0FDN0IxSixFQUFFNEMsb0JBQW9CLGNBQWVrSCxHQUNyQzlKLEVBQUU0QyxvQkFBb0IsWUFBYW1ILEdBQ25DL0osRUFBRTRDLG9CQUFvQixTQUFVb0gsR0FDaENoSyxFQUFFNEMsb0JBQW9CLFFBQVNxSCxHQUMvQmpLLEVBQUU0QyxvQkFBb0IsVUFBV3NILEdBQ2pDbEssRUFBRWtELE9BQ0QsTUFBT2tDLEdBQ05zRCxHQUFXQSxFQUFRdEQsS0FpQmpCeUUsRUFBVyxTQUFDOUosR0FaakJ5SixJQWVFbkIsR0FBV0EsRUFBUXRJLElBR2hCMkosRUFBUyxTQUFDM0osR0FkZjRKLElBQ0FDLElBZ0JFdEIsR0FBU0EsRUFBTXZJLElBR1orSixFQUFpQixTQUFDL0osR0FDdkI0SixJQUVFcEIsR0FBaUJBLEVBQWN4SSxJQUc1QmdLLEVBQWUsU0FBQ2hLLEdBQ3JCeUosSUFFRWhCLEdBQWVBLEVBQVl6SSxJQUd4QmlLLEVBQVksU0FBQ0csRUFBUTFFLEdBQzFCbUUsSUFFRW5CLEdBQVlBLEVBQVMwQixFQUFRMUUsSUFHMUJ3RSxFQUFXLFNBQUM3RSxHQUNqQndFLElBRUVsQixHQUFXQSxFQUFRdEQsSUFHaEI4RSxFQUFhLFNBQUNuSyxHQUNqQjRJLEdBQWFBLEVBQVU1SSxXQWlCekI0RCxFQUF5QnlGLGFBQ3pCZ0IsZUFBYUMsaUJBQWV0QyxHQUFZQSxFQWR4Q1YscUNBQ2EsaUJBQ1ppRCxLQUFLLHNCQUNPckMsRUFDWkMsU0FBVUEsRUFDVkMsTUFBT0MsRUFBWSxRQUFTYixNQUFPLEdBQUlDLE9BQVEsR0FBSStDLE9BQVN0QixFQUEwQixLQUFaLFdBQXFCZCxHQUMvRkMsVUFBV0EsR0FFWGYsZ0JBQUNKLEdBQWVHLFNBQVU2QixFQUFhL0IsVUFBVSxnQkFPNUMrQixHQUFlLENBQUV1QixRQTVEUCxZQTdDUSxlQUV2QnRCLEdBQWUsT0FFRWxKLEVBQU0rSSxFQUFmTSxRQUNSckosRUFBRStDLGlCQUFpQixRQUFTOEcsR0FDNUI3SixFQUFFK0MsaUJBQWlCLE1BQU8yRyxHQUMxQjFKLEVBQUUrQyxpQkFBaUIsY0FBZStHLEdBQ2xDOUosRUFBRStDLGlCQUFpQixZQUFhZ0gsR0FDaEMvSixFQUFFK0MsaUJBQWlCLFNBQVVpSCxHQUM3QmhLLEVBQUUrQyxpQkFBaUIsUUFBU2tILEdBQzVCakssRUFBRStDLGlCQUFpQixVQUFXbUgsR0FDOUJsSyxFQUFFa0YsUUFDRCxNQUFPRSxHQUNSNkUsRUFBUzdFLElBZ0NWcUYsUUFnRUYzQyxFQUFNNEMsVUFBWSxDQUVqQnpFLFNBQVUwRSxFQUFVQyxPQUVwQjFFLEtBQU15RSxFQUFVRSxPQUVoQjdDLFFBQVMyQyxFQUFVRyxPQUVuQjdDLFVBQVcwQyxFQUFVRSxPQUVyQjNDLFNBQVV5QyxFQUFVRyxPQUVwQjNDLE1BQU93QyxFQUFVQyxPQUVqQnhDLFVBQVd1QyxFQUFVRSxPQUVyQnhDLFFBQVNzQyxFQUFVSSxLQUVuQnpDLE1BQU9xQyxFQUFVSSxLQUVqQnhDLGNBQWVvQyxFQUFVSSxLQUV6QnZDLFlBQWFtQyxFQUFVSSxLQUV2QnRDLFNBQVVrQyxFQUFVSSxLQUVwQnJDLFFBQVNpQyxFQUFVSSxLQUVuQnBDLFVBQVdnQyxFQUFVSSxNQUd0QmpELEVBQU1rRCxhQUFlLENBQ3BCL0UsU0FBVSxLQUNWQyxLQUFNLFFBQ044QixRQUFTLElBQ1RDLFVBQVcsU0FDWEMsVUFBVyxFQUNYQyxNQUFPLEtBQ1BDLFVBQVcsS0FDWEMsUUFBUyxLQUNUQyxNQUFPLEtBQ1BDLGNBQWUsS0FDZkMsWUFBYSxLQUNiQyxTQUFVLEtBQ1ZDLFFBQVMsS0FDVEMsVUFBVyJ9
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=require("react"),n=e(t),r=e(require("prop-types"));function i(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function o(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)}}function a(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return f(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function v(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){p(o,r,i,a,c,"next",e)}function c(e){p(o,r,i,a,c,"throw",e)}a(void 0)}))}}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var m=function(){var e=v(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=v(regeneratorRuntime.mark((function e(n,r){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:i=e.sent,o=function e(t){i.removeEventListener("change",e),y(t.target.state,n,r)},i.addEventListener("change",o),y(i.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),y=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},b=function(){var e=v(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=v(regeneratorRuntime.mark((function e(r,i){var o,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}i(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,m(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:o=e.sent,a=h(o,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),i(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),w=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),c(this,"_instance",null),c(this,"_listeners",null),c(this,"_includesEventType",(function(t){return Object.values(e.eventTypes).find((function(e){return e===t}))}));var r=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition||{};if(this._instance=new r,this._listeners={},t&&!t.grammars){var i=window.SpeechGrammarList||window.webkitSpeechGrammarList||window.mozSpeechGrammarList||window.msSpeechGrammarList||{};this._instance.grammars=new i}Object.entries(u(u({},e.defaultOptions),t||{})).forEach((function(e){var t=l(e,2),r=t[0],i=t[1];return n._instance[r]=i}))}var t,n;return a(e,null,[{key:"isSupported",get:function(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition)},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),a(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,b("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt("return",this);case 15:case"end":return e.stop()}}),e,this,[[1,10]])})),n=function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function c(e){i(a,r,o,c,s,"next",e)}function s(e){i(a,r,o,c,s,"throw",e)}c(void 0)}))},function(){return n.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(t,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var o=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[].concat(o,[i]))};this._instance.addEventListener(t,(function(e){return i(e)})),this._listeners[t]=i}return this}},{key:"removeEventListener",value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:"cleanup",value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),this._instance=null,this}},{key:"instance",get:function(){return this._instance},set:function(e){throw new Error("You cannot set instance directly.")}}]),e}();c(w,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),c(w,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var g=function(e){var t=e.iconColor,r=void 0===t?"black":t,i=e.activeColor,o=void 0===i?"red":i,a=e.isActive,c=void 0!==a&&a;return n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},n.createElement("g",null,n.createElement("path",{fill:r,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),c&&n.createElement("circle",{fill:o,cx:"16",cy:"4",r:"4"})))},E=function(e){var r=e.children,i=e.grammars,o=e.lang,a=e.timeout,c=e.ariaLabel,s=e.tabIndex,f=e.style,p=e.className,v=e.onStart,h=e.onEnd,d=e.onSpeechStart,m=e.onSpeechEnd,y=e.onResult,b=e.onError,E=e.onNoMatch,S=e.__recognitionInstance,O=t.useRef(null),_=t.useRef(null),R=l(t.useState(!1),2),x=R[0],L=R[1];t.useEffect((function(){if(w.isSupported)return _.current=S||new w({grammars:i,lang:o}),function(){_.current.abort(),_.current.cleanup(),clearTimeout(O.current)}}),[S]);var k=function(){O.current=setTimeout(P,a)},j=function(){clearTimeout(O.current),O.current=null},T=function(){try{L(!1);var e=_.current;e.removeEventListener("start",A),e.removeEventListener("end",P),e.removeEventListener("speechstart",D),e.removeEventListener("speechend",N),e.removeEventListener("result",U),e.removeEventListener("error",I),e.removeEventListener("nomatch",M),e.stop()}catch(e){b&&b(e)}},A=function(e){k(),v&&v(e)},P=function(e){j(),T(),h&&h(e)},D=function(e){j(),d&&d(e)},N=function(e){k(),m&&m(e)},U=function(e,t){T(),y&&y(e,t)},I=function(e){T(),b&&b(e)},M=function(e){E&&E(e)};return w.isSupported&&t.cloneElement(t.isValidElement(r)?r:n.createElement("div",{"data-testid":"__vocal-root__",role:"button","aria-label":c,tabIndex:s,style:p?null:u({width:24,height:24,cursor:x?null:"pointer"},f),className:p},n.createElement(g,{isActive:x,iconColor:"#aaa"})),u({},!x&&{onClick:function(){!function(){try{L(!0);var e=_.current;e.addEventListener("start",A),e.addEventListener("end",P),e.addEventListener("speechstart",D),e.addEventListener("speechend",N),e.addEventListener("result",U),e.addEventListener("error",I),e.addEventListener("nomatch",M),e.start()}catch(e){I(e)}}()}}))};E.propTypes={grammars:r.object,lang:r.string,timeout:r.number,ariaLabel:r.string,tabIndex:r.number,style:r.object,className:r.string,onStart:r.func,onEnd:r.func,onSpeechStart:r.func,onSpeechEnd:r.func,onResult:r.func,onError:r.func,onNoMatch:r.func},E.defaultProps={grammars:null,lang:"en-US",timeout:3e3,ariaLabel:"speech",tabIndex:-1,style:null,className:null,onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null},module.exports=E;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzL2Rpc3QvaW5kZXguZXMuanMiLCIuLi9zcmMvU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmpzIiwiLi4vc3JjL01pY3JvcGhvbmVJY29uLmpzIiwiLi4vc3JjL1ZvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGUoZSxyLHQsbixhLGksbyl7dHJ5e3ZhciB1PWVbaV0obyksYz11LnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHQoZSl9dS5kb25lP3IoYyk6UHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4obixhKX1mdW5jdGlvbiByKHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLGkpe3ZhciBvPXIuYXBwbHkodCxuKTtmdW5jdGlvbiB1KHIpe2UobyxhLGksdSxjLFwibmV4dFwiLHIpfWZ1bmN0aW9uIGMocil7ZShvLGEsaSx1LGMsXCJ0aHJvd1wiLHIpfXUodm9pZCAwKX0pKX19ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxyKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU3ltYm9sfHwhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpKXJldHVybjt2YXIgdD1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyx1PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz11Lm5leHQoKSkuZG9uZSkmJih0LnB1c2goby52YWx1ZSksIXJ8fHQubGVuZ3RoIT09cik7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gdH0oZSxyKXx8ZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG4oZSxyKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKGUpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbihlLHIpfShlLHIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbihlLHIpeyhudWxsPT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLG49bmV3IEFycmF5KHIpO3Q8cjt0Kyspblt0XT1lW3RdO3JldHVybiBufXZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdChcInJldHVyblwiLG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShyLG4pe3ZhciBhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IucGVybWlzc2lvbnMpe2UubmV4dD00O2JyZWFrfW4obmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb25zIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0xNjticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUubmV4dD03LG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTp0fSk7Y2FzZSA3OmE9ZS5zZW50LG89ZnVuY3Rpb24gZSh0KXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixlKSxpKHQudGFyZ2V0LnN0YXRlLHIsbil9LGEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLG8pLGkoYS5zdGF0ZSxyLG4pLGUubmV4dD0xNjticmVhaztjYXNlIDEzOmUucHJldj0xMyxlLnQwPWUuY2F0Y2goNCksbihlLnQwKTtjYXNlIDE2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDEzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaT1mdW5jdGlvbihlLHIsdCl7c3dpdGNoKGUpe2Nhc2VcImRlbmllZFwiOnQobmV3IERPTUV4Y2VwdGlvbihcIlBlcm1pc3Npb24gZGVuaWVkXCIsXCJOT1RfQUxMT1dFRF9FUlJcIikpO2JyZWFrO2RlZmF1bHQ6cihlKX19LG89ZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKG4saSl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixvKXt2YXIgdSxjLHM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKXtlLm5leHQ9NDticmVha31vKG5ldyBET01FeGNlcHRpb24oXCJNZWRpYURldmljZXMgbm90IHN1cHBvcnRlZFwiLFwiTk9UX0ZPVU5EX0VSUlwiKSksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5wcmV2PTQsZS50MD1Qcm9taXNlLGUubmV4dD04LGEobik7Y2FzZSA4OnJldHVybiBlLnQxPWUuc2VudCxlLm5leHQ9MTEsbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoaSk7Y2FzZSAxMTpyZXR1cm4gZS50Mj1lLnNlbnQsZS50Mz1bZS50MSxlLnQyXSxlLm5leHQ9MTUsZS50MC5hbGwuY2FsbChlLnQwLGUudDMpO2Nhc2UgMTU6dT1lLnNlbnQsYz10KHUsMikscz1jWzFdLHIocyksZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6ZS5wcmV2PTIxLGUudDQ9ZS5jYXRjaCg0KSxvKGUudDQpO2Nhc2UgMjQ6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzQsMjFdXSl9KSkpO3JldHVybiBmdW5jdGlvbihyLHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2V4cG9ydHthIGFzIGdldFBlcm1pc3Npb24sbyBhcyBnZXRVc2VyTWVkaWFTdHJlYW19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVrWlhndVpYTXVhbk1pTENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5blpYUlFaWEp0YVhOemFXOXVMbXB6SWl3aUxpNHZjM0pqTDJkbGRGVnpaWEpOWldScFlWTjBjbVZoYlM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRkpsZEhWeWJuTWdZU0J3Y205dGFYTmxJSEpsYzI5c2RtVmtJSGRvWlc0Z2RHaGxJSEJsY20xcGMzTnBiMjRnYVhNZ1ozSmhiblJsWkNCaWVTQjBhR1VnZFhObGNseHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ5WlhSMWNtNXpJSHRRY205dGFYTmxmVnh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCaGMzbHVZeUFvY0dWeWJXbHpjMmx2Yms1aGJXVXBJRDArSUh0Y2JseDBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MFhIUnBaaUFvSVc1aGRtbG5ZWFJ2Y2k1d1pYSnRhWE56YVc5dWN5a2dlMXh1WEhSY2RGeDBjbVZxWldOMEtHNWxkeUJFVDAxRmVHTmxjSFJwYjI0b0oxQmxjbTFwYzNOcGIyNXpJRzV2ZENCemRYQndiM0owWldRbkxDQW5UazlVWDBaUFZVNUVYMFZTVWljcEtWeHVYSFJjZEgwZ1pXeHpaU0I3WEc1Y2RGeDBYSFIwY25rZ2UxeHVYSFJjZEZ4MFhIUmpiMjV6ZENCd1pYSnRhWE56YVc5dVUzUmhkSFZ6SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG5CbGNtMXBjM05wYjI1ekxuRjFaWEo1S0hzZ2JtRnRaVG9nY0dWeWJXbHpjMmx2Yms1aGJXVWdmU2xjYmx4MFhIUmNkRngwWTI5dWMzUWdiMjVEYUdGdVoyVWdQU0FvWlhabGJuUXBJRDArSUh0Y2JseDBYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJjZEhKbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNobGRtVnVkQzUwWVhKblpYUXVjM1JoZEdVc0lISmxjMjlzZG1Vc0lISmxhbVZqZENsY2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUndaWEp0YVhOemFXOXVVM1JoZEhWekxtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJb0oyTm9ZVzVuWlNjc0lHOXVRMmhoYm1kbEtWeHVYSFJjZEZ4MFhIUnlaWE52YkhabFQzSlNaV3BsWTNSQ1lYTmxaRTl1VTNSaGRHVW9jR1Z5YldsemMybHZibE4wWVhSMWN5NXpkR0YwWlN3Z2NtVnpiMngyWlN3Z2NtVnFaV04wS1Z4dVhIUmNkRngwZlNCallYUmphQ0FvWlhKeWIzSXBJSHRjYmx4MFhIUmNkRngwY21WcVpXTjBLR1Z5Y205eUtWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBmU2xjYm4xY2JseHVZMjl1YzNRZ2NtVnpiMngyWlU5eVVtVnFaV04wUW1GelpXUlBibE4wWVhSbElEMGdLSE4wWVhSbExDQnlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmx4MGMzZHBkR05vSUNoemRHRjBaU2tnZTF4dVhIUmNkR05oYzJVZ0oyUmxibWxsWkNjNlhHNWNkRngwWEhSeVpXcGxZM1FvYm1WM0lFUlBUVVY0WTJWd2RHbHZiaWduVUdWeWJXbHpjMmx2YmlCa1pXNXBaV1FuTENBblRrOVVYMEZNVEU5WFJVUmZSVkpTSnlrcFhHNWNkRngwWEhSaWNtVmhhMXh1WEhSY2RHUmxabUYxYkhRNlhHNWNkRngwWEhSeVpYTnZiSFpsS0hOMFlYUmxLVnh1WEhSOVhHNTlYRzRpTENKcGJYQnZjblFnWjJWMFVHVnliV2x6YzJsdmJpQm1jbTl0SUNjdUwyZGxkRkJsY20xcGMzTnBiMjRuWEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCaElIQnliMjFwYzJVZ2NtVnpiMngyWldRZ2QyaGxiaUIwYUdVZ2NHVnliV2x6YzJsdmJpQnBjeUJuY21GdWRHVmtJR0o1SUhSb1pTQjFjMlZ5SUdGdVpDQjBhR1VnYzNSeVpXRnRJR2x6SUhKbGRISnBaWFpsWkZ4dUlDb2dRSEJoY21GdElIQmxjbTFwYzNOcGIyNU9ZVzFsSUNBZ0lDQWdJQ0FnSUNBZ1RtRnRaU0J2WmlCMGFHVWdjR1Z5YldsemMybHZiaTRnUUhObFpTQm9kSFJ3Y3pvdkwzY3pZeTVuYVhSb2RXSXVhVzh2Y0dWeWJXbHpjMmx2Ym5NdkkyVnVkVzFrWldZdGNHVnliV2x6YzJsdmJtNWhiV1ZjYmlBcUlFQndZWEpoYlNCdFpXUnBZVk4wY21WaGJVTnZibk4wY21GcGJuUnpJQ0FnSUVOdmJuTjBjbUZwYm5SeklHOWlhbVZqZEM0Z1FITmxaU0JvZEhSd2N6b3ZMMlJsZG1Wc2IzQmxjaTV0YjNwcGJHeGhMbTl5Wnk5bGJpMVZVeTlrYjJOekwxZGxZaTlCVUVrdlRXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UxQnliMjFwYzJWOVhHNGdLaTljYm1WNGNHOXlkQ0JrWldaaGRXeDBJR0Z6ZVc1aklDaHdaWEp0YVhOemFXOXVUbUZ0WlN3Z2JXVmthV0ZUZEhKbFlXMURiMjV6ZEhKaGFXNTBjeWtnUFQ0Z2UxeHVYSFJ5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvWVhONWJtTWdLSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dVhIUmNkR2xtSUNnaGJtRjJhV2RoZEc5eUxtMWxaR2xoUkdWMmFXTmxjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMDFsWkdsaFJHVjJhV05sY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeXdnSjA1UFZGOUdUMVZPUkY5RlVsSW5LU2xjYmx4MFhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEZ4MGRISjVJSHRjYmx4MFhIUmNkRngwWTI5dWMzUWdXeXdnYzNSeVpXRnRYU0E5SUdGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0Z0Y2JseDBYSFJjZEZ4MFhIUmhkMkZwZENCblpYUlFaWEp0YVhOemFXOXVLSEJsY20xcGMzTnBiMjVPWVcxbEtTeGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQnVZWFpwWjJGMGIzSXViV1ZrYVdGRVpYWnBZMlZ6TG1kbGRGVnpaWEpOWldScFlTaHRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6S1N4Y2JseDBYSFJjZEZ4MFhTbGNibHgwWEhSY2RGeDBjbVZ6YjJ4MlpTaHpkSEpsWVcwcFhHNWNkRngwWEhSOUlHTmhkR05vSUNobGNuSnZjaWtnZTF4dVhIUmNkRngwWEhSeVpXcGxZM1FvWlhKeWIzSXBYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFI5S1Z4dWZWeHVJbDBzSW01aGJXVnpJanBiSW5CbGNtMXBjM05wYjI1T1lXMWxJaXdpVUhKdmJXbHpaU0lzSW5KbGMyOXNkbVVpTENKeVpXcGxZM1FpTENKdVlYWnBaMkYwYjNJaUxDSndaWEp0YVhOemFXOXVjeUlzSWtSUFRVVjRZMlZ3ZEdsdmJpSXNJbkYxWlhKNUlpd2libUZ0WlNJc0luQmxjbTFwYzNOcGIyNVRkR0YwZFhNaUxDSnZia05vWVc1blpTSXNJbVYyWlc1MElpd2ljbVZ0YjNabFJYWmxiblJNYVhOMFpXNWxjaUlzSW5KbGMyOXNkbVZQY2xKbGFtVmpkRUpoYzJWa1QyNVRkR0YwWlNJc0luUmhjbWRsZENJc0luTjBZWFJsSWl3aVlXUmtSWFpsYm5STWFYTjBaVzVsY2lJc0ltMWxaR2xoVTNSeVpXRnRRMjl1YzNSeVlXbHVkSE1pTENKdFpXUnBZVVJsZG1salpYTWlMQ0puWlhSUVpYSnRhWE56YVc5dUlpd2laMlYwVlhObGNrMWxaR2xoSWl3aVlXeHNJaXdpYzNSeVpXRnRJbDBzSW0xaGNIQnBibWR6SWpvaWJYZERRVXRCTEd0RVFVRmxMRmRCUVU5QkxEUkhRVU5rTEVsQlFVbERMRzlFUVVGUkxGZEJRVTlETEVWQlFWTkRMRGhHUVVNM1FrTXNWVUZCVlVNc05FSkJRMlJHTEVWQlFVOHNTVUZCU1Vjc1lVRkJZU3cwUWtGQk5rSXNhMFZCUjNKQ1JpeFZRVUZWUXl4WlFVRlpSU3hOUVVGTkxFTkJRVVZETEV0QlFVMVNMRmRCUVRkRVV5eFRRVU5CUXl4RlFVRlhMRk5CUVZoQkxFVkJRVmxETEVkQlEycENSaXhGUVVGcFFrY3NiMEpCUVc5Q0xGTkJRVlZHTEVkQlF5OURSeXhGUVVFMFFrWXNSVUZCVFVjc1QwRkJUME1zVFVGQlQySXNSVUZCVTBNc1NVRkZNVVJOTEVWQlFXbENUeXhwUWtGQmFVSXNVMEZCVlU0c1IwRkROVU5ITEVWQlFUUkNTaXhGUVVGcFFrMHNUVUZCVDJJc1JVRkJVME1zY1VSQlJUZEVRU3cyVGtGTlJWVXNSVUZCT0VJc1UwRkJRMFVzUlVGQlQySXNSVUZCVTBNc1ZVRkROVU5aTEU5QlEwWXNVMEZEU2xvc1JVRkJUeXhKUVVGSlJ5eGhRVUZoTEc5Q1FVRnhRaXhyUTBGSE4wTktMRVZCUVZGaExHMUVRM1pDU1N4WFFVRlBaaXhGUVVGblFtbENMRFJIUVVNNVFpeEpRVUZKYUVJc2IwUkJRVkVzVjBGQlQwTXNSVUZCVTBNc1owZEJRemRDUXl4VlFVRlZZeXcyUWtGRFpHWXNSVUZCVHl4SlFVRkpSeXhoUVVGaExEWkNRVUU0UWl3NFJFRkhOVUpNTEdsQ1FVTnNRbXRDTEVWQlFXTnVRaXgxUTBGRFpFa3NWVUZCVldNc1lVRkJZVVVzWVVGQllVZ3NPRVJCUmxaSkxEaERRVUY0UWtNc1QwRkpWSEJDTEVWQlFWRnZRaXh4UkVGRlVtNUNJbjA9XG4iLCJpbXBvcnQgeyBnZXRVc2VyTWVkaWFTdHJlYW0gfSBmcm9tICdAdW50ZW1wcy91c2VyLXBlcm1pc3Npb25zLXV0aWxzJ1xuXG5jbGFzcyBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIge1xuXHRzdGF0aWMgZGVmYXVsdE9wdGlvbnMgPSB7XG5cdFx0Z3JhbW1hcnM6IG51bGwsXG5cdFx0bGFuZzogJ2VuLVVTJyxcblx0XHRjb250aW51b3VzOiBmYWxzZSxcblx0XHRpbnRlcmltUmVzdWx0czogZmFsc2UsXG5cdFx0bWF4QWx0ZXJuYXRpdmVzOiAxLFxuXHRcdHNlcnZpY2VVUkk6IG51bGwsXG5cdH1cblxuXHRzdGF0aWMgZXZlbnRUeXBlcyA9IHtcblx0XHRBVURJT19FTkQ6ICdhdWRpb2VuZCcsXG5cdFx0QVVESU9fU1RBUlQ6ICdhdWRpb3N0YXJ0Jyxcblx0XHRFTkQ6ICdlbmQnLFxuXHRcdEVSUk9SOiAnZXJyb3InLFxuXHRcdE5PX01BVENIOiAnbm9tYXRjaCcsXG5cdFx0UkVTVUxUOiAncmVzdWx0Jyxcblx0XHRTT1VORF9FTkQ6ICdzb3VuZGVuZCcsXG5cdFx0U09VTkRfU1RBUlQ6ICdzb3VuZHN0YXJ0Jyxcblx0XHRTUEVFQ0hfRU5EOiAnc3BlZWNoZW5kJyxcblx0XHRTUEVFQ0hfU1RBUlQ6ICdzcGVlY2hzdGFydCcsXG5cdFx0U1RBUlQ6ICdzdGFydCcsXG5cdH1cblxuXHRzdGF0aWMgZ2V0IGlzU3VwcG9ydGVkKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIXdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0ISF3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdCEhd2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHQhIXdpbmRvdy5tc1NwZWVjaFJlY29nbml0aW9uXG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIHNldCBpc1N1cHBvcnRlZChfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpc1N1cHBvcnRlZCBkaXJlY3RseS4nKVxuXHR9XG5cblx0X2luc3RhbmNlID0gbnVsbFxuXHRfbGlzdGVuZXJzID0gbnVsbFxuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRjb25zdCBTcGVlY2hSZWNvZ25pdGlvbiA9XG5cdFx0XHR3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1velNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0e31cblx0XHR0aGlzLl9pbnN0YW5jZSA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge31cblxuXHRcdGlmKCEhb3B0aW9ucyAmJiAhb3B0aW9ucy5ncmFtbWFycykge1xuXHRcdFx0Y29uc3QgU3BlZWNoR3JhbW1hckxpc3QgPVxuXHRcdFx0XHR3aW5kb3cuU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdFx0d2luZG93LndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHRcdHdpbmRvdy5tb3pTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0XHR3aW5kb3cubXNTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0XHR7fVxuXHRcdFx0dGhpcy5faW5zdGFuY2UuZ3JhbW1hcnMgPSBuZXcgU3BlZWNoR3JhbW1hckxpc3QoKVxuXHRcdH1cblxuXHRcdE9iamVjdC5lbnRyaWVzKHsgLi4uU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmRlZmF1bHRPcHRpb25zLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSkuZm9yRWFjaChcblx0XHRcdChba2V5LCB2YWx1ZV0pID0+ICh0aGlzLl9pbnN0YW5jZVtrZXldID0gdmFsdWUpXG5cdFx0KVxuXHR9XG5cblx0Z2V0IGluc3RhbmNlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnN0YW5jZVxuXHR9XG5cblx0c2V0IGluc3RhbmNlKF8pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3Qgc2V0IGluc3RhbmNlIGRpcmVjdGx5LicpXG5cdH1cblxuXHRhc3luYyBzdGFydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc3RyZWFtID0gYXdhaXQgZ2V0VXNlck1lZGlhU3RyZWFtKCdtaWNyb3Bob25lJywgeyBhdWRpbzogdHJ1ZSB9KVxuXHRcdFx0XHRpZiAoIXN0cmVhbSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBzdHJlYW0gZnJvbSBtZWRpYSBkZXZpY2UnKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2luc3RhbmNlLnN0YXJ0KClcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuX2xpc3RlbmVycy5lcnJvclxuXHRcdFx0XHRpZiAoISFlcnJvckhhbmRsZXIpIHtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2Uuc3RvcCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFib3J0KCkge1xuXHRcdGlmICghIXRoaXMuX2luc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hYm9ydCgpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbmNsdWRlc0V2ZW50VHlwZSh0eXBlKSkge1xuXHRcdFx0aWYgKCEhdGhpcy5fbGlzdGVuZXJzW3R5cGVdKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsQXJncyA9IFtdXG5cdFx0XHRcdGlmICh0eXBlID09PSBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZXZlbnRUeXBlcy5SRVNVTFQpIHtcblx0XHRcdFx0XHRpZiAoISFldmVudC5yZXN1bHRzICYmIGV2ZW50LnJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0YWRkaXRpb25hbEFyZ3MucHVzaChldmVudC5yZXN1bHRzWzBdWzBdLnRyYW5zY3JpcHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ISFjYWxsYmFjayAmJiBjYWxsYmFjay5hcHBseSh0aGlzLCBbLi4uYWRkaXRpb25hbEFyZ3MsIGV2ZW50XSlcblx0XHRcdH1cblx0XHRcdHRoaXMuX2luc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgKGUpID0+IGhhbmRsZXIoZSkpXG5cblx0XHRcdHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA9IGhhbmRsZXJcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXVxuXHRcdHRoaXMuX2luc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlcilcblxuXHRcdGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbdHlwZV1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRjbGVhbnVwKCkge1xuXHRcdHRoaXMuc3RvcCgpXG5cblx0XHRPYmplY3Qua2V5cyh0aGlzLl9saXN0ZW5lcnMpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGtleSkpXG5cdFx0dGhpcy5faW5zdGFuY2UgPSBudWxsXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0X2luY2x1ZGVzRXZlbnRUeXBlID0gKGV2ZW50VHlwZSkgPT5cblx0XHRPYmplY3QudmFsdWVzKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5ldmVudFR5cGVzKS5maW5kKCh0eXBlKSA9PiB0eXBlID09PSBldmVudFR5cGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5jb25zdCBNaWNyb3Bob25lSWNvbiA9ICh7IGljb25Db2xvciA9ICdibGFjaycsIGFjdGl2ZUNvbG9yID0gJ3JlZCcsIGlzQWN0aXZlID0gZmFsc2UgfSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG5cdFx0XHQ8Zz5cblx0XHRcdFx0PHBhdGhcblx0XHRcdFx0XHRmaWxsPXtpY29uQ29sb3J9XG5cdFx0XHRcdFx0ZD1cIk0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6XCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0e2lzQWN0aXZlICYmIDxjaXJjbGUgZmlsbD17YWN0aXZlQ29sb3J9IGN4PVwiMTZcIiBjeT1cIjRcIiByPVwiNFwiIC8+fVxuXHRcdFx0PC9nPlxuXHRcdDwvc3ZnPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1pY3JvcGhvbmVJY29uXG4iLCJpbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmltcG9ydCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIgZnJvbSAnLi9TcGVlY2hSZWNvZ25pdGlvbldyYXBwZXInXG5cbmltcG9ydCBNaWNyb3Bob25lSWNvbiBmcm9tICcuL01pY3JvcGhvbmVJY29uJ1xuXG5jb25zdCBWb2NhbCA9ICh7XG5cdGNoaWxkcmVuLFxuXHRncmFtbWFycyxcblx0bGFuZyxcblx0dGltZW91dCxcblx0YXJpYUxhYmVsLFxuXHR0YWJJbmRleCxcblx0c3R5bGUsXG5cdGNsYXNzTmFtZSxcblx0b25TdGFydCxcblx0b25FbmQsXG5cdG9uU3BlZWNoU3RhcnQsXG5cdG9uU3BlZWNoRW5kLFxuXHRvblJlc3VsdCxcblx0b25FcnJvcixcblx0b25Ob01hdGNoLFxuXHRfX3JlY29nbml0aW9uSW5zdGFuY2UsXG59KSA9PiB7XG5cdGNvbnN0IHRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbClcblx0Y29uc3QgcmVjb2duaXRpb25SZWYgPSB1c2VSZWYobnVsbClcblxuXHRjb25zdCBbaXNMaXN0ZW5pbmcsIHNldElzTGlzdGVuaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCkge1xuXHRcdFx0cmVjb2duaXRpb25SZWYuY3VycmVudCA9IF9fcmVjb2duaXRpb25JbnN0YW5jZSB8fCBuZXcgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyKHsgZ3JhbW1hcnMsIGxhbmcgfSlcblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdHJlY29nbml0aW9uUmVmLmN1cnJlbnQuYWJvcnQoKVxuXHRcdFx0XHRyZWNvZ25pdGlvblJlZi5jdXJyZW50LmNsZWFudXAoKVxuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdFx0fVxuXHRcdH1cblx0fSwgW19fcmVjb2duaXRpb25JbnN0YW5jZV0pXG5cblx0Y29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHtcblx0XHR0aW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KF9vbkVuZCwgdGltZW91dClcblx0fVxuXG5cdGNvbnN0IHN0b3BUaW1lciA9ICgpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KVxuXHRcdHRpbWVvdXRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdGNvbnN0IHN0YXJ0UmVjb2duaXRpb24gPSAoKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdHNldElzTGlzdGVuaW5nKHRydWUpXG5cblx0XHRcdGNvbnN0IHsgY3VycmVudDogciB9ID0gcmVjb2duaXRpb25SZWZcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBfb25TdGFydClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgX29uRW5kKVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hzdGFydCcsIF9vblNwZWVjaFN0YXJ0KVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdzcGVlY2hlbmQnLCBfb25TcGVlY2hFbmQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIF9vblJlc3VsdClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBfb25FcnJvcilcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignbm9tYXRjaCcsIF9vbk5vTWF0Y2gpXG5cdFx0XHRyLnN0YXJ0KClcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0X29uRXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RvcFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyhmYWxzZSlcblxuXHRcdFx0Y29uc3QgeyBjdXJyZW50OiByIH0gPSByZWNvZ25pdGlvblJlZlxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIF9vblN0YXJ0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmQnLCBfb25FbmQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaHN0YXJ0JywgX29uU3BlZWNoU3RhcnQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NwZWVjaGVuZCcsIF9vblNwZWVjaEVuZClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzdWx0JywgX29uUmVzdWx0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIF9vbkVycm9yKVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdub21hdGNoJywgX29uTm9NYXRjaClcblx0XHRcdHIuc3RvcCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXHR9XG5cblx0Y29uc3QgZW5kID0gKCkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cdFx0c3RvcFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vbkNsaWNrID0gKCkgPT4ge1xuXHRcdHN0YXJ0UmVjb2duaXRpb24oKVxuXHR9XG5cblx0Y29uc3QgX29uU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0KClcblxuXHRcdCEhb25TdGFydCAmJiBvblN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25FbmQgPSAoZSkgPT4ge1xuXHRcdGVuZCgpXG5cblx0XHQhIW9uRW5kICYmIG9uRW5kKGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hTdGFydCA9IChlKSA9PiB7XG5cdFx0c3RvcFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hTdGFydCAmJiBvblNwZWVjaFN0YXJ0KGUpXG5cdH1cblxuXHRjb25zdCBfb25TcGVlY2hFbmQgPSAoZSkgPT4ge1xuXHRcdHN0YXJ0VGltZXIoKVxuXG5cdFx0ISFvblNwZWVjaEVuZCAmJiBvblNwZWVjaEVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uUmVzdWx0ID0gKHJlc3VsdCwgZXZlbnQpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvblJlc3VsdCAmJiBvblJlc3VsdChyZXN1bHQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgX29uRXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRzdG9wUmVjb2duaXRpb24oKVxuXG5cdFx0ISFvbkVycm9yICYmIG9uRXJyb3IoZXJyb3IpXG5cdH1cblxuXHRjb25zdCBfb25Ob01hdGNoID0gKGUpID0+IHtcblx0XHQhIW9uTm9NYXRjaCAmJiBvbk5vTWF0Y2goZSlcblx0fVxuXG5cdGNvbnN0IF9yZW5kZXJEZWZhdWx0ID0gKCkgPT4gKFxuXHRcdDxkaXZcblx0XHRcdGRhdGEtdGVzdGlkPVwiX192b2NhbC1yb290X19cIlxuXHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG5cdFx0XHR0YWJJbmRleD17dGFiSW5kZXh9XG5cdFx0XHRzdHlsZT17Y2xhc3NOYW1lID8gbnVsbCA6IHsgd2lkdGg6IDI0LCBoZWlnaHQ6IDI0LCBjdXJzb3I6ICFpc0xpc3RlbmluZyA/ICdwb2ludGVyJyA6IG51bGwsIC4uLnN0eWxlIH19XG5cdFx0XHRjbGFzc05hbWU9e2NsYXNzTmFtZX1cblx0XHQ+XG5cdFx0XHQ8TWljcm9waG9uZUljb24gaXNBY3RpdmU9e2lzTGlzdGVuaW5nfSBpY29uQ29sb3I9XCIjYWFhXCIgLz5cblx0XHQ8L2Rpdj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0U3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmlzU3VwcG9ydGVkICYmXG5cdFx0Y2xvbmVFbGVtZW50KGlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogX3JlbmRlckRlZmF1bHQoKSwge1xuXHRcdFx0Li4uKCFpc0xpc3RlbmluZyAmJiB7IG9uQ2xpY2s6IF9vbkNsaWNrIH0pLFxuXHRcdH0pXG5cdClcbn1cblxuVm9jYWwucHJvcFR5cGVzID0ge1xuXHQvKiogRGVmaW5lcyB0aGUgZ3JhbW1hcnMgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9ncmFtbWFycykgKi9cblx0Z3JhbW1hcnM6IFByb3BUeXBlcy5vYmplY3QsXG5cdC8qKiBEZWZpbmVzIHRoZSBsYW5ndWFnZSB1bmRlcnN0b29kIGJ5IHRoZSByZWNvZ25pdGlvbiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NwZWVjaFJlY29nbml0aW9uL2xhbmcpICovXG5cdGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIGRpc2NhcmRpbmcgdGhlIHJlY29nbml0aW9uICovXG5cdHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBhMTF5IGxhYmVsIGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0YXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSB0YWIgaW5kZXggZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbiAqL1xuXHR0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0LyoqIERlZmluZXMgdGhlIHN0eWxlcyBvZiB0aGUgZGVmYXVsdCBlbGVtZW50IGlmIGNsYXNzTmFtZSBpcyBub3Qgc3BlY2lmaWVkICovXG5cdHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgY2xhc3Mgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCAqL1xuXHRjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBzdGFydHMgKi9cblx0b25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pdGlvbiBlbmRzICovXG5cdG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCBzdGFydHMgKi9cblx0b25TcGVlY2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggZW5kcyAqL1xuXHRvblNwZWVjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcmVzdWx0IGlzIHJldHVybmVkIGZyb20gdGUgcmVjb2duaXRpb24gKi9cblx0b25SZXN1bHQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi9cblx0b25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIG5vIHJlc3VsdCBjYW4gYmUgcmVjb2duaXplZCAqL1xuXHRvbk5vTWF0Y2g6IFByb3BUeXBlcy5mdW5jLFxufVxuXG5Wb2NhbC5kZWZhdWx0UHJvcHMgPSB7XG5cdGdyYW1tYXJzOiBudWxsLFxuXHRsYW5nOiAnZW4tVVMnLFxuXHR0aW1lb3V0OiAzMDAwLFxuXHRhcmlhTGFiZWw6ICdzcGVlY2gnLFxuXHR0YWJJbmRleDogLTEsXG5cdHN0eWxlOiBudWxsLFxuXHRjbGFzc05hbWU6IG51bGwsXG5cdG9uU3RhcnQ6IG51bGwsXG5cdG9uRW5kOiBudWxsLFxuXHRvblNwZWVjaFN0YXJ0OiBudWxsLFxuXHRvblNwZWVjaEVuZDogbnVsbCxcblx0b25SZXN1bHQ6IG51bGwsXG5cdG9uRXJyb3I6IG51bGwsXG5cdG9uTm9NYXRjaDogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVm9jYWxcbiJdLCJuYW1lcyI6WyJlIiwiciIsInQiLCJuIiwiYSIsImkiLCJvIiwidSIsImMiLCJ2YWx1ZSIsImRvbmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ0aGlzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJBcnJheSIsImlzQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwicmV0dXJuIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlR5cGVFcnJvciIsInJlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJ3cmFwIiwicHJldiIsImFicnVwdCIsIm5hdmlnYXRvciIsInBlcm1pc3Npb25zIiwiRE9NRXhjZXB0aW9uIiwicXVlcnkiLCJzZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRhcmdldCIsInN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInQwIiwiY2F0Y2giLCJzdG9wIiwicyIsIm1lZGlhRGV2aWNlcyIsInQxIiwiZ2V0VXNlck1lZGlhIiwidDIiLCJ0MyIsImFsbCIsInQ0IiwiU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIiwib3B0aW9ucyIsImV2ZW50VHlwZSIsInZhbHVlcyIsImV2ZW50VHlwZXMiLCJmaW5kIiwidHlwZSIsIlNwZWVjaFJlY29nbml0aW9uIiwid2luZG93Iiwid2Via2l0U3BlZWNoUmVjb2duaXRpb24iLCJtb3pTcGVlY2hSZWNvZ25pdGlvbiIsIm1zU3BlZWNoUmVjb2duaXRpb24iLCJfaW5zdGFuY2UiLCJfbGlzdGVuZXJzIiwiZ3JhbW1hcnMiLCJTcGVlY2hHcmFtbWFyTGlzdCIsIndlYmtpdFNwZWVjaEdyYW1tYXJMaXN0IiwibW96U3BlZWNoR3JhbW1hckxpc3QiLCJtc1NwZWVjaEdyYW1tYXJMaXN0IiwiZW50cmllcyIsImRlZmF1bHRPcHRpb25zIiwiZm9yRWFjaCIsImtleSIsIl90aGlzIiwiXyIsIkVycm9yIiwiZ2V0VXNlck1lZGlhU3RyZWFtIiwiYXVkaW8iLCJzdGFydCIsImVycm9ySGFuZGxlciIsImVycm9yIiwiYWJvcnQiLCJjYWxsYmFjayIsIl9pbmNsdWRlc0V2ZW50VHlwZSIsImhhbmRsZXIiLCJldmVudCIsImFkZGl0aW9uYWxBcmdzIiwiUkVTVUxUIiwicmVzdWx0cyIsInRyYW5zY3JpcHQiLCJfdGhpczIiLCJrZXlzIiwiX3RoaXMzIiwibGFuZyIsImNvbnRpbnVvdXMiLCJpbnRlcmltUmVzdWx0cyIsIm1heEFsdGVybmF0aXZlcyIsInNlcnZpY2VVUkkiLCJBVURJT19FTkQiLCJBVURJT19TVEFSVCIsIkVORCIsIkVSUk9SIiwiTk9fTUFUQ0giLCJTT1VORF9FTkQiLCJTT1VORF9TVEFSVCIsIlNQRUVDSF9FTkQiLCJTUEVFQ0hfU1RBUlQiLCJTVEFSVCIsIk1pY3JvcGhvbmVJY29uIiwiaWNvbkNvbG9yIiwiYWN0aXZlQ29sb3IiLCJpc0FjdGl2ZSIsIlJlYWN0IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZCIsImN4IiwiY3kiLCJWb2NhbCIsImNoaWxkcmVuIiwidGltZW91dCIsImFyaWFMYWJlbCIsInRhYkluZGV4Iiwic3R5bGUiLCJjbGFzc05hbWUiLCJvblN0YXJ0Iiwib25FbmQiLCJvblNwZWVjaFN0YXJ0Iiwib25TcGVlY2hFbmQiLCJvblJlc3VsdCIsIm9uRXJyb3IiLCJvbk5vTWF0Y2giLCJfX3JlY29nbml0aW9uSW5zdGFuY2UiLCJ0aW1lb3V0UmVmIiwidXNlUmVmIiwicmVjb2duaXRpb25SZWYiLCJ1c2VTdGF0ZSIsImlzTGlzdGVuaW5nIiwic2V0SXNMaXN0ZW5pbmciLCJ1c2VFZmZlY3QiLCJpc1N1cHBvcnRlZCIsImN1cnJlbnQiLCJjbGVhbnVwIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnRUaW1lciIsInNldFRpbWVvdXQiLCJfb25FbmQiLCJzdG9wVGltZXIiLCJzdG9wUmVjb2duaXRpb24iLCJfb25TdGFydCIsIl9vblNwZWVjaFN0YXJ0IiwiX29uU3BlZWNoRW5kIiwiX29uUmVzdWx0IiwiX29uRXJyb3IiLCJfb25Ob01hdGNoIiwicmVzdWx0IiwiY2xvbmVFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJyb2xlIiwiY3Vyc29yIiwib25DbGljayIsInN0YXJ0UmVjb2duaXRpb24iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJzdHJpbmciLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoia21FQUFBLFNBQVNBLEVBQUVBLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEdBQUcsSUFBSSxJQUFJQyxFQUFFUCxFQUFFSyxHQUFHQyxHQUFHRSxFQUFFRCxFQUFFRSxNQUFNLE1BQU1ULEdBQUcsWUFBWUUsRUFBRUYsR0FBR08sRUFBRUcsS0FBS1QsRUFBRU8sR0FBR0csUUFBUUMsUUFBUUosR0FBR0ssS0FBS1YsRUFBRUMsR0FBRyxTQUFTSCxFQUFFQSxHQUFHLE9BQU8sV0FBVyxJQUFJQyxFQUFFWSxLQUFLWCxFQUFFWSxVQUFVLE9BQU8sSUFBSUosa0JBQWtCUCxFQUFFQyxHQUFHLElBQUlDLEVBQUVMLEVBQUVlLE1BQU1kLEVBQUVDLEdBQUcsU0FBU0ksRUFBRU4sR0FBR0QsRUFBRU0sRUFBRUYsRUFBRUMsRUFBRUUsRUFBRUMsRUFBRSxPQUFPUCxHQUFHLFNBQVNPLEVBQUVQLEdBQUdELEVBQUVNLEVBQUVGLEVBQUVDLEVBQUVFLEVBQUVDLEVBQUUsUUFBUVAsR0FBR00sT0FBRSxPQUFZLFNBQVNMLEVBQUVGLEVBQUVDLEdBQUcsT0FBTyxTQUFTRCxHQUFHLEdBQUdpQixNQUFNQyxRQUFRbEIsR0FBRyxPQUFPQSxFQUF2QyxDQUEwQ0EsSUFBSSxTQUFTQSxFQUFFQyxHQUFHLEdBQUcsb0JBQW9Ca0IsUUFBVUEsT0FBT0MsWUFBWUMsT0FBT3JCLEdBQTNELENBQXNFLElBQUlFLEVBQUUsR0FBR0MsR0FBRSxFQUFHQyxHQUFFLEVBQUdDLE9BQUUsRUFBTyxJQUFJLElBQUksSUFBSUMsRUFBRUMsRUFBRVAsRUFBRW1CLE9BQU9DLGNBQWNqQixH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

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

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):(e=e||self)["react-vocal"]=t(e.React,e.PropTypes)}(this,(function(e,t){"use strict";var n="default"in e?e.default:e;function r(e,t,n,r,i,o,a){try{var c=e[o](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,i)}function i(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)}}function o(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function f(e,t,n,r,i,o,a){try{var c=e[o](a),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,i)}function p(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){f(o,r,i,a,c,"next",e)}function c(e){f(o,r,i,a,c,"throw",e)}a(void 0)}))}}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;var h=function(){var e=p(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=p(regeneratorRuntime.mark((function e(n,r){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:i=e.sent,o=function e(t){i.removeEventListener("change",e),m(t.target.state,n,r)},i.addEventListener("change",o),m(i.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),m=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},y=function(){var e=p(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=p(regeneratorRuntime.mark((function e(r,i){var o,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}i(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,h(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:o=e.sent,a=v(o,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),i(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),b=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),a(this,"_instance",null),a(this,"_listeners",null),a(this,"_includesEventType",(function(t){return Object.values(e.eventTypes).find((function(e){return e===t}))}));var r=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition||{};this._instance=new r,this._listeners={},Object.entries(u(u({},e.defaultOptions),t||{})).forEach((function(e){var t=s(e,2),r=t[0],i=t[1];return n._instance[r]=i}))}var t,n;return o(e,null,[{key:"isSupported",get:function(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition)},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),o(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,y("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt("return",this);case 15:case"end":return e.stop()}}),e,this,[[1,10]])})),n=function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function c(e){r(a,i,o,c,u,"next",e)}function u(e){r(a,i,o,c,u,"throw",e)}c(void 0)}))},function(){return n.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(t,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var o=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[].concat(o,[i]))};this._instance.addEventListener(t,(function(e){return i(e)})),this._listeners[t]=i}return this}},{key:"removeEventListener",value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:"cleanup",value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),this._instance=null,this}},{key:"instance",get:function(){return this._instance},set:function(e){throw new Error("You cannot set instance directly.")}}]),e}();a(b,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),a(b,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var w=function(e){var t=e.iconColor,r=void 0===t?"black":t,i=e.activeColor,o=void 0===i?"red":i,a=e.isActive,c=void 0!==a&&a;return n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},n.createElement("g",null,n.createElement("path",{fill:r,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),c&&n.createElement("circle",{fill:o,cx:"16",cy:"4",r:"4"})))},g=function(t){var r=t.children,i=t.grammars,o=t.lang,a=t.timeout,c=t.ariaLabel,l=t.tabIndex,f=t.style,p=t.className,v=t.onStart,d=t.onEnd,h=t.onSpeechStart,m=t.onSpeechEnd,y=t.onResult,g=t.onError,E=t.onNoMatch,S=t.__recognitionInstance,O=e.useRef(null),_=e.useRef(null),R=s(e.useState(!1),2),x=R[0],k=R[1];e.useEffect((function(){if(b.isSupported)return _.current=S||new b({grammars:i,lang:o}),function(){_.current.abort(),_.current.cleanup(),clearTimeout(O.current)}}),[S]);var L=function(){O.current=setTimeout(A,a)},j=function(){clearTimeout(O.current),O.current=null},T=function(){try{k(!1);var e=_.current;e.removeEventListener("start",P),e.removeEventListener("end",A),e.removeEventListener("speechstart",D),e.removeEventListener("speechend",N),e.removeEventListener("result",U),e.removeEventListener("error",I),e.removeEventListener("nomatch",M),e.stop()}catch(e){g&&g(e)}},P=function(e){L(),v&&v(e)},A=function(e){j(),T(),d&&d(e)},D=function(e){j(),h&&h(e)},N=function(e){L(),m&&m(e)},U=function(e,t){T(),y&&y(e,t)},I=function(e){T(),g&&g(e)},M=function(e){E&&E(e)};return b.isSupported&&e.cloneElement(e.isValidElement(r)?r:n.createElement("div",{"data-testid":"__vocal-root__",role:"button","aria-label":c,tabIndex:l,style:p?null:u({width:24,height:24,cursor:x?null:"pointer"},f),className:p},n.createElement(w,{isActive:x,iconColor:"#aaa"})),u({},!x&&{onClick:function(){!function(){try{k(!0);var e=_.current;e.addEventListener("start",P),e.addEventListener("end",A),e.addEventListener("speechstart",D),e.addEventListener("speechend",N),e.addEventListener("result",U),e.addEventListener("error",I),e.addEventListener("nomatch",M),e.start()}catch(e){I(e)}}()}}))};return g.propTypes={grammars:t.object,lang:t.string,timeout:t.number,ariaLabel:t.string,tabIndex:t.number,style:t.object,className:t.string,onStart:t.func,onEnd:t.func,onSpeechStart:t.func,onSpeechEnd:t.func,onResult:t.func,onError:t.func,onNoMatch:t.func},g.defaultProps={grammars:null,lang:"en-US",timeout:3e3,ariaLabel:"speech",tabIndex:-1,style:null,className:null,onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null},g}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudW1kLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscy9kaXN0L2luZGV4LmVzLmpzIiwiLi4vc3JjL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlci5qcyIsIi4uL3NyYy9NaWNyb3Bob25lSWNvbi5qcyIsIi4uL3NyYy9Wb2NhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBlKGUscix0LG4sYSxpLG8pe3RyeXt2YXIgdT1lW2ldKG8pLGM9dS52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0KGUpfXUuZG9uZT9yKGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gcihyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxpKXt2YXIgbz1yLmFwcGx5KHQsbik7ZnVuY3Rpb24gdShyKXtlKG8sYSxpLHUsYyxcIm5leHRcIixyKX1mdW5jdGlvbiBjKHIpe2UobyxhLGksdSxjLFwidGhyb3dcIixyKX11KHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUscil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFN5bWJvbHx8IShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKSlyZXR1cm47dmFyIHQ9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8sdT1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89dS5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKG8udmFsdWUpLCFyfHx0Lmxlbmd0aCE9PXIpO249ITApO31jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT11LnJldHVybnx8dS5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHR9KGUscil8fGZ1bmN0aW9uKGUscil7aWYoIWUpcmV0dXJuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuKGUscik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO1wiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbShlKTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG4oZSxyKX0oZSxyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG4oZSxyKXsobnVsbD09cnx8cj5lLmxlbmd0aCkmJihyPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxuPW5ldyBBcnJheShyKTt0PHI7dCsrKW5bdF09ZVt0XTtyZXR1cm4gbn12YXIgYT1mdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixuKXt2YXIgYSxvO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobmF2aWdhdG9yLnBlcm1pc3Npb25zKXtlLm5leHQ9NDticmVha31uKG5ldyBET01FeGNlcHRpb24oXCJQZXJtaXNzaW9ucyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfRk9VTkRfRVJSXCIpKSxlLm5leHQ9MTY7YnJlYWs7Y2FzZSA0OnJldHVybiBlLnByZXY9NCxlLm5leHQ9NyxuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6dH0pO2Nhc2UgNzphPWUuc2VudCxvPWZ1bmN0aW9uIGUodCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZSksaSh0LnRhcmdldC5zdGF0ZSxyLG4pfSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixvKSxpKGEuc3RhdGUscixuKSxlLm5leHQ9MTY7YnJlYWs7Y2FzZSAxMzplLnByZXY9MTMsZS50MD1lLmNhdGNoKDQpLG4oZS50MCk7Y2FzZSAxNjpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNCwxM11dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpO2Nhc2UgMTpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGk9ZnVuY3Rpb24oZSxyLHQpe3N3aXRjaChlKXtjYXNlXCJkZW5pZWRcIjp0KG5ldyBET01FeGNlcHRpb24oXCJQZXJtaXNzaW9uIGRlbmllZFwiLFwiTk9UX0FMTE9XRURfRVJSXCIpKTticmVhaztkZWZhdWx0OnIoZSl9fSxvPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShuLGkpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbyl7dmFyIHUsYyxzO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyl7ZS5uZXh0PTQ7YnJlYWt9byhuZXcgRE9NRXhjZXB0aW9uKFwiTWVkaWFEZXZpY2VzIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0yNDticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUudDA9UHJvbWlzZSxlLm5leHQ9OCxhKG4pO2Nhc2UgODpyZXR1cm4gZS50MT1lLnNlbnQsZS5uZXh0PTExLG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGkpO2Nhc2UgMTE6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9W2UudDEsZS50Ml0sZS5uZXh0PTE1LGUudDAuYWxsLmNhbGwoZS50MCxlLnQzKTtjYXNlIDE1OnU9ZS5zZW50LGM9dCh1LDIpLHM9Y1sxXSxyKHMpLGUubmV4dD0yNDticmVhaztjYXNlIDIxOmUucHJldj0yMSxlLnQ0PWUuY2F0Y2goNCksbyhlLnQ0KTtjYXNlIDI0OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDIxXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtleHBvcnR7YSBhcyBnZXRQZXJtaXNzaW9uLG8gYXMgZ2V0VXNlck1lZGlhU3RyZWFtfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3VaWE11YW5NaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OW5aWFJRWlhKdGFYTnphVzl1TG1weklpd2lMaTR2YzNKakwyZGxkRlZ6WlhKTlpXUnBZVk4wY21WaGJTNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUZKbGRIVnlibk1nWVNCd2NtOXRhWE5sSUhKbGMyOXNkbVZrSUhkb1pXNGdkR2hsSUhCbGNtMXBjM05wYjI0Z2FYTWdaM0poYm5SbFpDQmllU0IwYUdVZ2RYTmxjbHh1SUNvZ1FIQmhjbUZ0SUhCbGNtMXBjM05wYjI1T1lXMWxJQ0FnSUNBZ0lDQWdJQ0FnVG1GdFpTQnZaaUIwYUdVZ2NHVnliV2x6YzJsdmJpNGdRSE5sWlNCb2RIUndjem92TDNjell5NW5hWFJvZFdJdWFXOHZjR1Z5YldsemMybHZibk12STJWdWRXMWtaV1l0Y0dWeWJXbHpjMmx2Ym01aGJXVmNiaUFxSUVCeVpYUjFjbTV6SUh0UWNtOXRhWE5sZlZ4dUlDb3ZYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmhjM2x1WXlBb2NHVnliV2x6YzJsdmJrNWhiV1VwSUQwK0lIdGNibHgwY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0dGemVXNWpJQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JseDBYSFJwWmlBb0lXNWhkbWxuWVhSdmNpNXdaWEp0YVhOemFXOXVjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMUJsY20xcGMzTnBiMjV6SUc1dmRDQnpkWEJ3YjNKMFpXUW5MQ0FuVGs5VVgwWlBWVTVFWDBWU1VpY3BLVnh1WEhSY2RIMGdaV3h6WlNCN1hHNWNkRngwWEhSMGNua2dlMXh1WEhSY2RGeDBYSFJqYjI1emRDQndaWEp0YVhOemFXOXVVM1JoZEhWeklEMGdZWGRoYVhRZ2JtRjJhV2RoZEc5eUxuQmxjbTFwYzNOcGIyNXpMbkYxWlhKNUtIc2dibUZ0WlRvZ2NHVnliV2x6YzJsdmJrNWhiV1VnZlNsY2JseDBYSFJjZEZ4MFkyOXVjM1FnYjI1RGFHRnVaMlVnUFNBb1pYWmxiblFwSUQwK0lIdGNibHgwWEhSY2RGeDBYSFJ3WlhKdGFYTnphVzl1VTNSaGRIVnpMbkpsYlc5MlpVVjJaVzUwVEdsemRHVnVaWElvSjJOb1lXNW5aU2NzSUc5dVEyaGhibWRsS1Z4dVhIUmNkRngwWEhSY2RISmxjMjlzZG1WUGNsSmxhbVZqZEVKaGMyVmtUMjVUZEdGMFpTaGxkbVZ1ZEM1MFlYSm5aWFF1YzNSaGRHVXNJSEpsYzI5c2RtVXNJSEpsYW1WamRDbGNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFJ3WlhKdGFYTnphVzl1VTNSaGRIVnpMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJ5WlhOdmJIWmxUM0pTWldwbFkzUkNZWE5sWkU5dVUzUmhkR1VvY0dWeWJXbHpjMmx2YmxOMFlYUjFjeTV6ZEdGMFpTd2djbVZ6YjJ4MlpTd2djbVZxWldOMEtWeHVYSFJjZEZ4MGZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JseDBYSFJjZEZ4MGNtVnFaV04wS0dWeWNtOXlLVnh1WEhSY2RGeDBmVnh1WEhSY2RIMWNibHgwZlNsY2JuMWNibHh1WTI5dWMzUWdjbVZ6YjJ4MlpVOXlVbVZxWldOMFFtRnpaV1JQYmxOMFlYUmxJRDBnS0hOMFlYUmxMQ0J5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JseDBjM2RwZEdOb0lDaHpkR0YwWlNrZ2UxeHVYSFJjZEdOaGMyVWdKMlJsYm1sbFpDYzZYRzVjZEZ4MFhIUnlaV3BsWTNRb2JtVjNJRVJQVFVWNFkyVndkR2x2YmlnblVHVnliV2x6YzJsdmJpQmtaVzVwWldRbkxDQW5UazlVWDBGTVRFOVhSVVJmUlZKU0p5a3BYRzVjZEZ4MFhIUmljbVZoYTF4dVhIUmNkR1JsWm1GMWJIUTZYRzVjZEZ4MFhIUnlaWE52YkhabEtITjBZWFJsS1Z4dVhIUjlYRzU5WEc0aUxDSnBiWEJ2Y25RZ1oyVjBVR1Z5YldsemMybHZiaUJtY205dElDY3VMMmRsZEZCbGNtMXBjM05wYjI0blhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QmhJSEJ5YjIxcGMyVWdjbVZ6YjJ4MlpXUWdkMmhsYmlCMGFHVWdjR1Z5YldsemMybHZiaUJwY3lCbmNtRnVkR1ZrSUdKNUlIUm9aU0IxYzJWeUlHRnVaQ0IwYUdVZ2MzUnlaV0Z0SUdseklISmxkSEpwWlhabFpGeHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ3WVhKaGJTQnRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6SUNBZ0lFTnZibk4wY21GcGJuUnpJRzlpYW1WamRDNGdRSE5sWlNCb2RIUndjem92TDJSbGRtVnNiM0JsY2k1dGIzcHBiR3hoTG05eVp5OWxiaTFWVXk5a2IyTnpMMWRsWWk5QlVFa3ZUV1ZrYVdGVGRISmxZVzFEYjI1emRISmhhVzUwYzF4dUlDb2dRSEpsZEhWeWJuTWdlMUJ5YjIxcGMyVjlYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdGemVXNWpJQ2h3WlhKdGFYTnphVzl1VG1GdFpTd2diV1ZrYVdGVGRISmxZVzFEYjI1emRISmhhVzUwY3lrZ1BUNGdlMXh1WEhSeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEdsbUlDZ2hibUYyYVdkaGRHOXlMbTFsWkdsaFJHVjJhV05sY3lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0c1bGR5QkVUMDFGZUdObGNIUnBiMjRvSjAxbFpHbGhSR1YyYVdObGN5QnViM1FnYzNWd2NHOXlkR1ZrSnl3Z0owNVBWRjlHVDFWT1JGOUZVbEluS1NsY2JseDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBkSEo1SUh0Y2JseDBYSFJjZEZ4MFkyOXVjM1FnV3l3Z2MzUnlaV0Z0WFNBOUlHRjNZV2wwSUZCeWIyMXBjMlV1WVd4c0tGdGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQm5aWFJRWlhKdGFYTnphVzl1S0hCbGNtMXBjM05wYjI1T1lXMWxLU3hjYmx4MFhIUmNkRngwWEhSaGQyRnBkQ0J1WVhacFoyRjBiM0l1YldWa2FXRkVaWFpwWTJWekxtZGxkRlZ6WlhKTlpXUnBZU2h0WldScFlWTjBjbVZoYlVOdmJuTjBjbUZwYm5SektTeGNibHgwWEhSY2RGeDBYU2xjYmx4MFhIUmNkRngwY21WemIyeDJaU2h6ZEhKbFlXMHBYRzVjZEZ4MFhIUjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVYSFJjZEZ4MFhIUnlaV3BsWTNRb1pYSnliM0lwWEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSOUtWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkluQmxjbTFwYzNOcGIyNU9ZVzFsSWl3aVVISnZiV2x6WlNJc0luSmxjMjlzZG1VaUxDSnlaV3BsWTNRaUxDSnVZWFpwWjJGMGIzSWlMQ0p3WlhKdGFYTnphVzl1Y3lJc0lrUlBUVVY0WTJWd2RHbHZiaUlzSW5GMVpYSjVJaXdpYm1GdFpTSXNJbkJsY20xcGMzTnBiMjVUZEdGMGRYTWlMQ0p2YmtOb1lXNW5aU0lzSW1WMlpXNTBJaXdpY21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lJc0luSmxjMjlzZG1WUGNsSmxhbVZqZEVKaGMyVmtUMjVUZEdGMFpTSXNJblJoY21kbGRDSXNJbk4wWVhSbElpd2lZV1JrUlhabGJuUk1hWE4wWlc1bGNpSXNJbTFsWkdsaFUzUnlaV0Z0UTI5dWMzUnlZV2x1ZEhNaUxDSnRaV1JwWVVSbGRtbGpaWE1pTENKblpYUlFaWEp0YVhOemFXOXVJaXdpWjJWMFZYTmxjazFsWkdsaElpd2lZV3hzSWl3aWMzUnlaV0Z0SWwwc0ltMWhjSEJwYm1keklqb2liWGREUVV0QkxHdEVRVUZsTEZkQlFVOUJMRFJIUVVOa0xFbEJRVWxETEc5RVFVRlJMRmRCUVU5RExFVkJRVk5ETERoR1FVTTNRa01zVlVGQlZVTXNORUpCUTJSR0xFVkJRVThzU1VGQlNVY3NZVUZCWVN3MFFrRkJOa0lzYTBWQlIzSkNSaXhWUVVGVlF5eFpRVUZaUlN4TlFVRk5MRU5CUVVWRExFdEJRVTFTTEZkQlFUZEVVeXhUUVVOQlF5eEZRVUZYTEZOQlFWaEJMRVZCUVZsRExFZEJRMnBDUml4RlFVRnBRa2NzYjBKQlFXOUNMRk5CUVZWR0xFZEJReTlEUnl4RlFVRTBRa1lzUlVGQlRVY3NUMEZCVDBNc1RVRkJUMklzUlVGQlUwTXNTVUZGTVVSTkxFVkJRV2xDVHl4cFFrRkJhVUlzVTBGQlZVNHNSMEZETlVOSExFVkJRVFJDU2l4RlFVRnBRazBzVFVGQlQySXNSVUZCVTBNc2NVUkJSVGRFUVN3MlRrRk5SVlVzUlVGQk9FSXNVMEZCUTBVc1JVRkJUMklzUlVGQlUwTXNWVUZETlVOWkxFOUJRMFlzVTBGRFNsb3NSVUZCVHl4SlFVRkpSeXhoUVVGaExHOUNRVUZ4UWl4clEwRkhOME5LTEVWQlFWRmhMRzFFUTNaQ1NTeFhRVUZQWml4RlFVRm5RbWxDTERSSFFVTTVRaXhKUVVGSmFFSXNiMFJCUVZFc1YwRkJUME1zUlVGQlUwTXNaMGRCUXpkQ1F5eFZRVUZWWXl3MlFrRkRaR1lzUlVGQlR5eEpRVUZKUnl4aFFVRmhMRFpDUVVFNFFpdzRSRUZITlVKTUxHbENRVU5zUW10Q0xFVkJRV051UWl4MVEwRkRaRWtzVlVGQlZXTXNZVUZCWVVVc1lVRkJZVWdzT0VSQlJsWkpMRGhEUVVGNFFrTXNUMEZKVkhCQ0xFVkJRVkZ2UWl4eFJFRkZVbTVDSW4wPVxuIiwiaW1wb3J0IHsgZ2V0VXNlck1lZGlhU3RyZWFtIH0gZnJvbSAnQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscydcblxuY2xhc3MgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIHtcblx0c3RhdGljIGRlZmF1bHRPcHRpb25zID0ge1xuXHRcdGdyYW1tYXJzOiBudWxsLFxuXHRcdGxhbmc6ICdlbi1VUycsXG5cdFx0Y29udGludW91czogZmFsc2UsXG5cdFx0aW50ZXJpbVJlc3VsdHM6IGZhbHNlLFxuXHRcdG1heEFsdGVybmF0aXZlczogMSxcblx0XHRzZXJ2aWNlVVJJOiBudWxsLFxuXHR9XG5cblx0c3RhdGljIGV2ZW50VHlwZXMgPSB7XG5cdFx0QVVESU9fRU5EOiAnYXVkaW9lbmQnLFxuXHRcdEFVRElPX1NUQVJUOiAnYXVkaW9zdGFydCcsXG5cdFx0RU5EOiAnZW5kJyxcblx0XHRFUlJPUjogJ2Vycm9yJyxcblx0XHROT19NQVRDSDogJ25vbWF0Y2gnLFxuXHRcdFJFU1VMVDogJ3Jlc3VsdCcsXG5cdFx0U09VTkRfRU5EOiAnc291bmRlbmQnLFxuXHRcdFNPVU5EX1NUQVJUOiAnc291bmRzdGFydCcsXG5cdFx0U1BFRUNIX0VORDogJ3NwZWVjaGVuZCcsXG5cdFx0U1BFRUNIX1NUQVJUOiAnc3BlZWNoc3RhcnQnLFxuXHRcdFNUQVJUOiAnc3RhcnQnLFxuXHR9XG5cblx0c3RhdGljIGdldCBpc1N1cHBvcnRlZCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ISF3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdCEhd2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHQhIXdpbmRvdy5tb3pTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0ISF3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvblxuXHRcdClcblx0fVxuXG5cdHN0YXRpYyBzZXQgaXNTdXBwb3J0ZWQoXykge1xuXHRcdHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCBzZXQgaXNTdXBwb3J0ZWQgZGlyZWN0bHkuJylcblx0fVxuXG5cdF9pbnN0YW5jZSA9IG51bGxcblx0X2xpc3RlbmVycyA9IG51bGxcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Y29uc3QgU3BlZWNoUmVjb2duaXRpb24gPVxuXHRcdFx0d2luZG93LlNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy5tb3pTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1zU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHt9XG5cdFx0dGhpcy5faW5zdGFuY2UgPSBuZXcgU3BlZWNoUmVjb2duaXRpb24oKVxuXHRcdHRoaXMuX2xpc3RlbmVycyA9IHt9XG5cblx0XHRPYmplY3QuZW50cmllcyh7IC4uLlNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5kZWZhdWx0T3B0aW9ucywgLi4uKG9wdGlvbnMgfHwge30pIH0pLmZvckVhY2goXG5cdFx0XHQoW2tleSwgdmFsdWVdKSA9PiAodGhpcy5faW5zdGFuY2Vba2V5XSA9IHZhbHVlKVxuXHRcdClcblx0fVxuXG5cdGdldCBpbnN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2Vcblx0fVxuXG5cdHNldCBpbnN0YW5jZShfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpbnN0YW5jZSBkaXJlY3RseS4nKVxuXHR9XG5cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IGF3YWl0IGdldFVzZXJNZWRpYVN0cmVhbSgnbWljcm9waG9uZScsIHsgYXVkaW86IHRydWUgfSlcblx0XHRcdFx0aWYgKCFzdHJlYW0pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSB0aGUgc3RyZWFtIGZyb20gbWVkaWEgZGV2aWNlJylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbnN0YW5jZS5zdGFydCgpXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnMuZXJyb3Jcblx0XHRcdFx0aWYgKCEhZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyKGVycm9yKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX2luc3RhbmNlLnN0b3AoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhYm9ydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWJvcnQoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UgJiYgdGhpcy5faW5jbHVkZXNFdmVudFR5cGUodHlwZSkpIHtcblx0XHRcdGlmICghIXRoaXMuX2xpc3RlbmVyc1t0eXBlXSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSlcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRsZXQgYWRkaXRpb25hbEFyZ3MgPSBbXVxuXHRcdFx0XHRpZiAodHlwZSA9PT0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgWy4uLmFkZGl0aW9uYWxBcmdzLCBldmVudF0pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIChlKSA9PiBoYW5kbGVyKGUpKVxuXG5cdFx0XHR0aGlzLl9saXN0ZW5lcnNbdHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbdHlwZV1cblx0XHR0aGlzLl9pbnN0YW5jZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW3R5cGVdXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0Y2xlYW51cCgpIHtcblx0XHR0aGlzLnN0b3AoKVxuXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKS5mb3JFYWNoKChrZXkpID0+IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXkpKVxuXHRcdHRoaXMuX2luc3RhbmNlID0gbnVsbFxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdF9pbmNsdWRlc0V2ZW50VHlwZSA9IChldmVudFR5cGUpID0+XG5cdFx0T2JqZWN0LnZhbHVlcyhTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZXZlbnRUeXBlcykuZmluZCgodHlwZSkgPT4gdHlwZSA9PT0gZXZlbnRUeXBlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXJcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuY29uc3QgTWljcm9waG9uZUljb24gPSAoeyBpY29uQ29sb3IgPSAnYmxhY2snLCBhY3RpdmVDb2xvciA9ICdyZWQnLCBpc0FjdGl2ZSA9IGZhbHNlIH0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuXHRcdFx0PGc+XG5cdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0ZmlsbD17aWNvbkNvbG9yfVxuXHRcdFx0XHRcdGQ9XCJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43elwiXG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0FjdGl2ZSAmJiA8Y2lyY2xlIGZpbGw9e2FjdGl2ZUNvbG9yfSBjeD1cIjE2XCIgY3k9XCI0XCIgcj1cIjRcIiAvPn1cblx0XHRcdDwvZz5cblx0XHQ8L3N2Zz5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBNaWNyb3Bob25lSWNvblxuIiwiaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4vU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5pbXBvcnQgTWljcm9waG9uZUljb24gZnJvbSAnLi9NaWNyb3Bob25lSWNvbidcblxuY29uc3QgVm9jYWwgPSAoe1xuXHRjaGlsZHJlbixcblx0Z3JhbW1hcnMsXG5cdGxhbmcsXG5cdHRpbWVvdXQsXG5cdGFyaWFMYWJlbCxcblx0dGFiSW5kZXgsXG5cdHN0eWxlLFxuXHRjbGFzc05hbWUsXG5cdG9uU3RhcnQsXG5cdG9uRW5kLFxuXHRvblNwZWVjaFN0YXJ0LFxuXHRvblNwZWVjaEVuZCxcblx0b25SZXN1bHQsXG5cdG9uRXJyb3IsXG5cdG9uTm9NYXRjaCxcblx0X19yZWNvZ25pdGlvbkluc3RhbmNlLFxufSkgPT4ge1xuXHRjb25zdCB0aW1lb3V0UmVmID0gdXNlUmVmKG51bGwpXG5cdGNvbnN0IHJlY29nbml0aW9uUmVmID0gdXNlUmVmKG51bGwpXG5cblx0Y29uc3QgW2lzTGlzdGVuaW5nLCBzZXRJc0xpc3RlbmluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWQpIHtcblx0XHRcdHJlY29nbml0aW9uUmVmLmN1cnJlbnQgPSBfX3JlY29nbml0aW9uSW5zdGFuY2UgfHwgbmV3IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlcih7IGdyYW1tYXJzLCBsYW5nIH0pXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRyZWNvZ25pdGlvblJlZi5jdXJyZW50LmFib3J0KClcblx0XHRcdFx0cmVjb2duaXRpb25SZWYuY3VycmVudC5jbGVhbnVwKClcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudClcblx0XHRcdH1cblx0XHR9XG5cdH0sIFtfX3JlY29nbml0aW9uSW5zdGFuY2VdKVxuXG5cdGNvbnN0IHN0YXJ0VGltZXIgPSAoKSA9PiB7XG5cdFx0dGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChfb25FbmQsIHRpbWVvdXQpXG5cdH1cblxuXHRjb25zdCBzdG9wVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudClcblx0XHR0aW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHRjb25zdCBzdGFydFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyh0cnVlKVxuXG5cdFx0XHRjb25zdCB7IGN1cnJlbnQ6IHIgfSA9IHJlY29nbml0aW9uUmVmXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZCcsIF9vbkVuZClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXHRcdFx0ci5zdGFydCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdF9vbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0b3BSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcoZmFsc2UpXG5cblx0XHRcdGNvbnN0IHsgY3VycmVudDogciB9ID0gcmVjb2duaXRpb25SZWZcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBfb25TdGFydClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kJywgX29uRW5kKVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzcGVlY2hzdGFydCcsIF9vblNwZWVjaFN0YXJ0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzcGVlY2hlbmQnLCBfb25TcGVlY2hFbmQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIF9vblJlc3VsdClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBfb25FcnJvcilcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbm9tYXRjaCcsIF9vbk5vTWF0Y2gpXG5cdFx0XHRyLnN0b3AoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHRzdGFydFRpbWVyKClcblx0fVxuXG5cdGNvbnN0IGVuZCA9ICgpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXHRcdHN0b3BSZWNvZ25pdGlvbigpXG5cdH1cblxuXHRjb25zdCBfb25DbGljayA9ICgpID0+IHtcblx0XHRzdGFydFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vblN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdGFydCgpXG5cblx0XHQhIW9uU3RhcnQgJiYgb25TdGFydChlKVxuXHR9XG5cblx0Y29uc3QgX29uRW5kID0gKGUpID0+IHtcblx0XHRlbmQoKVxuXG5cdFx0ISFvbkVuZCAmJiBvbkVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uU3BlZWNoU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cblx0XHQhIW9uU3BlZWNoU3RhcnQgJiYgb25TcGVlY2hTdGFydChlKVxuXHR9XG5cblx0Y29uc3QgX29uU3BlZWNoRW5kID0gKGUpID0+IHtcblx0XHRzdGFydFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hFbmQgJiYgb25TcGVlY2hFbmQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblJlc3VsdCA9IChyZXN1bHQsIGV2ZW50KSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25SZXN1bHQgJiYgb25SZXN1bHQocmVzdWx0LCBldmVudClcblx0fVxuXG5cdGNvbnN0IF9vbkVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHR9XG5cblx0Y29uc3QgX29uTm9NYXRjaCA9IChlKSA9PiB7XG5cdFx0ISFvbk5vTWF0Y2ggJiYgb25Ob01hdGNoKGUpXG5cdH1cblxuXHRjb25zdCBfcmVuZGVyRGVmYXVsdCA9ICgpID0+IChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXRlc3RpZD1cIl9fdm9jYWwtcm9vdF9fXCJcblx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0YXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuXHRcdFx0dGFiSW5kZXg9e3RhYkluZGV4fVxuXHRcdFx0c3R5bGU9e2NsYXNzTmFtZSA/IG51bGwgOiB7IHdpZHRoOiAyNCwgaGVpZ2h0OiAyNCwgY3Vyc29yOiAhaXNMaXN0ZW5pbmcgPyAncG9pbnRlcicgOiBudWxsLCAuLi5zdHlsZSB9fVxuXHRcdFx0Y2xhc3NOYW1lPXtjbGFzc05hbWV9XG5cdFx0PlxuXHRcdFx0PE1pY3JvcGhvbmVJY29uIGlzQWN0aXZlPXtpc0xpc3RlbmluZ30gaWNvbkNvbG9yPVwiI2FhYVwiIC8+XG5cdFx0PC9kaXY+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCAmJlxuXHRcdGNsb25lRWxlbWVudChpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBjaGlsZHJlbiA6IF9yZW5kZXJEZWZhdWx0KCksIHtcblx0XHRcdC4uLighaXNMaXN0ZW5pbmcgJiYgeyBvbkNsaWNrOiBfb25DbGljayB9KSxcblx0XHR9KVxuXHQpXG59XG5cblZvY2FsLnByb3BUeXBlcyA9IHtcblx0LyoqIERlZmluZXMgdGhlIGdyYW1tYXJzIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vZ3JhbW1hcnMpICovXG5cdGdyYW1tYXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgbGFuZ3VhZ2UgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9sYW5nKSAqL1xuXHRsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBkaXNjYXJkaW5nIHRoZSByZWNvZ25pdGlvbiAqL1xuXHR0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSBsYWJlbCBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uICovXG5cdGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGExMXkgdGFiIGluZGV4IGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0dGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBzdHlsZXMgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCBpZiBjbGFzc05hbWUgaXMgbm90IHNwZWNpZmllZCAqL1xuXHRzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblx0LyoqIERlZmluZXMgdGhlIGNsYXNzIG9mIHRoZSBkZWZhdWx0IGVsZW1lbnQgKi9cblx0Y2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gc3RhcnRzICovXG5cdG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gZW5kcyAqL1xuXHRvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggc3RhcnRzICovXG5cdG9uU3BlZWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIGVuZHMgKi9cblx0b25TcGVlY2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHJlc3VsdCBpcyByZXR1cm5lZCBmcm9tIHRlIHJlY29nbml0aW9uICovXG5cdG9uUmVzdWx0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzICovXG5cdG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBubyByZXN1bHQgY2FuIGJlIHJlY29nbml6ZWQgKi9cblx0b25Ob01hdGNoOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuVm9jYWwuZGVmYXVsdFByb3BzID0ge1xuXHRncmFtbWFyczogbnVsbCxcblx0bGFuZzogJ2VuLVVTJyxcblx0dGltZW91dDogMzAwMCxcblx0YXJpYUxhYmVsOiAnc3BlZWNoJyxcblx0dGFiSW5kZXg6IC0xLFxuXHRzdHlsZTogbnVsbCxcblx0Y2xhc3NOYW1lOiBudWxsLFxuXHRvblN0YXJ0OiBudWxsLFxuXHRvbkVuZDogbnVsbCxcblx0b25TcGVlY2hTdGFydDogbnVsbCxcblx0b25TcGVlY2hFbmQ6IG51bGwsXG5cdG9uUmVzdWx0OiBudWxsLFxuXHRvbkVycm9yOiBudWxsLFxuXHRvbk5vTWF0Y2g6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iXSwibmFtZXMiOlsiZSIsInIiLCJ0IiwibiIsImEiLCJpIiwibyIsInUiLCJjIiwidmFsdWUiLCJkb25lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwidGhpcyIsImFyZ3VtZW50cyIsImFwcGx5IiwiQXJyYXkiLCJpc0FycmF5IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJPYmplY3QiLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsInJldHVybiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJUeXBlRXJyb3IiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwid3JhcCIsInByZXYiLCJhYnJ1cHQiLCJuYXZpZ2F0b3IiLCJwZXJtaXNzaW9ucyIsIkRPTUV4Y2VwdGlvbiIsInF1ZXJ5Iiwic2VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0YXJnZXQiLCJzdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0MCIsImNhdGNoIiwic3RvcCIsInMiLCJtZWRpYURldmljZXMiLCJ0MSIsImdldFVzZXJNZWRpYSIsInQyIiwidDMiLCJhbGwiLCJ0NCIsIlNwZWVjaFJlY29nbml0aW9uV3JhcHBlciIsIm9wdGlvbnMiLCJldmVudFR5cGUiLCJ2YWx1ZXMiLCJldmVudFR5cGVzIiwiZmluZCIsInR5cGUiLCJTcGVlY2hSZWNvZ25pdGlvbiIsIndpbmRvdyIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwibW96U3BlZWNoUmVjb2duaXRpb24iLCJtc1NwZWVjaFJlY29nbml0aW9uIiwiX2luc3RhbmNlIiwiX2xpc3RlbmVycyIsImVudHJpZXMiLCJkZWZhdWx0T3B0aW9ucyIsImZvckVhY2giLCJrZXkiLCJfdGhpcyIsIl8iLCJFcnJvciIsImdldFVzZXJNZWRpYVN0cmVhbSIsImF1ZGlvIiwic3RhcnQiLCJlcnJvckhhbmRsZXIiLCJlcnJvciIsImFib3J0IiwiY2FsbGJhY2siLCJfaW5jbHVkZXNFdmVudFR5cGUiLCJoYW5kbGVyIiwiZXZlbnQiLCJhZGRpdGlvbmFsQXJncyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwia2V5cyIsIl90aGlzMyIsImdyYW1tYXJzIiwibGFuZyIsImNvbnRpbnVvdXMiLCJpbnRlcmltUmVzdWx0cyIsIm1heEFsdGVybmF0aXZlcyIsInNlcnZpY2VVUkkiLCJBVURJT19FTkQiLCJBVURJT19TVEFSVCIsIkVORCIsIkVSUk9SIiwiTk9fTUFUQ0giLCJTT1VORF9FTkQiLCJTT1VORF9TVEFSVCIsIlNQRUVDSF9FTkQiLCJTUEVFQ0hfU1RBUlQiLCJTVEFSVCIsIk1pY3JvcGhvbmVJY29uIiwiaWNvbkNvbG9yIiwiYWN0aXZlQ29sb3IiLCJpc0FjdGl2ZSIsIlJlYWN0IiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZCIsImN4IiwiY3kiLCJWb2NhbCIsImNoaWxkcmVuIiwidGltZW91dCIsImFyaWFMYWJlbCIsInRhYkluZGV4Iiwic3R5bGUiLCJjbGFzc05hbWUiLCJvblN0YXJ0Iiwib25FbmQiLCJvblNwZWVjaFN0YXJ0Iiwib25TcGVlY2hFbmQiLCJvblJlc3VsdCIsIm9uRXJyb3IiLCJvbk5vTWF0Y2giLCJfX3JlY29nbml0aW9uSW5zdGFuY2UiLCJ0aW1lb3V0UmVmIiwidXNlUmVmIiwicmVjb2duaXRpb25SZWYiLCJ1c2VTdGF0ZSIsImlzTGlzdGVuaW5nIiwic2V0SXNMaXN0ZW5pbmciLCJ1c2VFZmZlY3QiLCJpc1N1cHBvcnRlZCIsImN1cnJlbnQiLCJjbGVhbnVwIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnRUaW1lciIsInNldFRpbWVvdXQiLCJfb25FbmQiLCJzdG9wVGltZXIiLCJzdG9wUmVjb2duaXRpb24iLCJfb25TdGFydCIsIl9vblNwZWVjaFN0YXJ0IiwiX29uU3BlZWNoRW5kIiwiX29uUmVzdWx0IiwiX29uRXJyb3IiLCJfb25Ob01hdGNoIiwicmVzdWx0IiwiY2xvbmVFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJyb2xlIiwiY3Vyc29yIiwib25DbGljayIsInN0YXJ0UmVjb2duaXRpb24iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJzdHJpbmciLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOHdFQUFBLFNBQVNBLEVBQUVBLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEdBQUcsSUFBSSxJQUFJQyxFQUFFUCxFQUFFSyxHQUFHQyxHQUFHRSxFQUFFRCxFQUFFRSxNQUFNLE1BQU1ULEdBQUcsWUFBWUUsRUFBRUYsR0FBR08sRUFBRUcsS0FBS1QsRUFBRU8sR0FBR0csUUFBUUMsUUFBUUosR0FBR0ssS0FBS1YsRUFBRUMsR0FBRyxTQUFTSCxFQUFFQSxH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
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):(e=e||self)["react-vocal"]=t(e.React,e.PropTypes)}(this,(function(e,t){"use strict";var n="default"in e?e.default:e;function r(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function i(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)}}function o(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function f(e,t,n,r,i,o,a){try{var c=e[o](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,i)}function p(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){f(o,r,i,a,c,"next",e)}function c(e){f(o,r,i,a,c,"throw",e)}a(void 0)}))}}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;var d=function(){var e=p(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=p(regeneratorRuntime.mark((function e(n,r){var i,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.permissions){e.next=4;break}r(new DOMException("Permissions not supported","NOT_FOUND_ERR")),e.next=16;break;case 4:return e.prev=4,e.next=7,navigator.permissions.query({name:t});case 7:i=e.sent,o=function e(t){i.removeEventListener("change",e),m(t.target.state,n,r)},i.addEventListener("change",o),m(i.state,n,r),e.next=16;break;case 13:e.prev=13,e.t0=e.catch(4),r(e.t0);case 16:case"end":return e.stop()}}),e,null,[[4,13]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),m=function(e,t,n){switch(e){case"denied":n(new DOMException("Permission denied","NOT_ALLOWED_ERR"));break;default:t(e)}},y=function(){var e=p(regeneratorRuntime.mark((function e(t,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(){var e=p(regeneratorRuntime.mark((function e(r,i){var o,a,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.mediaDevices){e.next=4;break}i(new DOMException("MediaDevices not supported","NOT_FOUND_ERR")),e.next=24;break;case 4:return e.prev=4,e.t0=Promise,e.next=8,d(t);case 8:return e.t1=e.sent,e.next=11,navigator.mediaDevices.getUserMedia(n);case 11:return e.t2=e.sent,e.t3=[e.t1,e.t2],e.next=15,e.t0.all.call(e.t0,e.t3);case 15:o=e.sent,a=v(o,2),c=a[1],r(c),e.next=24;break;case 21:e.prev=21,e.t4=e.catch(4),i(e.t4);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t,n){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),b=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),a(this,"_instance",null),a(this,"_listeners",null),a(this,"_includesEventType",(function(t){return Object.values(e.eventTypes).find((function(e){return e===t}))}));var r=window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition||{};if(this._instance=new r,this._listeners={},t&&!t.grammars){var i=window.SpeechGrammarList||window.webkitSpeechGrammarList||window.mozSpeechGrammarList||window.msSpeechGrammarList||{};this._instance.grammars=new i}Object.entries(s(s({},e.defaultOptions),t||{})).forEach((function(e){var t=u(e,2),r=t[0],i=t[1];return n._instance[r]=i}))}var t,n;return o(e,null,[{key:"isSupported",get:function(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition||window.mozSpeechRecognition||window.msSpeechRecognition)},set:function(e){throw new Error("You cannot set isSupported directly.")}}]),o(e,[{key:"start",value:(t=regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._instance){e.next=14;break}return e.prev=1,e.next=4,y("microphone",{audio:!0});case 4:if(e.sent){e.next=7;break}throw new Error("Unable to retrieve the stream from media device");case 7:this._instance.start(),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),(t=this._listeners.error)&&t(e.t0);case 14:return e.abrupt("return",this);case 15:case"end":return e.stop()}}),e,this,[[1,10]])})),n=function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function c(e){r(a,i,o,c,s,"next",e)}function s(e){r(a,i,o,c,s,"throw",e)}c(void 0)}))},function(){return n.apply(this,arguments)})},{key:"stop",value:function(){return this._instance&&this._instance.stop(),this}},{key:"abort",value:function(){return this._instance&&this._instance.abort(),this}},{key:"addEventListener",value:function(t,n){var r=this;if(this._instance&&this._includesEventType(t)){this._listeners[t]&&this.removeEventListener(t);var i=function(i){var o=[];t===e.eventTypes.RESULT&&i.results&&i.results.length>0&&o.push(i.results[0][0].transcript),n&&n.apply(r,[].concat(o,[i]))};this._instance.addEventListener(t,(function(e){return i(e)})),this._listeners[t]=i}return this}},{key:"removeEventListener",value:function(e){var t=this._listeners[e];return this._instance.removeEventListener(e,t),delete this._listeners[e],this}},{key:"cleanup",value:function(){var e=this;return this.stop(),Object.keys(this._listeners).forEach((function(t){return e.removeEventListener(t)})),this._instance=null,this}},{key:"instance",get:function(){return this._instance},set:function(e){throw new Error("You cannot set instance directly.")}}]),e}();a(b,"defaultOptions",{grammars:null,lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1,serviceURI:null}),a(b,"eventTypes",{AUDIO_END:"audioend",AUDIO_START:"audiostart",END:"end",ERROR:"error",NO_MATCH:"nomatch",RESULT:"result",SOUND_END:"soundend",SOUND_START:"soundstart",SPEECH_END:"speechend",SPEECH_START:"speechstart",START:"start"});var w=function(e){var t=e.iconColor,r=void 0===t?"black":t,i=e.activeColor,o=void 0===i?"red":i,a=e.isActive,c=void 0!==a&&a;return n.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 24 24"},n.createElement("g",null,n.createElement("path",{fill:r,d:"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"}),c&&n.createElement("circle",{fill:o,cx:"16",cy:"4",r:"4"})))},g=function(t){var r=t.children,i=t.grammars,o=t.lang,a=t.timeout,c=t.ariaLabel,l=t.tabIndex,f=t.style,p=t.className,v=t.onStart,h=t.onEnd,d=t.onSpeechStart,m=t.onSpeechEnd,y=t.onResult,g=t.onError,E=t.onNoMatch,S=t.__recognitionInstance,O=e.useRef(null),_=e.useRef(null),R=u(e.useState(!1),2),x=R[0],L=R[1];e.useEffect((function(){if(b.isSupported)return _.current=S||new b({grammars:i,lang:o}),function(){_.current.abort(),_.current.cleanup(),clearTimeout(O.current)}}),[S]);var k=function(){O.current=setTimeout(A,a)},j=function(){clearTimeout(O.current),O.current=null},T=function(){try{L(!1);var e=_.current;e.removeEventListener("start",P),e.removeEventListener("end",A),e.removeEventListener("speechstart",D),e.removeEventListener("speechend",N),e.removeEventListener("result",U),e.removeEventListener("error",I),e.removeEventListener("nomatch",M),e.stop()}catch(e){g&&g(e)}},P=function(e){k(),v&&v(e)},A=function(e){j(),T(),h&&h(e)},D=function(e){j(),d&&d(e)},N=function(e){k(),m&&m(e)},U=function(e,t){T(),y&&y(e,t)},I=function(e){T(),g&&g(e)},M=function(e){E&&E(e)};return b.isSupported&&e.cloneElement(e.isValidElement(r)?r:n.createElement("div",{"data-testid":"__vocal-root__",role:"button","aria-label":c,tabIndex:l,style:p?null:s({width:24,height:24,cursor:x?null:"pointer"},f),className:p},n.createElement(w,{isActive:x,iconColor:"#aaa"})),s({},!x&&{onClick:function(){!function(){try{L(!0);var e=_.current;e.addEventListener("start",P),e.addEventListener("end",A),e.addEventListener("speechstart",D),e.addEventListener("speechend",N),e.addEventListener("result",U),e.addEventListener("error",I),e.addEventListener("nomatch",M),e.start()}catch(e){I(e)}}()}}))};return g.propTypes={grammars:t.object,lang:t.string,timeout:t.number,ariaLabel:t.string,tabIndex:t.number,style:t.object,className:t.string,onStart:t.func,onEnd:t.func,onSpeechStart:t.func,onSpeechEnd:t.func,onResult:t.func,onError:t.func,onNoMatch:t.func},g.defaultProps={grammars:null,lang:"en-US",timeout:3e3,ariaLabel:"speech",tabIndex:-1,style:null,className:null,onStart:null,onEnd:null,onSpeechStart:null,onSpeechEnd:null,onResult:null,onError:null,onNoMatch:null},g}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudW1kLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscy9kaXN0L2luZGV4LmVzLmpzIiwiLi4vc3JjL1NwZWVjaFJlY29nbml0aW9uV3JhcHBlci5qcyIsIi4uL3NyYy9NaWNyb3Bob25lSWNvbi5qcyIsIi4uL3NyYy9Wb2NhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBlKGUscix0LG4sYSxpLG8pe3RyeXt2YXIgdT1lW2ldKG8pLGM9dS52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0KGUpfXUuZG9uZT9yKGMpOlByb21pc2UucmVzb2x2ZShjKS50aGVuKG4sYSl9ZnVuY3Rpb24gcihyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxpKXt2YXIgbz1yLmFwcGx5KHQsbik7ZnVuY3Rpb24gdShyKXtlKG8sYSxpLHUsYyxcIm5leHRcIixyKX1mdW5jdGlvbiBjKHIpe2UobyxhLGksdSxjLFwidGhyb3dcIixyKX11KHZvaWQgMCl9KSl9fWZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUscil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFN5bWJvbHx8IShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKSlyZXR1cm47dmFyIHQ9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8sdT1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89dS5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKG8udmFsdWUpLCFyfHx0Lmxlbmd0aCE9PXIpO249ITApO31jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT11LnJldHVybnx8dS5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHR9KGUscil8fGZ1bmN0aW9uKGUscil7aWYoIWUpcmV0dXJuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuKGUscik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO1wiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpO2lmKFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbShlKTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG4oZSxyKX0oZSxyKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG4oZSxyKXsobnVsbD09cnx8cj5lLmxlbmd0aCkmJihyPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxuPW5ldyBBcnJheShyKTt0PHI7dCsrKW5bdF09ZVt0XTtyZXR1cm4gbn12YXIgYT1mdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUodCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBlPXIocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixuKXt2YXIgYSxvO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobmF2aWdhdG9yLnBlcm1pc3Npb25zKXtlLm5leHQ9NDticmVha31uKG5ldyBET01FeGNlcHRpb24oXCJQZXJtaXNzaW9ucyBub3Qgc3VwcG9ydGVkXCIsXCJOT1RfRk9VTkRfRVJSXCIpKSxlLm5leHQ9MTY7YnJlYWs7Y2FzZSA0OnJldHVybiBlLnByZXY9NCxlLm5leHQ9NyxuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoe25hbWU6dH0pO2Nhc2UgNzphPWUuc2VudCxvPWZ1bmN0aW9uIGUodCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsZSksaSh0LnRhcmdldC5zdGF0ZSxyLG4pfSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixvKSxpKGEuc3RhdGUscixuKSxlLm5leHQ9MTY7YnJlYWs7Y2FzZSAxMzplLnByZXY9MTMsZS50MD1lLmNhdGNoKDQpLG4oZS50MCk7Y2FzZSAxNjpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNCwxM11dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpO2Nhc2UgMTpjYXNlXCJlbmRcIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGk9ZnVuY3Rpb24oZSxyLHQpe3N3aXRjaChlKXtjYXNlXCJkZW5pZWRcIjp0KG5ldyBET01FeGNlcHRpb24oXCJQZXJtaXNzaW9uIGRlbmllZFwiLFwiTk9UX0FMTE9XRURfRVJSXCIpKTticmVhaztkZWZhdWx0OnIoZSl9fSxvPWZ1bmN0aW9uKCl7dmFyIGU9cihyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZShuLGkpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KFwicmV0dXJuXCIsbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZT1yKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbyl7dmFyIHUsYyxzO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyl7ZS5uZXh0PTQ7YnJlYWt9byhuZXcgRE9NRXhjZXB0aW9uKFwiTWVkaWFEZXZpY2VzIG5vdCBzdXBwb3J0ZWRcIixcIk5PVF9GT1VORF9FUlJcIikpLGUubmV4dD0yNDticmVhaztjYXNlIDQ6cmV0dXJuIGUucHJldj00LGUudDA9UHJvbWlzZSxlLm5leHQ9OCxhKG4pO2Nhc2UgODpyZXR1cm4gZS50MT1lLnNlbnQsZS5uZXh0PTExLG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGkpO2Nhc2UgMTE6cmV0dXJuIGUudDI9ZS5zZW50LGUudDM9W2UudDEsZS50Ml0sZS5uZXh0PTE1LGUudDAuYWxsLmNhbGwoZS50MCxlLnQzKTtjYXNlIDE1OnU9ZS5zZW50LGM9dCh1LDIpLHM9Y1sxXSxyKHMpLGUubmV4dD0yNDticmVhaztjYXNlIDIxOmUucHJldj0yMSxlLnQ0PWUuY2F0Y2goNCksbyhlLnQ0KTtjYXNlIDI0OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDIxXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24ocix0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHIsdCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtleHBvcnR7YSBhcyBnZXRQZXJtaXNzaW9uLG8gYXMgZ2V0VXNlck1lZGlhU3RyZWFtfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3VaWE11YW5NaUxDSnpiM1Z5WTJWeklqcGJJaTR1TDNOeVl5OW5aWFJRWlhKdGFYTnphVzl1TG1weklpd2lMaTR2YzNKakwyZGxkRlZ6WlhKTlpXUnBZVk4wY21WaGJTNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUZKbGRIVnlibk1nWVNCd2NtOXRhWE5sSUhKbGMyOXNkbVZrSUhkb1pXNGdkR2hsSUhCbGNtMXBjM05wYjI0Z2FYTWdaM0poYm5SbFpDQmllU0IwYUdVZ2RYTmxjbHh1SUNvZ1FIQmhjbUZ0SUhCbGNtMXBjM05wYjI1T1lXMWxJQ0FnSUNBZ0lDQWdJQ0FnVG1GdFpTQnZaaUIwYUdVZ2NHVnliV2x6YzJsdmJpNGdRSE5sWlNCb2RIUndjem92TDNjell5NW5hWFJvZFdJdWFXOHZjR1Z5YldsemMybHZibk12STJWdWRXMWtaV1l0Y0dWeWJXbHpjMmx2Ym01aGJXVmNiaUFxSUVCeVpYUjFjbTV6SUh0UWNtOXRhWE5sZlZ4dUlDb3ZYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmhjM2x1WXlBb2NHVnliV2x6YzJsdmJrNWhiV1VwSUQwK0lIdGNibHgwY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0dGemVXNWpJQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JseDBYSFJwWmlBb0lXNWhkbWxuWVhSdmNpNXdaWEp0YVhOemFXOXVjeWtnZTF4dVhIUmNkRngwY21WcVpXTjBLRzVsZHlCRVQwMUZlR05sY0hScGIyNG9KMUJsY20xcGMzTnBiMjV6SUc1dmRDQnpkWEJ3YjNKMFpXUW5MQ0FuVGs5VVgwWlBWVTVFWDBWU1VpY3BLVnh1WEhSY2RIMGdaV3h6WlNCN1hHNWNkRngwWEhSMGNua2dlMXh1WEhSY2RGeDBYSFJqYjI1emRDQndaWEp0YVhOemFXOXVVM1JoZEhWeklEMGdZWGRoYVhRZ2JtRjJhV2RoZEc5eUxuQmxjbTFwYzNOcGIyNXpMbkYxWlhKNUtIc2dibUZ0WlRvZ2NHVnliV2x6YzJsdmJrNWhiV1VnZlNsY2JseDBYSFJjZEZ4MFkyOXVjM1FnYjI1RGFHRnVaMlVnUFNBb1pYWmxiblFwSUQwK0lIdGNibHgwWEhSY2RGeDBYSFJ3WlhKdGFYTnphVzl1VTNSaGRIVnpMbkpsYlc5MlpVVjJaVzUwVEdsemRHVnVaWElvSjJOb1lXNW5aU2NzSUc5dVEyaGhibWRsS1Z4dVhIUmNkRngwWEhSY2RISmxjMjlzZG1WUGNsSmxhbVZqZEVKaGMyVmtUMjVUZEdGMFpTaGxkbVZ1ZEM1MFlYSm5aWFF1YzNSaGRHVXNJSEpsYzI5c2RtVXNJSEpsYW1WamRDbGNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFJ3WlhKdGFYTnphVzl1VTNSaGRIVnpMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9KMk5vWVc1blpTY3NJRzl1UTJoaGJtZGxLVnh1WEhSY2RGeDBYSFJ5WlhOdmJIWmxUM0pTWldwbFkzUkNZWE5sWkU5dVUzUmhkR1VvY0dWeWJXbHpjMmx2YmxOMFlYUjFjeTV6ZEdGMFpTd2djbVZ6YjJ4MlpTd2djbVZxWldOMEtWeHVYSFJjZEZ4MGZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JseDBYSFJjZEZ4MGNtVnFaV04wS0dWeWNtOXlLVnh1WEhSY2RGeDBmVnh1WEhSY2RIMWNibHgwZlNsY2JuMWNibHh1WTI5dWMzUWdjbVZ6YjJ4MlpVOXlVbVZxWldOMFFtRnpaV1JQYmxOMFlYUmxJRDBnS0hOMFlYUmxMQ0J5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JseDBjM2RwZEdOb0lDaHpkR0YwWlNrZ2UxeHVYSFJjZEdOaGMyVWdKMlJsYm1sbFpDYzZYRzVjZEZ4MFhIUnlaV3BsWTNRb2JtVjNJRVJQVFVWNFkyVndkR2x2YmlnblVHVnliV2x6YzJsdmJpQmtaVzVwWldRbkxDQW5UazlVWDBGTVRFOVhSVVJmUlZKU0p5a3BYRzVjZEZ4MFhIUmljbVZoYTF4dVhIUmNkR1JsWm1GMWJIUTZYRzVjZEZ4MFhIUnlaWE52YkhabEtITjBZWFJsS1Z4dVhIUjlYRzU5WEc0aUxDSnBiWEJ2Y25RZ1oyVjBVR1Z5YldsemMybHZiaUJtY205dElDY3VMMmRsZEZCbGNtMXBjM05wYjI0blhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QmhJSEJ5YjIxcGMyVWdjbVZ6YjJ4MlpXUWdkMmhsYmlCMGFHVWdjR1Z5YldsemMybHZiaUJwY3lCbmNtRnVkR1ZrSUdKNUlIUm9aU0IxYzJWeUlHRnVaQ0IwYUdVZ2MzUnlaV0Z0SUdseklISmxkSEpwWlhabFpGeHVJQ29nUUhCaGNtRnRJSEJsY20xcGMzTnBiMjVPWVcxbElDQWdJQ0FnSUNBZ0lDQWdUbUZ0WlNCdlppQjBhR1VnY0dWeWJXbHpjMmx2Ymk0Z1FITmxaU0JvZEhSd2N6b3ZMM2N6WXk1bmFYUm9kV0l1YVc4dmNHVnliV2x6YzJsdmJuTXZJMlZ1ZFcxa1pXWXRjR1Z5YldsemMybHZibTVoYldWY2JpQXFJRUJ3WVhKaGJTQnRaV1JwWVZOMGNtVmhiVU52Ym5OMGNtRnBiblJ6SUNBZ0lFTnZibk4wY21GcGJuUnpJRzlpYW1WamRDNGdRSE5sWlNCb2RIUndjem92TDJSbGRtVnNiM0JsY2k1dGIzcHBiR3hoTG05eVp5OWxiaTFWVXk5a2IyTnpMMWRsWWk5QlVFa3ZUV1ZrYVdGVGRISmxZVzFEYjI1emRISmhhVzUwYzF4dUlDb2dRSEpsZEhWeWJuTWdlMUJ5YjIxcGMyVjlYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdGemVXNWpJQ2h3WlhKdGFYTnphVzl1VG1GdFpTd2diV1ZrYVdGVGRISmxZVzFEYjI1emRISmhhVzUwY3lrZ1BUNGdlMXh1WEhSeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVYSFJjZEdsbUlDZ2hibUYyYVdkaGRHOXlMbTFsWkdsaFJHVjJhV05sY3lrZ2UxeHVYSFJjZEZ4MGNtVnFaV04wS0c1bGR5QkVUMDFGZUdObGNIUnBiMjRvSjAxbFpHbGhSR1YyYVdObGN5QnViM1FnYzNWd2NHOXlkR1ZrSnl3Z0owNVBWRjlHVDFWT1JGOUZVbEluS1NsY2JseDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBkSEo1SUh0Y2JseDBYSFJjZEZ4MFkyOXVjM1FnV3l3Z2MzUnlaV0Z0WFNBOUlHRjNZV2wwSUZCeWIyMXBjMlV1WVd4c0tGdGNibHgwWEhSY2RGeDBYSFJoZDJGcGRDQm5aWFJRWlhKdGFYTnphVzl1S0hCbGNtMXBjM05wYjI1T1lXMWxLU3hjYmx4MFhIUmNkRngwWEhSaGQyRnBkQ0J1WVhacFoyRjBiM0l1YldWa2FXRkVaWFpwWTJWekxtZGxkRlZ6WlhKTlpXUnBZU2h0WldScFlWTjBjbVZoYlVOdmJuTjBjbUZwYm5SektTeGNibHgwWEhSY2RGeDBYU2xjYmx4MFhIUmNkRngwY21WemIyeDJaU2h6ZEhKbFlXMHBYRzVjZEZ4MFhIUjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVYSFJjZEZ4MFhIUnlaV3BsWTNRb1pYSnliM0lwWEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSOUtWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkluQmxjbTFwYzNOcGIyNU9ZVzFsSWl3aVVISnZiV2x6WlNJc0luSmxjMjlzZG1VaUxDSnlaV3BsWTNRaUxDSnVZWFpwWjJGMGIzSWlMQ0p3WlhKdGFYTnphVzl1Y3lJc0lrUlBUVVY0WTJWd2RHbHZiaUlzSW5GMVpYSjVJaXdpYm1GdFpTSXNJbkJsY20xcGMzTnBiMjVUZEdGMGRYTWlMQ0p2YmtOb1lXNW5aU0lzSW1WMlpXNTBJaXdpY21WdGIzWmxSWFpsYm5STWFYTjBaVzVsY2lJc0luSmxjMjlzZG1WUGNsSmxhbVZqZEVKaGMyVmtUMjVUZEdGMFpTSXNJblJoY21kbGRDSXNJbk4wWVhSbElpd2lZV1JrUlhabGJuUk1hWE4wWlc1bGNpSXNJbTFsWkdsaFUzUnlaV0Z0UTI5dWMzUnlZV2x1ZEhNaUxDSnRaV1JwWVVSbGRtbGpaWE1pTENKblpYUlFaWEp0YVhOemFXOXVJaXdpWjJWMFZYTmxjazFsWkdsaElpd2lZV3hzSWl3aWMzUnlaV0Z0SWwwc0ltMWhjSEJwYm1keklqb2liWGREUVV0QkxHdEVRVUZsTEZkQlFVOUJMRFJIUVVOa0xFbEJRVWxETEc5RVFVRlJMRmRCUVU5RExFVkJRVk5ETERoR1FVTTNRa01zVlVGQlZVTXNORUpCUTJSR0xFVkJRVThzU1VGQlNVY3NZVUZCWVN3MFFrRkJOa0lzYTBWQlIzSkNSaXhWUVVGVlF5eFpRVUZaUlN4TlFVRk5MRU5CUVVWRExFdEJRVTFTTEZkQlFUZEVVeXhUUVVOQlF5eEZRVUZYTEZOQlFWaEJMRVZCUVZsRExFZEJRMnBDUml4RlFVRnBRa2NzYjBKQlFXOUNMRk5CUVZWR0xFZEJReTlEUnl4RlFVRTBRa1lzUlVGQlRVY3NUMEZCVDBNc1RVRkJUMklzUlVGQlUwTXNTVUZGTVVSTkxFVkJRV2xDVHl4cFFrRkJhVUlzVTBGQlZVNHNSMEZETlVOSExFVkJRVFJDU2l4RlFVRnBRazBzVFVGQlQySXNSVUZCVTBNc2NVUkJSVGRFUVN3MlRrRk5SVlVzUlVGQk9FSXNVMEZCUTBVc1JVRkJUMklzUlVGQlUwTXNWVUZETlVOWkxFOUJRMFlzVTBGRFNsb3NSVUZCVHl4SlFVRkpSeXhoUVVGaExHOUNRVUZ4UWl4clEwRkhOME5LTEVWQlFWRmhMRzFFUTNaQ1NTeFhRVUZQWml4RlFVRm5RbWxDTERSSFFVTTVRaXhKUVVGSmFFSXNiMFJCUVZFc1YwRkJUME1zUlVGQlUwTXNaMGRCUXpkQ1F5eFZRVUZWWXl3MlFrRkRaR1lzUlVGQlR5eEpRVUZKUnl4aFFVRmhMRFpDUVVFNFFpdzRSRUZITlVKTUxHbENRVU5zUW10Q0xFVkJRV051UWl4MVEwRkRaRWtzVlVGQlZXTXNZVUZCWVVVc1lVRkJZVWdzT0VSQlJsWkpMRGhEUVVGNFFrTXNUMEZKVkhCQ0xFVkJRVkZ2UWl4eFJFRkZVbTVDSW4wPVxuIiwiaW1wb3J0IHsgZ2V0VXNlck1lZGlhU3RyZWFtIH0gZnJvbSAnQHVudGVtcHMvdXNlci1wZXJtaXNzaW9ucy11dGlscydcblxuY2xhc3MgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIHtcblx0c3RhdGljIGRlZmF1bHRPcHRpb25zID0ge1xuXHRcdGdyYW1tYXJzOiBudWxsLFxuXHRcdGxhbmc6ICdlbi1VUycsXG5cdFx0Y29udGludW91czogZmFsc2UsXG5cdFx0aW50ZXJpbVJlc3VsdHM6IGZhbHNlLFxuXHRcdG1heEFsdGVybmF0aXZlczogMSxcblx0XHRzZXJ2aWNlVVJJOiBudWxsLFxuXHR9XG5cblx0c3RhdGljIGV2ZW50VHlwZXMgPSB7XG5cdFx0QVVESU9fRU5EOiAnYXVkaW9lbmQnLFxuXHRcdEFVRElPX1NUQVJUOiAnYXVkaW9zdGFydCcsXG5cdFx0RU5EOiAnZW5kJyxcblx0XHRFUlJPUjogJ2Vycm9yJyxcblx0XHROT19NQVRDSDogJ25vbWF0Y2gnLFxuXHRcdFJFU1VMVDogJ3Jlc3VsdCcsXG5cdFx0U09VTkRfRU5EOiAnc291bmRlbmQnLFxuXHRcdFNPVU5EX1NUQVJUOiAnc291bmRzdGFydCcsXG5cdFx0U1BFRUNIX0VORDogJ3NwZWVjaGVuZCcsXG5cdFx0U1BFRUNIX1NUQVJUOiAnc3BlZWNoc3RhcnQnLFxuXHRcdFNUQVJUOiAnc3RhcnQnLFxuXHR9XG5cblx0c3RhdGljIGdldCBpc1N1cHBvcnRlZCgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ISF3aW5kb3cuU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdCEhd2luZG93LndlYmtpdFNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHQhIXdpbmRvdy5tb3pTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0ISF3aW5kb3cubXNTcGVlY2hSZWNvZ25pdGlvblxuXHRcdClcblx0fVxuXG5cdHN0YXRpYyBzZXQgaXNTdXBwb3J0ZWQoXykge1xuXHRcdHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCBzZXQgaXNTdXBwb3J0ZWQgZGlyZWN0bHkuJylcblx0fVxuXG5cdF9pbnN0YW5jZSA9IG51bGxcblx0X2xpc3RlbmVycyA9IG51bGxcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Y29uc3QgU3BlZWNoUmVjb2duaXRpb24gPVxuXHRcdFx0d2luZG93LlNwZWVjaFJlY29nbml0aW9uIHx8XG5cdFx0XHR3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHdpbmRvdy5tb3pTcGVlY2hSZWNvZ25pdGlvbiB8fFxuXHRcdFx0d2luZG93Lm1zU3BlZWNoUmVjb2duaXRpb24gfHxcblx0XHRcdHt9XG5cdFx0dGhpcy5faW5zdGFuY2UgPSBuZXcgU3BlZWNoUmVjb2duaXRpb24oKVxuXHRcdHRoaXMuX2xpc3RlbmVycyA9IHt9XG5cblx0XHRpZighIW9wdGlvbnMgJiYgIW9wdGlvbnMuZ3JhbW1hcnMpIHtcblx0XHRcdGNvbnN0IFNwZWVjaEdyYW1tYXJMaXN0ID1cblx0XHRcdFx0d2luZG93LlNwZWVjaEdyYW1tYXJMaXN0IHx8XG5cdFx0XHRcdHdpbmRvdy53ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCB8fFxuXHRcdFx0XHR3aW5kb3cubW96U3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdFx0d2luZG93Lm1zU3BlZWNoR3JhbW1hckxpc3QgfHxcblx0XHRcdFx0e31cblx0XHRcdHRoaXMuX2luc3RhbmNlLmdyYW1tYXJzID0gbmV3IFNwZWVjaEdyYW1tYXJMaXN0KClcblx0XHR9XG5cblx0XHRPYmplY3QuZW50cmllcyh7IC4uLlNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5kZWZhdWx0T3B0aW9ucywgLi4uKG9wdGlvbnMgfHwge30pIH0pLmZvckVhY2goXG5cdFx0XHQoW2tleSwgdmFsdWVdKSA9PiAodGhpcy5faW5zdGFuY2Vba2V5XSA9IHZhbHVlKVxuXHRcdClcblx0fVxuXG5cdGdldCBpbnN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5zdGFuY2Vcblx0fVxuXG5cdHNldCBpbnN0YW5jZShfKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IHNldCBpbnN0YW5jZSBkaXJlY3RseS4nKVxuXHR9XG5cblx0YXN5bmMgc3RhcnQoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0cmVhbSA9IGF3YWl0IGdldFVzZXJNZWRpYVN0cmVhbSgnbWljcm9waG9uZScsIHsgYXVkaW86IHRydWUgfSlcblx0XHRcdFx0aWYgKCFzdHJlYW0pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSB0aGUgc3RyZWFtIGZyb20gbWVkaWEgZGV2aWNlJylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9pbnN0YW5jZS5zdGFydCgpXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnMuZXJyb3Jcblx0XHRcdFx0aWYgKCEhZXJyb3JIYW5kbGVyKSB7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyKGVycm9yKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX2luc3RhbmNlLnN0b3AoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhYm9ydCgpIHtcblx0XHRpZiAoISF0aGlzLl9pbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5faW5zdGFuY2UuYWJvcnQoKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG5cdFx0aWYgKCEhdGhpcy5faW5zdGFuY2UgJiYgdGhpcy5faW5jbHVkZXNFdmVudFR5cGUodHlwZSkpIHtcblx0XHRcdGlmICghIXRoaXMuX2xpc3RlbmVyc1t0eXBlXSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSlcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRsZXQgYWRkaXRpb25hbEFyZ3MgPSBbXVxuXHRcdFx0XHRpZiAodHlwZSA9PT0gU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyLmV2ZW50VHlwZXMuUkVTVUxUKSB7XG5cdFx0XHRcdFx0aWYgKCEhZXZlbnQucmVzdWx0cyAmJiBldmVudC5yZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxBcmdzLnB1c2goZXZlbnQucmVzdWx0c1swXVswXS50cmFuc2NyaXB0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCEhY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkodGhpcywgWy4uLmFkZGl0aW9uYWxBcmdzLCBldmVudF0pXG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9pbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIChlKSA9PiBoYW5kbGVyKGUpKVxuXG5cdFx0XHR0aGlzLl9saXN0ZW5lcnNbdHlwZV0gPSBoYW5kbGVyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSkge1xuXHRcdGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9saXN0ZW5lcnNbdHlwZV1cblx0XHR0aGlzLl9pbnN0YW5jZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIpXG5cblx0XHRkZWxldGUgdGhpcy5fbGlzdGVuZXJzW3R5cGVdXG5cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0Y2xlYW51cCgpIHtcblx0XHR0aGlzLnN0b3AoKVxuXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKS5mb3JFYWNoKChrZXkpID0+IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXkpKVxuXHRcdHRoaXMuX2luc3RhbmNlID0gbnVsbFxuXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdF9pbmNsdWRlc0V2ZW50VHlwZSA9IChldmVudFR5cGUpID0+XG5cdFx0T2JqZWN0LnZhbHVlcyhTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuZXZlbnRUeXBlcykuZmluZCgodHlwZSkgPT4gdHlwZSA9PT0gZXZlbnRUeXBlKVxufVxuXG5leHBvcnQgZGVmYXVsdCBTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXJcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuY29uc3QgTWljcm9waG9uZUljb24gPSAoeyBpY29uQ29sb3IgPSAnYmxhY2snLCBhY3RpdmVDb2xvciA9ICdyZWQnLCBpc0FjdGl2ZSA9IGZhbHNlIH0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuXHRcdFx0PGc+XG5cdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0ZmlsbD17aWNvbkNvbG9yfVxuXHRcdFx0XHRcdGQ9XCJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43elwiXG5cdFx0XHRcdC8+XG5cdFx0XHRcdHtpc0FjdGl2ZSAmJiA8Y2lyY2xlIGZpbGw9e2FjdGl2ZUNvbG9yfSBjeD1cIjE2XCIgY3k9XCI0XCIgcj1cIjRcIiAvPn1cblx0XHRcdDwvZz5cblx0XHQ8L3N2Zz5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBNaWNyb3Bob25lSWNvblxuIiwiaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5pbXBvcnQgU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyIGZyb20gJy4vU3BlZWNoUmVjb2duaXRpb25XcmFwcGVyJ1xuXG5pbXBvcnQgTWljcm9waG9uZUljb24gZnJvbSAnLi9NaWNyb3Bob25lSWNvbidcblxuY29uc3QgVm9jYWwgPSAoe1xuXHRjaGlsZHJlbixcblx0Z3JhbW1hcnMsXG5cdGxhbmcsXG5cdHRpbWVvdXQsXG5cdGFyaWFMYWJlbCxcblx0dGFiSW5kZXgsXG5cdHN0eWxlLFxuXHRjbGFzc05hbWUsXG5cdG9uU3RhcnQsXG5cdG9uRW5kLFxuXHRvblNwZWVjaFN0YXJ0LFxuXHRvblNwZWVjaEVuZCxcblx0b25SZXN1bHQsXG5cdG9uRXJyb3IsXG5cdG9uTm9NYXRjaCxcblx0X19yZWNvZ25pdGlvbkluc3RhbmNlLFxufSkgPT4ge1xuXHRjb25zdCB0aW1lb3V0UmVmID0gdXNlUmVmKG51bGwpXG5cdGNvbnN0IHJlY29nbml0aW9uUmVmID0gdXNlUmVmKG51bGwpXG5cblx0Y29uc3QgW2lzTGlzdGVuaW5nLCBzZXRJc0xpc3RlbmluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChTcGVlY2hSZWNvZ25pdGlvbldyYXBwZXIuaXNTdXBwb3J0ZWQpIHtcblx0XHRcdHJlY29nbml0aW9uUmVmLmN1cnJlbnQgPSBfX3JlY29nbml0aW9uSW5zdGFuY2UgfHwgbmV3IFNwZWVjaFJlY29nbml0aW9uV3JhcHBlcih7IGdyYW1tYXJzLCBsYW5nIH0pXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRyZWNvZ25pdGlvblJlZi5jdXJyZW50LmFib3J0KClcblx0XHRcdFx0cmVjb2duaXRpb25SZWYuY3VycmVudC5jbGVhbnVwKClcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudClcblx0XHRcdH1cblx0XHR9XG5cdH0sIFtfX3JlY29nbml0aW9uSW5zdGFuY2VdKVxuXG5cdGNvbnN0IHN0YXJ0VGltZXIgPSAoKSA9PiB7XG5cdFx0dGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChfb25FbmQsIHRpbWVvdXQpXG5cdH1cblxuXHRjb25zdCBzdG9wVGltZXIgPSAoKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudClcblx0XHR0aW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHRjb25zdCBzdGFydFJlY29nbml0aW9uID0gKCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRzZXRJc0xpc3RlbmluZyh0cnVlKVxuXG5cdFx0XHRjb25zdCB7IGN1cnJlbnQ6IHIgfSA9IHJlY29nbml0aW9uUmVmXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXJ0JywgX29uU3RhcnQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZCcsIF9vbkVuZClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3BlZWNoc3RhcnQnLCBfb25TcGVlY2hTdGFydClcblx0XHRcdHIuYWRkRXZlbnRMaXN0ZW5lcignc3BlZWNoZW5kJywgX29uU3BlZWNoRW5kKVxuXHRcdFx0ci5hZGRFdmVudExpc3RlbmVyKCdyZXN1bHQnLCBfb25SZXN1bHQpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgX29uRXJyb3IpXG5cdFx0XHRyLmFkZEV2ZW50TGlzdGVuZXIoJ25vbWF0Y2gnLCBfb25Ob01hdGNoKVxuXHRcdFx0ci5zdGFydCgpXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdF9vbkVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHN0b3BSZWNvZ25pdGlvbiA9ICgpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0c2V0SXNMaXN0ZW5pbmcoZmFsc2UpXG5cblx0XHRcdGNvbnN0IHsgY3VycmVudDogciB9ID0gcmVjb2duaXRpb25SZWZcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBfb25TdGFydClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kJywgX29uRW5kKVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzcGVlY2hzdGFydCcsIF9vblNwZWVjaFN0YXJ0KVxuXHRcdFx0ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzcGVlY2hlbmQnLCBfb25TcGVlY2hFbmQpXG5cdFx0XHRyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc3VsdCcsIF9vblJlc3VsdClcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBfb25FcnJvcilcblx0XHRcdHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbm9tYXRjaCcsIF9vbk5vTWF0Y2gpXG5cdFx0XHRyLnN0b3AoKVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHQhIW9uRXJyb3IgJiYgb25FcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHRzdGFydFRpbWVyKClcblx0fVxuXG5cdGNvbnN0IGVuZCA9ICgpID0+IHtcblx0XHRzdG9wVGltZXIoKVxuXHRcdHN0b3BSZWNvZ25pdGlvbigpXG5cdH1cblxuXHRjb25zdCBfb25DbGljayA9ICgpID0+IHtcblx0XHRzdGFydFJlY29nbml0aW9uKClcblx0fVxuXG5cdGNvbnN0IF9vblN0YXJ0ID0gKGUpID0+IHtcblx0XHRzdGFydCgpXG5cblx0XHQhIW9uU3RhcnQgJiYgb25TdGFydChlKVxuXHR9XG5cblx0Y29uc3QgX29uRW5kID0gKGUpID0+IHtcblx0XHRlbmQoKVxuXG5cdFx0ISFvbkVuZCAmJiBvbkVuZChlKVxuXHR9XG5cblx0Y29uc3QgX29uU3BlZWNoU3RhcnQgPSAoZSkgPT4ge1xuXHRcdHN0b3BUaW1lcigpXG5cblx0XHQhIW9uU3BlZWNoU3RhcnQgJiYgb25TcGVlY2hTdGFydChlKVxuXHR9XG5cblx0Y29uc3QgX29uU3BlZWNoRW5kID0gKGUpID0+IHtcblx0XHRzdGFydFRpbWVyKClcblxuXHRcdCEhb25TcGVlY2hFbmQgJiYgb25TcGVlY2hFbmQoZSlcblx0fVxuXG5cdGNvbnN0IF9vblJlc3VsdCA9IChyZXN1bHQsIGV2ZW50KSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25SZXN1bHQgJiYgb25SZXN1bHQocmVzdWx0LCBldmVudClcblx0fVxuXG5cdGNvbnN0IF9vbkVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0c3RvcFJlY29nbml0aW9uKClcblxuXHRcdCEhb25FcnJvciAmJiBvbkVycm9yKGVycm9yKVxuXHR9XG5cblx0Y29uc3QgX29uTm9NYXRjaCA9IChlKSA9PiB7XG5cdFx0ISFvbk5vTWF0Y2ggJiYgb25Ob01hdGNoKGUpXG5cdH1cblxuXHRjb25zdCBfcmVuZGVyRGVmYXVsdCA9ICgpID0+IChcblx0XHQ8ZGl2XG5cdFx0XHRkYXRhLXRlc3RpZD1cIl9fdm9jYWwtcm9vdF9fXCJcblx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0YXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuXHRcdFx0dGFiSW5kZXg9e3RhYkluZGV4fVxuXHRcdFx0c3R5bGU9e2NsYXNzTmFtZSA/IG51bGwgOiB7IHdpZHRoOiAyNCwgaGVpZ2h0OiAyNCwgY3Vyc29yOiAhaXNMaXN0ZW5pbmcgPyAncG9pbnRlcicgOiBudWxsLCAuLi5zdHlsZSB9fVxuXHRcdFx0Y2xhc3NOYW1lPXtjbGFzc05hbWV9XG5cdFx0PlxuXHRcdFx0PE1pY3JvcGhvbmVJY29uIGlzQWN0aXZlPXtpc0xpc3RlbmluZ30gaWNvbkNvbG9yPVwiI2FhYVwiIC8+XG5cdFx0PC9kaXY+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdFNwZWVjaFJlY29nbml0aW9uV3JhcHBlci5pc1N1cHBvcnRlZCAmJlxuXHRcdGNsb25lRWxlbWVudChpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyBjaGlsZHJlbiA6IF9yZW5kZXJEZWZhdWx0KCksIHtcblx0XHRcdC4uLighaXNMaXN0ZW5pbmcgJiYgeyBvbkNsaWNrOiBfb25DbGljayB9KSxcblx0XHR9KVxuXHQpXG59XG5cblZvY2FsLnByb3BUeXBlcyA9IHtcblx0LyoqIERlZmluZXMgdGhlIGdyYW1tYXJzIHVuZGVyc3Rvb2QgYnkgdGhlIHJlY29nbml0aW9uIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24vZ3JhbW1hcnMpICovXG5cdGdyYW1tYXJzOiBQcm9wVHlwZXMub2JqZWN0LFxuXHQvKiogRGVmaW5lcyB0aGUgbGFuZ3VhZ2UgdW5kZXJzdG9vZCBieSB0aGUgcmVjb2duaXRpb24gKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9sYW5nKSAqL1xuXHRsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBkaXNjYXJkaW5nIHRoZSByZWNvZ25pdGlvbiAqL1xuXHR0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHQvKiogRGVmaW5lcyB0aGUgYTExeSBsYWJlbCBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uICovXG5cdGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblx0LyoqIERlZmluZXMgdGhlIGExMXkgdGFiIGluZGV4IGZvciB0aGUgZGVmYXVsdCBidXR0b24gKi9cblx0dGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdC8qKiBEZWZpbmVzIHRoZSBzdHlsZXMgb2YgdGhlIGRlZmF1bHQgZWxlbWVudCBpZiBjbGFzc05hbWUgaXMgbm90IHNwZWNpZmllZCAqL1xuXHRzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcblx0LyoqIERlZmluZXMgdGhlIGNsYXNzIG9mIHRoZSBkZWZhdWx0IGVsZW1lbnQgKi9cblx0Y2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gc3RhcnRzICovXG5cdG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXRpb24gZW5kcyAqL1xuXHRvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG5cdC8qKiBEZWZpbmVzIHRoZSBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggc3RhcnRzICovXG5cdG9uU3BlZWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIGVuZHMgKi9cblx0b25TcGVlY2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHJlc3VsdCBpcyByZXR1cm5lZCBmcm9tIHRlIHJlY29nbml0aW9uICovXG5cdG9uUmVzdWx0OiBQcm9wVHlwZXMuZnVuYyxcblx0LyoqIERlZmluZXMgdGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzICovXG5cdG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuXHQvKiogRGVmaW5lcyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBubyByZXN1bHQgY2FuIGJlIHJlY29nbml6ZWQgKi9cblx0b25Ob01hdGNoOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuVm9jYWwuZGVmYXVsdFByb3BzID0ge1xuXHRncmFtbWFyczogbnVsbCxcblx0bGFuZzogJ2VuLVVTJyxcblx0dGltZW91dDogMzAwMCxcblx0YXJpYUxhYmVsOiAnc3BlZWNoJyxcblx0dGFiSW5kZXg6IC0xLFxuXHRzdHlsZTogbnVsbCxcblx0Y2xhc3NOYW1lOiBudWxsLFxuXHRvblN0YXJ0OiBudWxsLFxuXHRvbkVuZDogbnVsbCxcblx0b25TcGVlY2hTdGFydDogbnVsbCxcblx0b25TcGVlY2hFbmQ6IG51bGwsXG5cdG9uUmVzdWx0OiBudWxsLFxuXHRvbkVycm9yOiBudWxsLFxuXHRvbk5vTWF0Y2g6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZvY2FsXG4iXSwibmFtZXMiOlsiZSIsInIiLCJ0IiwibiIsImEiLCJpIiwibyIsInUiLCJjIiwidmFsdWUiLCJkb25lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwidGhpcyIsImFyZ3VtZW50cyIsImFwcGx5IiwiQXJyYXkiLCJpc0FycmF5IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJPYmplY3QiLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsInJldHVybiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJUeXBlRXJyb3IiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwid3JhcCIsInByZXYiLCJhYnJ1cHQiLCJuYXZpZ2F0b3IiLCJwZXJtaXNzaW9ucyIsIkRPTUV4Y2VwdGlvbiIsInF1ZXJ5Iiwic2VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0YXJnZXQiLCJzdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0MCIsImNhdGNoIiwic3RvcCIsInMiLCJtZWRpYURldmljZXMiLCJ0MSIsImdldFVzZXJNZWRpYSIsInQyIiwidDMiLCJhbGwiLCJ0NCIsIlNwZWVjaFJlY29nbml0aW9uV3JhcHBlciIsIm9wdGlvbnMiLCJldmVudFR5cGUiLCJ2YWx1ZXMiLCJldmVudFR5cGVzIiwiZmluZCIsInR5cGUiLCJTcGVlY2hSZWNvZ25pdGlvbiIsIndpbmRvdyIsIndlYmtpdFNwZWVjaFJlY29nbml0aW9uIiwibW96U3BlZWNoUmVjb2duaXRpb24iLCJtc1NwZWVjaFJlY29nbml0aW9uIiwiX2luc3RhbmNlIiwiX2xpc3RlbmVycyIsImdyYW1tYXJzIiwiU3BlZWNoR3JhbW1hckxpc3QiLCJ3ZWJraXRTcGVlY2hHcmFtbWFyTGlzdCIsIm1velNwZWVjaEdyYW1tYXJMaXN0IiwibXNTcGVlY2hHcmFtbWFyTGlzdCIsImVudHJpZXMiLCJkZWZhdWx0T3B0aW9ucyIsImZvckVhY2giLCJrZXkiLCJfdGhpcyIsIl8iLCJFcnJvciIsImdldFVzZXJNZWRpYVN0cmVhbSIsImF1ZGlvIiwic3RhcnQiLCJlcnJvckhhbmRsZXIiLCJlcnJvciIsImFib3J0IiwiY2FsbGJhY2siLCJfaW5jbHVkZXNFdmVudFR5cGUiLCJoYW5kbGVyIiwiZXZlbnQiLCJhZGRpdGlvbmFsQXJncyIsIlJFU1VMVCIsInJlc3VsdHMiLCJ0cmFuc2NyaXB0IiwiX3RoaXMyIiwia2V5cyIsIl90aGlzMyIsImxhbmciLCJjb250aW51b3VzIiwiaW50ZXJpbVJlc3VsdHMiLCJtYXhBbHRlcm5hdGl2ZXMiLCJzZXJ2aWNlVVJJIiwiQVVESU9fRU5EIiwiQVVESU9fU1RBUlQiLCJFTkQiLCJFUlJPUiIsIk5PX01BVENIIiwiU09VTkRfRU5EIiwiU09VTkRfU1RBUlQiLCJTUEVFQ0hfRU5EIiwiU1BFRUNIX1NUQVJUIiwiU1RBUlQiLCJNaWNyb3Bob25lSWNvbiIsImljb25Db2xvciIsImFjdGl2ZUNvbG9yIiwiaXNBY3RpdmUiLCJSZWFjdCIsInhtbG5zIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsImQiLCJjeCIsImN5IiwiVm9jYWwiLCJjaGlsZHJlbiIsInRpbWVvdXQiLCJhcmlhTGFiZWwiLCJ0YWJJbmRleCIsInN0eWxlIiwiY2xhc3NOYW1lIiwib25TdGFydCIsIm9uRW5kIiwib25TcGVlY2hTdGFydCIsIm9uU3BlZWNoRW5kIiwib25SZXN1bHQiLCJvbkVycm9yIiwib25Ob01hdGNoIiwiX19yZWNvZ25pdGlvbkluc3RhbmNlIiwidGltZW91dFJlZiIsInVzZVJlZiIsInJlY29nbml0aW9uUmVmIiwidXNlU3RhdGUiLCJpc0xpc3RlbmluZyIsInNldElzTGlzdGVuaW5nIiwidXNlRWZmZWN0IiwiaXNTdXBwb3J0ZWQiLCJjdXJyZW50IiwiY2xlYW51cCIsImNsZWFyVGltZW91dCIsInN0YXJ0VGltZXIiLCJzZXRUaW1lb3V0IiwiX29uRW5kIiwic3RvcFRpbWVyIiwic3RvcFJlY29nbml0aW9uIiwiX29uU3RhcnQiLCJfb25TcGVlY2hTdGFydCIsIl9vblNwZWVjaEVuZCIsIl9vblJlc3VsdCIsIl9vbkVycm9yIiwiX29uTm9NYXRjaCIsInJlc3VsdCIsImNsb25lRWxlbWVudCIsImlzVmFsaWRFbGVtZW50Iiwicm9sZSIsImN1cnNvciIsIm9uQ2xpY2siLCJzdGFydFJlY29nbml0aW9uIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib2JqZWN0Iiwic3RyaW5nIiwibnVtYmVyIiwiZnVuYyIsImRlZmF1bHRQcm9wcyJdLCJtYXBwaW5ncyI6Ijh3RUFBQSxTQUFTQSxFQUFFQSxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxHQUFHLElBQUksSUFBSUMsRUFBRVAsRUFBRUssR0FBR0MsR0FBR0UsRUFBRUQsRUFBRUUsTUFBTSxNQUFNVCxHQUFHLFlBQVlFLEVBQUVGLEdBQUdPLEVBQUVHLEtBQUtULEVBQUVPLEdBQUdHLFFBQVFDLFFBQVFKLEdBQUdLLEtBQUtWLEVBQUVDLEdBQUcsU0FBU0gsRUFBRUEsR0FBRyxPQUFPLFdBQVcsSUFBSUMsRUFBRVksS0FBS1gsRUFBRVksVUFBVSxPQUFPLElBQUlKLGtCQUFrQlAsRUFBRUMsR0FBRyxJQUFJQyxFQUFFTCxFQUFFZSxNQUFNZCxFQUFFQyxHQUFHLFNBQVNJLEVBQUVOLEdBQUdELEVBQUVNLEVBQUVGLEVBQUVDLEVBQUVFLEVBQUVDLEVBQUUsT0FBT1AsR0FBRyxTQUFTTyxFQUFFUCxHQUFHRCxFQUFFTSxFQUFFRixFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLFFBQVFQLEdBQUdNLE9BQUUsT0FBWSxTQUFTTCxFQUFFRixFQUFFQyxHQUFHLE9BQU8sU0FBU0QsR0FBRyxHQUFHaUIsTUFBTUMsUUFBUWxCLEdBQUcsT0FBT0EsRUFBdkMsQ0FBMENBLElBQUksU0FBU0EsRUFBRUMsR0FBRyxHQUFHLG9CQUFvQmtCLFFBQVVBLE9BQU9DLFlBQVlDLE9BQU9yQixHQUEzRCxDQUFzRSxJQUFJRSxFQUFFLEdBQUdDLEdBQUUsRUFBR0MsR0FBRSxFQUFHQyxPQUFFLEVBQU8sSUFBSSxJQUFJLElBQUlDLEVBQUVDLEVBQUVQLEVBQUVtQixPQUFPQyxjQUFj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
{
"name": "@untemps/react-vocal",
"version": "1.1.1",
"version": "1.1.2",
"author": "Vincent Le Badezet <v.lebadezet@untemps.net>",

@@ -5,0 +5,0 @@ "repository": "git@github.com:untemps/react-vocal.git",

@@ -33,2 +33,5 @@ import React from 'react'

global.navigator.mediaDevices = new MediaDevices()
global.SpeechGrammarList = jest.fn(() => ({
length: 0,
}))
global.SpeechRecognition = jest.fn(() => {

@@ -75,2 +78,3 @@ const handlers = {}

global.MediaDevices.mockReset()
global.SpeechGrammarList.mockReset()
global.SpeechRecognition.mockReset()

@@ -77,0 +81,0 @@ })

@@ -53,2 +53,12 @@ import { getUserMediaStream } from '@untemps/user-permissions-utils'

if(!!options && !options.grammars) {
const SpeechGrammarList =
window.SpeechGrammarList ||
window.webkitSpeechGrammarList ||
window.mozSpeechGrammarList ||
window.msSpeechGrammarList ||
{}
this._instance.grammars = new SpeechGrammarList()
}
Object.entries({ ...SpeechRecognitionWrapper.defaultOptions, ...(options || {}) }).forEach(

@@ -55,0 +65,0 @@ ([key, value]) => (this._instance[key] = value)

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