@datagrok/peptides 1.17.3 → 1.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/356.js CHANGED
@@ -1,2 +1,2 @@
1
- var peptides;(()=>{"use strict";var t,e={6138:(t,e,r)=>{r.d(e,{W:()=>i}),t=r.hmd(t);var n,i=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,r,i=void 0!==t?t:{};i.ready=new Promise((function(t,n){e=t,r=n}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&R("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[],A=0,_=null,E=null;function R(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}var x,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function j(t){try{if(t==x&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){R(t)}}function O(t,e,r){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return j(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return j(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(r,(function(t){p("failed to asynchronously prepare wasm: "+t),R(t)}))}function U(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=h[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13>>0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function T(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function C(t){return i["_"+t]}S(x="wasmCluster.wasm")||(P=x,x=i.locateFile?i.locateFile(P,c):c+P);var M="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function W(t,e,r,n,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,r=0;r<t.length;++r){var n=t.charCodeAt(r);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++r):e+=3}return e}(t)+1,r=k(e);return function(t,e,r){!function(t,e,r,n){if(!(n>0))return 0;for(var i=r+n-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(r>=i)break;e[r++]=a}else if(a<=2047){if(r+1>=i)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=i)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=i)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}e[r]=0}(t,d,e,r)}(t,r,e),r}(t)),e},array:t=>{var e,r,n=k(t.length);return e=t,r=n,h.set(e,r),n}},a=C(t),s=[],u=0;if(n)for(var c=0;c<n.length;c++){var f=o[r[c]];f?(0===u&&(u=B()),s[c]=f(n[c])):s[c]=n[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===e?(r=t)?function(t,e,r){for(var n=e+r,i=e;t[i]&&!(i>=n);)++i;if(i-e>16&&t.buffer&&M)return M.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,r,n):"":"boolean"===e?Boolean(t):t;var r,n}(t)}(l)}var F,H={d:function(t,e,r){throw new I(t).init(e,r),t},a:function(){R("")},c:function(t,e,r){d.copyWithin(t,e,e+r)},b:function(t){var e,r=d.length,n=2147483648;if((t>>>=0)>n)return!1;for(var i=1;i<=4;i*=2){var o=r*(1+.2/i);if(o=Math.min(o,t+100663296),T(Math.min(n,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},B=(function(){var t,e,n,o,a={a:H};function s(t,e){var r,n=t.exports;return i.asm=n,l=i.asm.e,b(),i.asm.i,r=i.asm.f,w.unshift(r),function(t){if(A--,i.monitorRunDependencies&&i.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),E)){var e=E;E=null,e()}}(),n}if(A++,i.monitorRunDependencies&&i.monitorRunDependencies(A),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),r(t)}(t=f,e=x,n=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?O(e,n,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,n).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,n,o)}))}))).catch(r)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(B=i.asm.k).apply(null,arguments)}),D=function(){return(D=i.asm.l).apply(null,arguments)},k=function(){return(k=i.asm.m).apply(null,arguments)},L=function(){return(L=i.asm.n).apply(null,arguments)};function N(){function t(){F||(F=!0,i.calledRun=!0,y||(U(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),v.unshift(t);var t;U(v)}()))}A>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),g.unshift(t);var t;U(g)}(),A>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=W,i.cwrap=function(t,e,r,n){var i=!r||r.every((t=>"number"===t||"boolean"===t));return"string"!==e&&i&&!n?C(t):function(){return W(t,e,r,arguments)}},E=function t(){F||N(),F||(E=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return N(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&r.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppLib=i)},5063:(t,e,r)=>{t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},r={};function n(t){var i=r[t];if(void 0!==i)return i.exports;var o=r[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,n),o.loaded=!0,o.exports}n.m=e,n.amdO={},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var i=r.length-1;i>-1&&!t;)t=r[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=self.location+"",t=n(6138),onmessage=e=>{const{distMatArray:r,n:i,methodCode:o}=e.data,a={};try{(async function(e,r,i){const o=new URL(n(5063),n.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,t.W)({locateFile:()=>a,printErr:t=>{}})}catch(e){try{s=await(0,t.W)({locateFile:()=>o,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for hierarchical clustering")}}const u=s.cwrap("getDendrogram","null",["number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*e.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(e.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(r-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(r-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,r,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(r-1)),w=new Float32Array(b.buffer,b.byteOffset,r-1).slice(0,r-1),v=g.slice(0,r-1),A=g.slice(r-1,2*r-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(r,i,o).then((t=>{a.clusterMatrix=t,postMessage(a)}))}catch(t){a.error=t,postMessage(a)}},peptides={}})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SCxXQUFXeU4sRUFBUXhNLFNBR25DLE1BQU0wTixFQUFxQnZOLFdBQVdtTixtQkFBcUJsQixFQUFJLEdBQUssRUFDOUR1QixFQUFXYixFQUFhVSxRQUFRRSxHQUNoQ0UsRUFBWSxJQUFJN08sV0FBVytOLEVBQWFuTixPQUFPSyxPQUFRMk4sRUFBVUQsR0FHakVHLEVBQXVCdk4sYUFBYWdOLG1CQUFxQmxCLEVBQUksR0FDN0QwQixFQUFhaEIsRUFBYVUsUUFBUUssR0FDbENFLEVBQWMsSUFBSWhQLFdBQVcrTixFQUFhbk4sT0FBT0ssT0FBUThOLEVBQVlELEdBRzNFVixFQUFrQkksRUFBU25CLEVBQUdLLEVBQVFrQixFQUFVRyxHQUVoRCxNQUFNRSxFQUFjLElBQUk3TixXQUFXeU4sRUFBVTVOLE9BQVE0TixFQUFVSyxXQUFvQixHQUFQN0IsRUFBRSxJQUN4RThCLEVBQWdCLElBQUs1TixhQUFheU4sRUFBWS9OLE9BQVErTixFQUFZRSxXQUFZN0IsRUFBRSxHQUFJK0IsTUFBTSxFQUFHL0IsRUFBRSxHQUUvRmdDLEVBQVlKLEVBQVlHLE1BQU0sRUFBRy9CLEVBQUUsR0FDbkNpQyxFQUFZTCxFQUFZRyxNQUFNL0IsRUFBRSxFQUFHLEVBQUVBLEVBQUksR0FLL0MsT0FIQVUsRUFBYXdCLE1BQU1iLEVBQVFRLFlBQzNCbkIsRUFBYXdCLE1BQU1WLEVBQVVLLFlBQzdCbkIsRUFBYXdCLE1BQU1QLEVBQVlFLFlBQ3hCLENBQUNHLFlBQVdDLFlBQVdILGdCQUNoQyxFRHREUUssQ0FBMkJwQyxFQUFjQyxFQUFHQyxHQUN2Q3hLLE1BQU0yTSxJQUNQbEMsRUFBS2tDLGNBQWdCQSxFQUNyQkMsWUFBWW5DLEVBQUssR0FFekIsQ0FDQSxNQUFPdkwsR0FDSHVMLEVBQUtZLE1BQVFuTSxFQUNiME4sWUFBWW5DLEVBQ2hCLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vd2FzbUNsdXN0ZXIuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS9jbHVzdGVyaW5nLXdvcmtlci5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vY2x1c3Rlcml6ZXJXYXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgZXhwb3J0Q3BwTGliID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPVxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gZnVuY3Rpb24gKGV4cG9ydENwcExpYiA9IHt9KSB7XG4gICAgdmFyIE1vZHVsZSA9IHR5cGVvZiBleHBvcnRDcHBMaWIgIT0gXCJ1bmRlZmluZWRcIiA/IGV4cG9ydENwcExpYiA6IHt9O1xuICAgIHZhciByZWFkeVByb21pc2VSZXNvbHZlLCByZWFkeVByb21pc2VSZWplY3Q7XG4gICAgTW9kdWxlW1wicmVhZHlcIl0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZWFkeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHJlYWR5UHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICB2YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTtcbiAgICB2YXIgYXJndW1lbnRzXyA9IFtdO1xuICAgIHZhciB0aGlzUHJvZ3JhbSA9IFwiLi90aGlzLnByb2dyYW1cIjtcbiAgICB2YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XG4gICAgICB0aHJvdyB0b1Rocm93O1xuICAgIH07XG4gICAgdmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIjtcbiAgICB2YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT0gXCJmdW5jdGlvblwiO1xuICAgIHZhciBFTlZJUk9OTUVOVF9JU19OT0RFID1cbiAgICAgIHR5cGVvZiBwcm9jZXNzID09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT0gXCJzdHJpbmdcIjtcbiAgICB2YXIgc2NyaXB0RGlyZWN0b3J5ID0gXCJcIjtcbiAgICBmdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcbiAgICAgIGlmIChNb2R1bGVbXCJsb2NhdGVGaWxlXCJdKSB7XG4gICAgICAgIHJldHVybiBNb2R1bGVbXCJsb2NhdGVGaWxlXCJdKHBhdGgsIHNjcmlwdERpcmVjdG9yeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcbiAgICB9XG4gICAgdmFyIHJlYWRfLCByZWFkQXN5bmMsIHJlYWRCaW5hcnksIHNldFdpbmRvd1RpdGxlO1xuICAgIGlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IHNlbGYubG9jYXRpb24uaHJlZjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkge1xuICAgICAgICBzY3JpcHREaXJlY3RvcnkgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcbiAgICAgIH1cbiAgICAgIGlmIChfc2NyaXB0RGlyKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IF9zY3JpcHREaXI7XG4gICAgICB9XG4gICAgICBpZiAoc2NyaXB0RGlyZWN0b3J5LmluZGV4T2YoXCJibG9iOlwiKSAhPT0gMCkge1xuICAgICAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSArIDFcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IFwiXCI7XG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIHJlYWRfID0gKHVybCkgPT4ge1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB1cmwsIGZhbHNlKTtcbiAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikge1xuICAgICAgICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB1cmwsIGZhbHNlKTtcbiAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgdHJ1ZSk7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25lcnJvcigpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgeGhyLm9uZXJyb3IgPSBvbmVycm9yO1xuICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc2V0V2luZG93VGl0bGUgPSAodGl0bGUpID0+IChkb2N1bWVudC50aXRsZSA9IHRpdGxlKTtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgICB2YXIgb3V0ID0gTW9kdWxlW1wicHJpbnRcIl0gfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICB2YXIgZXJyID0gTW9kdWxlW1wicHJpbnRFcnJcIl0gfHwgY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG4gICAgT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7XG4gICAgbW9kdWxlT3ZlcnJpZGVzID0gbnVsbDtcbiAgICBpZiAoTW9kdWxlW1wiYXJndW1lbnRzXCJdKSBhcmd1bWVudHNfID0gTW9kdWxlW1wiYXJndW1lbnRzXCJdO1xuICAgIGlmIChNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXTtcbiAgICBpZiAoTW9kdWxlW1wicXVpdFwiXSkgcXVpdF8gPSBNb2R1bGVbXCJxdWl0XCJdO1xuICAgIHZhciB3YXNtQmluYXJ5O1xuICAgIGlmIChNb2R1bGVbXCJ3YXNtQmluYXJ5XCJdKSB3YXNtQmluYXJ5ID0gTW9kdWxlW1wid2FzbUJpbmFyeVwiXTtcbiAgICB2YXIgbm9FeGl0UnVudGltZSA9IE1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl0gfHwgdHJ1ZTtcbiAgICBpZiAodHlwZW9mIFdlYkFzc2VtYmx5ICE9IFwib2JqZWN0XCIpIHtcbiAgICAgIGFib3J0KFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTtcbiAgICB9XG4gICAgdmFyIHdhc21NZW1vcnk7XG4gICAgdmFyIEFCT1JUID0gZmFsc2U7XG4gICAgdmFyIEVYSVRTVEFUVVM7XG4gICAgdmFyIEhFQVA4LCBIRUFQVTgsIEhFQVAxNiwgSEVBUFUxNiwgSEVBUDMyLCBIRUFQVTMyLCBIRUFQRjMyLCBIRUFQRjY0O1xuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW9yeVZpZXdzKCkge1xuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcbiAgICAgIE1vZHVsZVtcIkhFQVA4XCJdID0gSEVBUDggPSBuZXcgSW50OEFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUDE2XCJdID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQMzJcIl0gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBVOFwiXSA9IEhFQVBVOCA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUFUxNlwiXSA9IEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQVTMyXCJdID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBGMzJcIl0gPSBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBGNjRcIl0gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTtcbiAgICB9XG4gICAgdmFyIHdhc21UYWJsZTtcbiAgICB2YXIgX19BVFBSRVJVTl9fID0gW107XG4gICAgdmFyIF9fQVRJTklUX18gPSBbXTtcbiAgICB2YXIgX19BVFBPU1RSVU5fXyA9IFtdO1xuICAgIHZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBwcmVSdW4oKSB7XG4gICAgICBpZiAoTW9kdWxlW1wicHJlUnVuXCJdKSB7XG4gICAgICAgIGlmICh0eXBlb2YgTW9kdWxlW1wicHJlUnVuXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBNb2R1bGVbXCJwcmVSdW5cIl0gPSBbTW9kdWxlW1wicHJlUnVuXCJdXTtcbiAgICAgICAgd2hpbGUgKE1vZHVsZVtcInByZVJ1blwiXS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRPblByZVJ1bihNb2R1bGVbXCJwcmVSdW5cIl0uc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRSdW50aW1lKCkge1xuICAgICAgcnVudGltZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3N0UnVuKCkge1xuICAgICAgaWYgKE1vZHVsZVtcInBvc3RSdW5cIl0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwb3N0UnVuXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBNb2R1bGVbXCJwb3N0UnVuXCJdID0gW01vZHVsZVtcInBvc3RSdW5cIl1dO1xuICAgICAgICB3aGlsZSAoTW9kdWxlW1wicG9zdFJ1blwiXS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRPblBvc3RSdW4oTW9kdWxlW1wicG9zdFJ1blwiXS5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XG4gICAgICBfX0FUUFJFUlVOX18udW5zaGlmdChjYik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xuICAgICAgX19BVElOSVRfXy51bnNoaWZ0KGNiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XG4gICAgICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpO1xuICAgIH1cbiAgICB2YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcbiAgICB2YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xuICAgIHZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcbiAgICAgIHJ1bkRlcGVuZGVuY2llcysrO1xuICAgICAgaWYgKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7XG4gICAgICBydW5EZXBlbmRlbmNpZXMtLTtcbiAgICAgIGlmIChNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKSB7XG4gICAgICAgIE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0ocnVuRGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChydW5EZXBlbmRlbmNpZXMgPT0gMCkge1xuICAgICAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtcbiAgICAgICAgICBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGRlcGVuZGVuY2llc0Z1bGZpbGxlZDtcbiAgICAgICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWJvcnQod2hhdCkge1xuICAgICAgaWYgKE1vZHVsZVtcIm9uQWJvcnRcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wib25BYm9ydFwiXSh3aGF0KTtcbiAgICAgIH1cbiAgICAgIHdoYXQgPSBcIkFib3J0ZWQoXCIgKyB3aGF0ICsgXCIpXCI7XG4gICAgICBlcnIod2hhdCk7XG4gICAgICBBQk9SVCA9IHRydWU7XG4gICAgICBFWElUU1RBVFVTID0gMTtcbiAgICAgIHdoYXQgKz0gXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCI7XG4gICAgICB2YXIgZSA9IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Iod2hhdCk7XG4gICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB2YXIgZGF0YVVSSVByZWZpeCA9IFwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LFwiO1xuICAgIGZ1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZGF0YVVSSVByZWZpeCk7XG4gICAgfVxuICAgIHZhciB3YXNtQmluYXJ5RmlsZTtcbiAgICB3YXNtQmluYXJ5RmlsZSA9IFwid2FzbUNsdXN0ZXIud2FzbVwiO1xuICAgIGlmICghaXNEYXRhVVJJKHdhc21CaW5hcnlGaWxlKSkge1xuICAgICAgd2FzbUJpbmFyeUZpbGUgPSBsb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmaWxlID09IHdhc21CaW5hcnlGaWxlICYmIHdhc21CaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlYWRCaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgYWJvcnQoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKSB7XG4gICAgICBpZiAoIXdhc21CaW5hcnkgJiYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmV0Y2ggPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbXCJva1wiXSkge1xuICAgICAgICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW1wiYXJyYXlCdWZmZXJcIl0oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XG4gICAgICByZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoYmluYXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSwgaW1wb3J0cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVjZWl2ZXIsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBlcnIoXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIiArIHJlYXNvbik7XG4gICAgICAgICAgYWJvcnQocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xuICAgICAgaWYgKFxuICAgICAgICAhYmluYXJ5ICYmXG4gICAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgIWlzRGF0YVVSSShiaW5hcnlGaWxlKSAmJlxuICAgICAgICB0eXBlb2YgZmV0Y2ggPT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KS50aGVuKGZ1bmN0aW9uIChcbiAgICAgICAgICByZXNwb25zZVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcocmVzcG9uc2UsIGltcG9ydHMpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihjYWxsYmFjaywgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgZXJyKFwid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6IFwiICsgcmVhc29uKTtcbiAgICAgICAgICAgIGVycihcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcbiAgICAgIHZhciBpbmZvID0geyBhOiB3YXNtSW1wb3J0cyB9O1xuICAgICAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcbiAgICAgICAgdmFyIGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzO1xuICAgICAgICBNb2R1bGVbXCJhc21cIl0gPSBleHBvcnRzO1xuICAgICAgICB3YXNtTWVtb3J5ID0gTW9kdWxlW1wiYXNtXCJdW1wiZVwiXTtcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcbiAgICAgICAgd2FzbVRhYmxlID0gTW9kdWxlW1wiYXNtXCJdW1wiaVwiXTtcbiAgICAgICAgYWRkT25Jbml0KE1vZHVsZVtcImFzbVwiXVtcImZcIl0pO1xuICAgICAgICByZW1vdmVSdW5EZXBlbmRlbmN5KFwid2FzbS1pbnN0YW50aWF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9XG4gICAgICBhZGRSdW5EZXBlbmRlbmN5KFwid2FzbS1pbnN0YW50aWF0ZVwiKTtcbiAgICAgIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xuICAgICAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0W1wiaW5zdGFuY2VcIl0pO1xuICAgICAgfVxuICAgICAgaWYgKE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl0oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGVycihcIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnN0YW50aWF0ZUFzeW5jKFxuICAgICAgICB3YXNtQmluYXJ5LFxuICAgICAgICB3YXNtQmluYXJ5RmlsZSxcbiAgICAgICAgaW5mbyxcbiAgICAgICAgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHRcbiAgICAgICkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFJ1bnRpbWVDYWxsYmFja3MoY2FsbGJhY2tzKSB7XG4gICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gRXhjZXB0aW9uSW5mbyhleGNQdHIpIHtcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xuICAgICAgdGhpcy5wdHIgPSBleGNQdHIgLSAyNDtcbiAgICAgIHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBIRUFQVTMyWyh0aGlzLnB0ciArIDQpID4+IDJdID0gdHlwZTtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF90eXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyA0KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24gKGRlc3RydWN0b3IpIHtcbiAgICAgICAgSEVBUFUzMlsodGhpcy5wdHIgKyA4KSA+PiAyXSA9IGRlc3RydWN0b3I7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKHRoaXMucHRyICsgOCkgPj4gMl07XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKGNhdWdodCkge1xuICAgICAgICBjYXVnaHQgPSBjYXVnaHQgPyAxIDogMDtcbiAgICAgICAgSEVBUDhbKHRoaXMucHRyICsgMTIpID4+IDBdID0gY2F1Z2h0O1xuICAgICAgfTtcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVA4Wyh0aGlzLnB0ciArIDEyKSA+PiAwXSAhPSAwO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0X3JldGhyb3duID0gZnVuY3Rpb24gKHJldGhyb3duKSB7XG4gICAgICAgIHJldGhyb3duID0gcmV0aHJvd24gPyAxIDogMDtcbiAgICAgICAgSEVBUDhbKHRoaXMucHRyICsgMTMpID4+IDBdID0gcmV0aHJvd247XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQOFsodGhpcy5wdHIgKyAxMykgPj4gMF0gIT0gMDtcbiAgICAgIH07XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAodHlwZSwgZGVzdHJ1Y3Rvcikge1xuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XG4gICAgICAgIHRoaXMuc2V0X3R5cGUodHlwZSk7XG4gICAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24gKGFkanVzdGVkUHRyKSB7XG4gICAgICAgIEhFQVBVMzJbKHRoaXMucHRyICsgMTYpID4+IDJdID0gYWRqdXN0ZWRQdHI7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyAxNikgPj4gMl07XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfZXhjZXB0aW9uX3B0ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlzUG9pbnRlciA9IF9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xuICAgICAgICAgIHJldHVybiBIRUFQVTMyW3RoaXMuZXhjUHRyID4+IDJdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZGp1c3RlZCA9IHRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO1xuICAgICAgICBpZiAoYWRqdXN0ZWQgIT09IDApIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGV4Y2VwdGlvbkxhc3QgPSAwO1xuICAgIHZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50ID0gMDtcbiAgICBmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLCB0eXBlLCBkZXN0cnVjdG9yKSB7XG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XG4gICAgICBleGNlcHRpb25MYXN0ID0gcHRyO1xuICAgICAgdW5jYXVnaHRFeGNlcHRpb25Db3VudCsrO1xuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2Fib3J0KCkge1xuICAgICAgYWJvcnQoXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcbiAgICAgIEhFQVBVOC5jb3B5V2l0aGluKGRlc3QsIHNyYywgc3JjICsgbnVtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGVhcE1heCgpIHtcbiAgICAgIHJldHVybiAyMTQ3NDgzNjQ4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpIHtcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XG4gICAgICB0cnkge1xuICAgICAgICB3YXNtTWVtb3J5Lmdyb3coKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgPj4+IDE2KTtcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XG4gICAgICB2YXIgb2xkU2l6ZSA9IEhFQVBVOC5sZW5ndGg7XG4gICAgICByZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVkU2l6ZSA+Pj4gMDtcbiAgICAgIHZhciBtYXhIZWFwU2l6ZSA9IGdldEhlYXBNYXgoKTtcbiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbGV0IGFsaWduVXAgPSAoeCwgbXVsdGlwbGUpID0+XG4gICAgICAgIHggKyAoKG11bHRpcGxlIC0gKHggJSBtdWx0aXBsZSkpICUgbXVsdGlwbGUpO1xuICAgICAgZm9yICh2YXIgY3V0RG93biA9IDE7IGN1dERvd24gPD0gNDsgY3V0RG93biAqPSAyKSB7XG4gICAgICAgIHZhciBvdmVyR3Jvd25IZWFwU2l6ZSA9IG9sZFNpemUgKiAoMSArIDAuMiAvIGN1dERvd24pO1xuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKFxuICAgICAgICAgIG92ZXJHcm93bkhlYXBTaXplLFxuICAgICAgICAgIHJlcXVlc3RlZFNpemUgKyAxMDA2NjMyOTZcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihcbiAgICAgICAgICBtYXhIZWFwU2l6ZSxcbiAgICAgICAgICBhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsIG92ZXJHcm93bkhlYXBTaXplKSwgNjU1MzYpXG4gICAgICAgICk7XG4gICAgICAgIHZhciByZXBsYWNlbWVudCA9IGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7XG4gICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XG4gICAgICB2YXIgZnVuYyA9IE1vZHVsZVtcIl9cIiArIGlkZW50XTtcbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xuICAgICAgSEVBUDguc2V0KGFycmF5LCBidWZmZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjgoc3RyKSB7XG4gICAgICB2YXIgbGVuID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDw9IDEyNykge1xuICAgICAgICAgIGxlbisrO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMjA0Nykge1xuICAgICAgICAgIGxlbiArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gNTUyOTYgJiYgYyA8PSA1NzM0Mykge1xuICAgICAgICAgIGxlbiArPSA0O1xuICAgICAgICAgICsraTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW4gKz0gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBoZWFwLCBvdXRJZHgsIG1heEJ5dGVzVG9Xcml0ZSkge1xuICAgICAgaWYgKCEobWF4Qnl0ZXNUb1dyaXRlID4gMCkpIHJldHVybiAwO1xuICAgICAgdmFyIHN0YXJ0SWR4ID0gb3V0SWR4O1xuICAgICAgdmFyIGVuZElkeCA9IG91dElkeCArIG1heEJ5dGVzVG9Xcml0ZSAtIDE7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAodSA+PSA1NTI5NiAmJiB1IDw9IDU3MzQzKSB7XG4gICAgICAgICAgdmFyIHUxID0gc3RyLmNoYXJDb2RlQXQoKytpKTtcbiAgICAgICAgICB1ID0gKDY1NTM2ICsgKCh1ICYgMTAyMykgPDwgMTApKSB8ICh1MSAmIDEwMjMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1IDw9IDEyNykge1xuICAgICAgICAgIGlmIChvdXRJZHggPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAyMDQ3KSB7XG4gICAgICAgICAgaWYgKG91dElkeCArIDEgPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDE5MiB8ICh1ID4+IDYpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKHUgJiA2Myk7XG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSA2NTUzNSkge1xuICAgICAgICAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAyMjQgfCAodSA+PiAxMik7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAoKHUgPj4gNikgJiA2Myk7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAodSAmIDYzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMyA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMjQwIHwgKHUgPj4gMTgpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKCh1ID4+IDEyKSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICgodSA+PiA2KSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICh1ICYgNjMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoZWFwW291dElkeF0gPSAwO1xuICAgICAgcmV0dXJuIG91dElkeCAtIHN0YXJ0SWR4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xuICAgICAgcmV0dXJuIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgSEVBUFU4LCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XG4gICAgICB2YXIgc2l6ZSA9IGxlbmd0aEJ5dGVzVVRGOChzdHIpICsgMTtcbiAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKHNpemUpO1xuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHZhciBVVEY4RGVjb2RlciA9XG4gICAgICB0eXBlb2YgVGV4dERlY29kZXIgIT0gXCJ1bmRlZmluZWRcIiA/IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIikgOiB1bmRlZmluZWQ7XG4gICAgZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksIGlkeCwgbWF4Qnl0ZXNUb1JlYWQpIHtcbiAgICAgIHZhciBlbmRJZHggPSBpZHggKyBtYXhCeXRlc1RvUmVhZDtcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcbiAgICAgIGlmIChlbmRQdHIgLSBpZHggPiAxNiAmJiBoZWFwT3JBcnJheS5idWZmZXIgJiYgVVRGOERlY29kZXIpIHtcbiAgICAgICAgcmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwT3JBcnJheS5zdWJhcnJheShpZHgsIGVuZFB0cikpO1xuICAgICAgfVxuICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICB3aGlsZSAoaWR4IDwgZW5kUHRyKSB7XG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcbiAgICAgICAgaWYgKCEodTAgJiAxMjgpKSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1MSA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xuICAgICAgICBpZiAoKHUwICYgMjI0KSA9PSAxOTIpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xuICAgICAgICBpZiAoKHUwICYgMjQwKSA9PSAyMjQpIHtcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdTAgPVxuICAgICAgICAgICAgKCh1MCAmIDcpIDw8IDE4KSB8XG4gICAgICAgICAgICAodTEgPDwgMTIpIHxcbiAgICAgICAgICAgICh1MiA8PCA2KSB8XG4gICAgICAgICAgICAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1MCA8IDY1NTM2KSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjaCA9IHUwIC0gNjU1MzY7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCAoY2ggPj4gMTApLCA1NjMyMCB8IChjaCAmIDEwMjMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZnVuY3Rpb24gVVRGOFRvU3RyaW5nKHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIHtcbiAgICAgIHJldHVybiBwdHIgPyBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgsIHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XG4gICAgICB2YXIgdG9DID0ge1xuICAgICAgICBzdHJpbmc6IChzdHIpID0+IHtcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcbiAgICAgICAgICBpZiAoc3RyICE9PSBudWxsICYmIHN0ciAhPT0gdW5kZWZpbmVkICYmIHN0ciAhPT0gMCkge1xuICAgICAgICAgICAgcmV0ID0gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9LFxuICAgICAgICBhcnJheTogKGFycikgPT4ge1xuICAgICAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKGFyci5sZW5ndGgpO1xuICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeShhcnIsIHJldCk7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KSB7XG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIEJvb2xlYW4ocmV0KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpO1xuICAgICAgdmFyIGNBcmdzID0gW107XG4gICAgICB2YXIgc3RhY2sgPSAwO1xuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XG4gICAgICAgICAgaWYgKGNvbnZlcnRlcikge1xuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwKSBzdGFjayA9IHN0YWNrU2F2ZSgpO1xuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNBcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcbiAgICAgIGZ1bmN0aW9uIG9uRG9uZShyZXQpIHtcbiAgICAgICAgaWYgKHN0YWNrICE9PSAwKSBzdGFja1Jlc3RvcmUoc3RhY2spO1xuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XG4gICAgICB9XG4gICAgICByZXQgPSBvbkRvbmUocmV0KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xuICAgICAgdmFyIG51bWVyaWNBcmdzID1cbiAgICAgICAgIWFyZ1R5cGVzIHx8XG4gICAgICAgIGFyZ1R5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiKTtcbiAgICAgIHZhciBudW1lcmljUmV0ID0gcmV0dXJuVHlwZSAhPT0gXCJzdHJpbmdcIjtcbiAgICAgIGlmIChudW1lcmljUmV0ICYmIG51bWVyaWNBcmdzICYmICFvcHRzKSB7XG4gICAgICAgIHJldHVybiBnZXRDRnVuYyhpZGVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHdhc21JbXBvcnRzID0ge1xuICAgICAgZDogX19fY3hhX3Rocm93LFxuICAgICAgYTogX2Fib3J0LFxuICAgICAgYzogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcbiAgICAgIGI6IF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwLFxuICAgIH07XG4gICAgdmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcbiAgICB2YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJmXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIF9nZXREZW5kcm9ncmFtID0gKE1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfZ2V0RGVuZHJvZ3JhbSA9IE1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdID1cbiAgICAgICAgTW9kdWxlW1wiYXNtXCJdW1wiZ1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9KTtcbiAgICB2YXIgX2ZyZWUgPSAoTW9kdWxlW1wiX2ZyZWVcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJoXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBfX19lcnJub19sb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbXCJhc21cIl1bXCJfX2Vycm5vX2xvY2F0aW9uXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIF9tYWxsb2MgPSAoTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJqXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBzdGFja1NhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrU2F2ZSA9IE1vZHVsZVtcImFzbVwiXVtcImtcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJsXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIHN0YWNrQWxsb2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrQWxsb2MgPSBNb2R1bGVbXCJhc21cIl1bXCJtXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJuXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcbiAgICBNb2R1bGVbXCJjd3JhcFwiXSA9IGN3cmFwO1xuICAgIHZhciBjYWxsZWRSdW47XG4gICAgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xuICAgICAgaWYgKCFjYWxsZWRSdW4pIHJ1bigpO1xuICAgICAgaWYgKCFjYWxsZWRSdW4pIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bkNhbGxlcjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByZVJ1bigpO1xuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcbiAgICAgICAgY2FsbGVkUnVuID0gdHJ1ZTtcbiAgICAgICAgTW9kdWxlW1wiY2FsbGVkUnVuXCJdID0gdHJ1ZTtcbiAgICAgICAgaWYgKEFCT1JUKSByZXR1cm47XG4gICAgICAgIGluaXRSdW50aW1lKCk7XG4gICAgICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcbiAgICAgICAgaWYgKE1vZHVsZVtcIm9uUnVudGltZUluaXRpYWxpemVkXCJdKSBNb2R1bGVbXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiXSgpO1xuICAgICAgICBwb3N0UnVuKCk7XG4gICAgICB9XG4gICAgICBpZiAoTW9kdWxlW1wic2V0U3RhdHVzXCJdKSB7XG4gICAgICAgIE1vZHVsZVtcInNldFN0YXR1c1wiXShcIlJ1bm5pbmcuLi5cIik7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgTW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpO1xuICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9SdW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE1vZHVsZVtcInByZUluaXRcIl0pIHtcbiAgICAgIGlmICh0eXBlb2YgTW9kdWxlW1wicHJlSW5pdFwiXSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIE1vZHVsZVtcInByZUluaXRcIl0gPSBbTW9kdWxlW1wicHJlSW5pdFwiXV07XG4gICAgICB3aGlsZSAoTW9kdWxlW1wicHJlSW5pdFwiXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIE1vZHVsZVtcInByZUluaXRcIl0ucG9wKCkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnVuKCk7XG5cbiAgICByZXR1cm4gZXhwb3J0Q3BwTGliLnJlYWR5O1xuICB9O1xufSkoKTtcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKVxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcExpYjtcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmVbXCJhbWRcIl0pXG4gIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBleHBvcnRDcHBMaWI7XG4gIH0pO1xuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIGV4cG9ydHNbXCJleHBvcnRDcHBMaWJcIl0gPSBleHBvcnRDcHBMaWI7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MzU2OiAxXG59O1xuXG4vLyBubyBjaHVuayBpbnN0YWxsIGZ1bmN0aW9uIG5lZWRlZFxuLy8gbm8gY2h1bmsgbG9hZGluZ1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiaW1wb3J0IHsgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20gfSBmcm9tICcuL2NsdXN0ZXJpemVyV2FzbSc7XG5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGRpc3RNYXRBcnJheSwgbiwgbWV0aG9kQ29kZSB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgdHJ5IHtcbiAgICAgICAgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20oZGlzdE1hdEFycmF5LCBuLCBtZXRob2RDb2RlKVxuICAgICAgICAgICAgLnRoZW4oKGNsdXN0ZXJNYXRyaXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEuY2x1c3Rlck1hdHJpeCA9IGNsdXN0ZXJNYXRyaXg7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2x1c3RlcmluZy13b3JrZXIuanMubWFwIiwiaW1wb3J0IHtleHBvcnRDcHBMaWJ9IGZyb20gJy4vd2FzbUNsdXN0ZXIuanMnO1xuXG4vKipcbiBjYWxscyB3YXNtIGZ1bmN0aW9uIHRvIGdldCBjbHVzdGVyaW5nIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIGRpc3RhbmNlIG1hdHJpeFxuIGRpc3RtYXQ6IGRpc3RhbmNlIG1hdHJpeCBhcyBhbiBhcnJheSBvZiBmbG9hdHMgY29tcHJpc2luZyB0aGUgdG9wIHJpZ2h0IHRyaWFuZ2xlIG9mIHRoZSBtYXRyaXhcbiBuOiBudW1iZXIgb2Ygb2JzZXJ2YWJsZXNcbiBtZXRob2Q6IDAgPSBzaW5nbGUgbGlua2FnZSwgMSA9IGNvbXBsZXRlIGxpbmthZ2UsIDIgPSBhdmVyYWdlIGxpbmthZ2UsIDMgPSBtZWRpYW4gbGlua2FnZVxuIHJlc3VsdDogeyBtZXJnZVJlc3VsdDogSW50MzJBcnJheSwgaGVpZ2h0c1Jlc3VsdDogRmxvYXQzMkFycmF5IH1cbiBtZXJnZVJlc3VsdCBoYXMgbGVuZ3RoIG9mIChuLTEpKjIgYW5kIGhlaWdodFJlc3VsdCBoYXMgbGVuZ3RoIG9mIG4tMVxuIHRvZ2V0aGVyIHRoZXkgZGVzY3JpYmUgdGhlIGNsdXN0ZXJpbmcgYXMgYSBkZW5kcm9ncmFtIGFzIGEgbWF0cml4IG9mIChuLTEpIFggM1xuIGVhY2ggcm93IGluIHRoZSBnaXZlbiBtYXRyaXggY29tcHJpc2VzIHRoZSBtZXJnZSBldmVudCBhdCBzdGVwIGkgYW5kIGxhc3QgY29sdW1uIGlzIHRoZSBoZWlnaHQgZnJvbSB0aGUgbGVhdmVzLlxuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbShkaXN0bWF0LCBuLCBtZXRob2QpIHtcbiAgY29uc3Qgd2FzbVVybCA9IG5ldyBVUkwoJy4vd2FzbUNsdXN0ZXIud2FzbScsIGltcG9ydC5tZXRhLnVybCkuaHJlZjtcbiAgY29uc3Qgd2FzbVBhdGggPSB3YXNtVXJsLnN1YnN0cmluZygwLCB3YXNtVXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICd3YXNtQ2x1c3Rlci53YXNtJztcbiAgbGV0IHdhc21JbnN0YW5jZTtcbiAgdHJ5IHtcbiAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcExpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVBhdGgsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICB3YXNtSW5zdGFuY2UgPSBhd2FpdCBleHBvcnRDcHBMaWIoe2xvY2F0ZUZpbGU6ICgpID0+IHdhc21VcmwsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsb2FkIHdhc20gZmlsZSBmb3IgaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcnKTtcbiAgICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdldERlbmRyb2dyYW1XYXNtID1cbiAgICB3YXNtSW5zdGFuY2UuY3dyYXAoJ2dldERlbmRyb2dyYW0nLCAnbnVsbCcsIFsnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddKTtcbiAgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGRpc3RhbmNlIG1hdHJpeFxuICBjb25zdCBieXRlc0ZvckRpc3RNYXQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBkaXN0bWF0Lmxlbmd0aDtcbiAgY29uc3QgZGF0YVB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRGlzdE1hdCk7XG4gIGNvbnN0IG1hdEhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0ciwgYnl0ZXNGb3JEaXN0TWF0KTtcbiAgbWF0SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZGlzdG1hdC5idWZmZXIpKTtcblxuICAvL2FsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBtZXJnZXMgYXJyYXlcbiAgY29uc3QgYnl0ZXNGb3JNZXJnZUFycmF5ID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIChuIC0gMSkgKiAyO1xuICBjb25zdCBtZXJnZVB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yTWVyZ2VBcnJheSk7XG4gIGNvbnN0IG1lcmdlSGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBtZXJnZVB0ciwgYnl0ZXNGb3JNZXJnZUFycmF5KTtcblxuICAvL2FsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBoZWlndCBhcnJheVxuICBjb25zdCBieXRlc0ZvckhlaWdodHNBcnJheSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIChuIC0gMSk7XG4gIGNvbnN0IGhlaWdodHNQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckhlaWdodHNBcnJheSk7XG4gIGNvbnN0IGhlaWdodHNIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGhlaWdodHNQdHIsIGJ5dGVzRm9ySGVpZ2h0c0FycmF5KTtcblxuICAvLyBjYWxsIHRoZSB3YXNtIGZ1bmN0aW9uXG4gIGdldERlbmRyb2dyYW1XYXNtKGRhdGFQdHIsIG4sIG1ldGhvZCwgbWVyZ2VQdHIsIGhlaWdodHNQdHIpO1xuICAvLyBnZXQgdGhlIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIHRoZSB3YXNtIGhlYXBcbiAgY29uc3QgbWVyZ2VSZXN1bHQgPSBuZXcgSW50MzJBcnJheShtZXJnZUhlYXAuYnVmZmVyLCBtZXJnZUhlYXAuYnl0ZU9mZnNldCwgKG4tMSkgKiAyKTtcbiAgY29uc3QgaGVpZ2h0c1Jlc3VsdCA9IChuZXcgRmxvYXQzMkFycmF5KGhlaWdodHNIZWFwLmJ1ZmZlciwgaGVpZ2h0c0hlYXAuYnl0ZU9mZnNldCwgbi0xKSkuc2xpY2UoMCwgbi0xKTtcblxuICBjb25zdCBtZXJnZVJvdzEgPSBtZXJnZVJlc3VsdC5zbGljZSgwLCBuLTEpO1xuICBjb25zdCBtZXJnZVJvdzIgPSBtZXJnZVJlc3VsdC5zbGljZShuLTEsIDIqbiAtIDIpO1xuICAvLyBmcmVlIHRoZSBtZW1vcnkgYmxvY2tzIG9uIHRoZSB3YXNtIGhlYXBcbiAgd2FzbUluc3RhbmNlLl9mcmVlKG1hdEhlYXAuYnl0ZU9mZnNldCk7XG4gIHdhc21JbnN0YW5jZS5fZnJlZShtZXJnZUhlYXAuYnl0ZU9mZnNldCk7XG4gIHdhc21JbnN0YW5jZS5fZnJlZShoZWlnaHRzSGVhcC5ieXRlT2Zmc2V0KTtcbiAgcmV0dXJuIHttZXJnZVJvdzEsIG1lcmdlUm93MiwgaGVpZ2h0c1Jlc3VsdH07XG59XG4iXSwibmFtZXMiOlsiX3NjcmlwdERpciIsImV4cG9ydENwcExpYiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJFTlZJUk9OTUVOVF9JU19XRUIiLCJ3aW5kb3ciLCJFTlZJUk9OTUVOVF9JU19XT1JLRVIiLCJpbXBvcnRTY3JpcHRzIiwic2NyaXB0RGlyZWN0b3J5IiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsInNlbGYiLCJsb2NhdGlvbiIsImhyZWYiLCJpbmRleE9mIiwic3Vic3RyIiwicmVwbGFjZSIsImxhc3RJbmRleE9mIiwidXJsIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwic2VuZCIsIlVpbnQ4QXJyYXkiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJiaW5kIiwid2FzbUJpbmFyeSIsIndhc21NZW1vcnkiLCJlcnIiLCJ3YXJuIiwiV2ViQXNzZW1ibHkiLCJhYm9ydCIsIkhFQVA4IiwiSEVBUFU4IiwiSEVBUFUzMiIsIkFCT1JUIiwidXBkYXRlTWVtb3J5Vmlld3MiLCJiIiwiYnVmZmVyIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiX19BVFBSRVJVTl9fIiwiX19BVElOSVRfXyIsIl9fQVRQT1NUUlVOX18iLCJydW5EZXBlbmRlbmNpZXMiLCJydW5EZXBlbmRlbmN5V2F0Y2hlciIsImRlcGVuZGVuY2llc0Z1bGZpbGxlZCIsIndoYXQiLCJlIiwiUnVudGltZUVycm9yIiwid2FzbUJpbmFyeUZpbGUiLCJwYXRoIiwiaXNEYXRhVVJJIiwiZmlsZW5hbWUiLCJzdGFydHNXaXRoIiwiZ2V0QmluYXJ5IiwiZmlsZSIsImluc3RhbnRpYXRlQXJyYXlCdWZmZXIiLCJiaW5hcnlGaWxlIiwiaW1wb3J0cyIsInJlY2VpdmVyIiwiZmV0Y2giLCJ0aGVuIiwiY3JlZGVudGlhbHMiLCJjYXRjaCIsImdldEJpbmFyeVByb21pc2UiLCJiaW5hcnkiLCJpbnN0YW50aWF0ZSIsImluc3RhbmNlIiwicmVhc29uIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwicHRyIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9jYXVnaHQiLCJjYXVnaHQiLCJnZXRfY2F1Z2h0Iiwic2V0X3JldGhyb3duIiwicmV0aHJvd24iLCJnZXRfcmV0aHJvd24iLCJpbml0Iiwic2V0X2FkanVzdGVkX3B0ciIsImFkanVzdGVkUHRyIiwiZ2V0X2FkanVzdGVkX3B0ciIsImdldF9leGNlcHRpb25fcHRyIiwiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSIsImFkanVzdGVkIiwiZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlciIsInNpemUiLCJncm93IiwiYnl0ZUxlbmd0aCIsImdldENGdW5jIiwiaWRlbnQiLCJVVEY4RGVjb2RlciIsIlRleHREZWNvZGVyIiwiY2NhbGwiLCJyZXR1cm5UeXBlIiwiYXJnVHlwZXMiLCJhcmdzIiwib3B0cyIsInRvQyIsInN0cmluZyIsInN0ciIsInJldCIsImxlbiIsImkiLCJjIiwiY2hhckNvZGVBdCIsImxlbmd0aEJ5dGVzVVRGOCIsInN0YWNrQWxsb2MiLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiZW5kSWR4IiwidSIsInN0cmluZ1RvVVRGOEFycmF5Iiwic3RyaW5nVG9VVEY4Iiwic3RyaW5nVG9VVEY4T25TdGFjayIsImFycmF5IiwiYXJyIiwic2V0IiwiZnVuYyIsImNBcmdzIiwic3RhY2siLCJjb252ZXJ0ZXIiLCJzdGFja1NhdmUiLCJhcHBseSIsInN0YWNrUmVzdG9yZSIsImhlYXBPckFycmF5IiwiaWR4IiwibWF4Qnl0ZXNUb1JlYWQiLCJlbmRQdHIiLCJkZWNvZGUiLCJzdWJhcnJheSIsInUwIiwidTEiLCJ1MiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoIiwiVVRGOEFycmF5VG9TdHJpbmciLCJCb29sZWFuIiwiY29udmVydFJldHVyblZhbHVlIiwib25Eb25lIiwiY2FsbGVkUnVuIiwid2FzbUltcG9ydHMiLCJkIiwiYSIsImRlc3QiLCJudW0iLCJjb3B5V2l0aGluIiwicmVxdWVzdGVkU2l6ZSIsIngiLCJvbGRTaXplIiwibWF4SGVhcFNpemUiLCJjdXREb3duIiwib3Zlckdyb3duSGVhcFNpemUiLCJNYXRoIiwibWluIiwibWF4IiwiY2FsbGJhY2siLCJpbmZvIiwicmVjZWl2ZUluc3RhbmNlIiwibW9kdWxlIiwiY2IiLCJleHBvcnRzIiwidW5zaGlmdCIsImlkIiwiY2xlYXJJbnRlcnZhbCIsInJlbW92ZVJ1bkRlcGVuZGVuY3kiLCJyZXN1bHQiLCJpbnN0YW50aWF0ZVN0cmVhbWluZyIsImNyZWF0ZVdhc20iLCJhcmd1bWVudHMiLCJydW4iLCJkb1J1biIsInBvc3RSdW4iLCJwcmVSdW4iLCJzZXRUaW1lb3V0IiwibnVtZXJpY0FyZ3MiLCJldmVyeSIsInJ1bkNhbGxlciIsInBvcCIsInJlYWR5IiwiZGVmaW5lIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJhbWRPIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwIiwib25tZXNzYWdlIiwiZXZlbnQiLCJkaXN0TWF0QXJyYXkiLCJuIiwibWV0aG9kQ29kZSIsImRhdGEiLCJhc3luYyIsImRpc3RtYXQiLCJtZXRob2QiLCJ3YXNtVXJsIiwiVVJMIiwid2FzbVBhdGgiLCJzdWJzdHJpbmciLCJ3YXNtSW5zdGFuY2UiLCJsb2NhdGVGaWxlIiwicHJpbnRFcnIiLCJfIiwiZXJyb3IiLCJnZXREZW5kcm9ncmFtV2FzbSIsImN3cmFwIiwiYnl0ZXNGb3JEaXN0TWF0IiwiQllURVNfUEVSX0VMRU1FTlQiLCJkYXRhUHRyIiwiX21hbGxvYyIsIm1hdEhlYXAiLCJieXRlc0Zvck1lcmdlQXJyYXkiLCJtZXJnZVB0ciIsIm1lcmdlSGVhcCIsImJ5dGVzRm9ySGVpZ2h0c0FycmF5IiwiaGVpZ2h0c1B0ciIsImhlaWdodHNIZWFwIiwibWVyZ2VSZXN1bHQiLCJieXRlT2Zmc2V0IiwiaGVpZ2h0c1Jlc3VsdCIsInNsaWNlIiwibWVyZ2VSb3cxIiwibWVyZ2VSb3cyIiwiX2ZyZWUiLCJnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbSIsImNsdXN0ZXJNYXRyaXgiLCJwb3N0TWVzc2FnZSJdLCJzb3VyY2VSb290IjoiIn0=
1
+ var peptides;(()=>{"use strict";var t,e={138:(t,e,r)=>{r.d(e,{W:()=>i}),t=r.hmd(t);var n,i=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,r,i=void 0!==t?t:{};i.ready=new Promise((function(t,n){e=t,r=n}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&R("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[],A=0,_=null,E=null;function R(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}var x,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function j(t){try{if(t==x&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){R(t)}}function O(t,e,r){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return j(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return j(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(r,(function(t){p("failed to asynchronously prepare wasm: "+t),R(t)}))}function U(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=h[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13>>0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function T(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function C(t){return i["_"+t]}S(x="wasmCluster.wasm")||(P=x,x=i.locateFile?i.locateFile(P,c):c+P);var M="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function W(t,e,r,n,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,r=0;r<t.length;++r){var n=t.charCodeAt(r);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++r):e+=3}return e}(t)+1,r=k(e);return function(t,e,r){!function(t,e,r,n){if(!(n>0))return 0;for(var i=r+n-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(r>=i)break;e[r++]=a}else if(a<=2047){if(r+1>=i)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=i)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=i)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}e[r]=0}(t,d,e,r)}(t,r,e),r}(t)),e},array:t=>{var e,r,n=k(t.length);return e=t,r=n,h.set(e,r),n}},a=C(t),s=[],u=0;if(n)for(var c=0;c<n.length;c++){var f=o[r[c]];f?(0===u&&(u=B()),s[c]=f(n[c])):s[c]=n[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===e?(r=t)?function(t,e,r){for(var n=e+r,i=e;t[i]&&!(i>=n);)++i;if(i-e>16&&t.buffer&&M)return M.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,r,n):"":"boolean"===e?Boolean(t):t;var r,n}(t)}(l)}var F,H={d:function(t,e,r){throw new I(t).init(e,r),t},a:function(){R("")},c:function(t,e,r){d.copyWithin(t,e,e+r)},b:function(t){var e,r=d.length,n=2147483648;if((t>>>=0)>n)return!1;for(var i=1;i<=4;i*=2){var o=r*(1+.2/i);if(o=Math.min(o,t+100663296),T(Math.min(n,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},B=(function(){var t,e,n,o,a={a:H};function s(t,e){var r,n=t.exports;return i.asm=n,l=i.asm.e,b(),i.asm.i,r=i.asm.f,w.unshift(r),function(t){if(A--,i.monitorRunDependencies&&i.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),E)){var e=E;E=null,e()}}(),n}if(A++,i.monitorRunDependencies&&i.monitorRunDependencies(A),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),r(t)}(t=f,e=x,n=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?O(e,n,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,n).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,n,o)}))}))).catch(r)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(B=i.asm.k).apply(null,arguments)}),D=function(){return(D=i.asm.l).apply(null,arguments)},k=function(){return(k=i.asm.m).apply(null,arguments)},L=function(){return(L=i.asm.n).apply(null,arguments)};function N(){function t(){F||(F=!0,i.calledRun=!0,y||(U(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),v.unshift(t);var t;U(v)}()))}A>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),g.unshift(t);var t;U(g)}(),A>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=W,i.cwrap=function(t,e,r,n){var i=!r||r.every((t=>"number"===t||"boolean"===t));return"string"!==e&&i&&!n?C(t):function(){return W(t,e,r,arguments)}},E=function t(){F||N(),F||(E=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return N(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&r.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppLib=i)},63:(t,e,r)=>{t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},r={};function n(t){var i=r[t];if(void 0!==i)return i.exports;var o=r[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,n),o.loaded=!0,o.exports}n.m=e,n.amdO={},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var i=r.length-1;i>-1&&!t;)t=r[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=self.location+"",t=n(138),onmessage=e=>{const{distMatArray:r,n:i,methodCode:o}=e.data,a={};try{(async function(e,r,i){const o=new URL(n(63),n.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,t.W)({locateFile:()=>a,printErr:t=>{}})}catch(e){try{s=await(0,t.W)({locateFile:()=>o,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for hierarchical clustering")}}const u=s.cwrap("getDendrogram","null",["number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*e.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(e.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(r-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(r-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,r,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(r-1)),w=new Float32Array(b.buffer,b.byteOffset,r-1).slice(0,r-1),v=g.slice(0,r-1),A=g.slice(r-1,2*r-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(r,i,o).then((t=>{a.clusterMatrix=t,postMessage(a)}))}catch(t){a.error=t,postMessage(a)}},peptides={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SCxXQUFXeU4sRUFBUXhNLFNBR25DLE1BQU0wTixFQUFxQnZOLFdBQVdtTixtQkFBcUJsQixFQUFJLEdBQUssRUFDOUR1QixFQUFXYixFQUFhVSxRQUFRRSxHQUNoQ0UsRUFBWSxJQUFJN08sV0FBVytOLEVBQWFuTixPQUFPSyxPQUFRMk4sRUFBVUQsR0FHakVHLEVBQXVCdk4sYUFBYWdOLG1CQUFxQmxCLEVBQUksR0FDN0QwQixFQUFhaEIsRUFBYVUsUUFBUUssR0FDbENFLEVBQWMsSUFBSWhQLFdBQVcrTixFQUFhbk4sT0FBT0ssT0FBUThOLEVBQVlELEdBRzNFVixFQUFrQkksRUFBU25CLEVBQUdLLEVBQVFrQixFQUFVRyxHQUVoRCxNQUFNRSxFQUFjLElBQUk3TixXQUFXeU4sRUFBVTVOLE9BQVE0TixFQUFVSyxXQUFvQixHQUFQN0IsRUFBRSxJQUN4RThCLEVBQWdCLElBQUs1TixhQUFheU4sRUFBWS9OLE9BQVErTixFQUFZRSxXQUFZN0IsRUFBRSxHQUFJK0IsTUFBTSxFQUFHL0IsRUFBRSxHQUUvRmdDLEVBQVlKLEVBQVlHLE1BQU0sRUFBRy9CLEVBQUUsR0FDbkNpQyxFQUFZTCxFQUFZRyxNQUFNL0IsRUFBRSxFQUFHLEVBQUVBLEVBQUksR0FLL0MsT0FIQVUsRUFBYXdCLE1BQU1iLEVBQVFRLFlBQzNCbkIsRUFBYXdCLE1BQU1WLEVBQVVLLFlBQzdCbkIsRUFBYXdCLE1BQU1QLEVBQVlFLFlBQ3hCLENBQUNHLFlBQVdDLFlBQVdILGdCQUNoQyxFRHREUUssQ0FBMkJwQyxFQUFjQyxFQUFHQyxHQUN2Q3hLLE1BQU0yTSxJQUNQbEMsRUFBS2tDLGNBQWdCQSxFQUNyQkMsWUFBWW5DLEVBQUssR0FFekIsQ0FDQSxNQUFPdkwsR0FDSHVMLEVBQUtZLE1BQVFuTSxFQUNiME4sWUFBWW5DLEVBQ2hCLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vd2FzbUNsdXN0ZXIuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS9jbHVzdGVyaW5nLXdvcmtlci5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vY2x1c3Rlcml6ZXJXYXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgZXhwb3J0Q3BwTGliID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPVxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gZnVuY3Rpb24gKGV4cG9ydENwcExpYiA9IHt9KSB7XG4gICAgdmFyIE1vZHVsZSA9IHR5cGVvZiBleHBvcnRDcHBMaWIgIT0gXCJ1bmRlZmluZWRcIiA/IGV4cG9ydENwcExpYiA6IHt9O1xuICAgIHZhciByZWFkeVByb21pc2VSZXNvbHZlLCByZWFkeVByb21pc2VSZWplY3Q7XG4gICAgTW9kdWxlW1wicmVhZHlcIl0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZWFkeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHJlYWR5UHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICB2YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTtcbiAgICB2YXIgYXJndW1lbnRzXyA9IFtdO1xuICAgIHZhciB0aGlzUHJvZ3JhbSA9IFwiLi90aGlzLnByb2dyYW1cIjtcbiAgICB2YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XG4gICAgICB0aHJvdyB0b1Rocm93O1xuICAgIH07XG4gICAgdmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIjtcbiAgICB2YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT0gXCJmdW5jdGlvblwiO1xuICAgIHZhciBFTlZJUk9OTUVOVF9JU19OT0RFID1cbiAgICAgIHR5cGVvZiBwcm9jZXNzID09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT0gXCJzdHJpbmdcIjtcbiAgICB2YXIgc2NyaXB0RGlyZWN0b3J5ID0gXCJcIjtcbiAgICBmdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcbiAgICAgIGlmIChNb2R1bGVbXCJsb2NhdGVGaWxlXCJdKSB7XG4gICAgICAgIHJldHVybiBNb2R1bGVbXCJsb2NhdGVGaWxlXCJdKHBhdGgsIHNjcmlwdERpcmVjdG9yeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcbiAgICB9XG4gICAgdmFyIHJlYWRfLCByZWFkQXN5bmMsIHJlYWRCaW5hcnksIHNldFdpbmRvd1RpdGxlO1xuICAgIGlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IHNlbGYubG9jYXRpb24uaHJlZjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkge1xuICAgICAgICBzY3JpcHREaXJlY3RvcnkgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcbiAgICAgIH1cbiAgICAgIGlmIChfc2NyaXB0RGlyKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IF9zY3JpcHREaXI7XG4gICAgICB9XG4gICAgICBpZiAoc2NyaXB0RGlyZWN0b3J5LmluZGV4T2YoXCJibG9iOlwiKSAhPT0gMCkge1xuICAgICAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSArIDFcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IFwiXCI7XG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIHJlYWRfID0gKHVybCkgPT4ge1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB1cmwsIGZhbHNlKTtcbiAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikge1xuICAgICAgICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB1cmwsIGZhbHNlKTtcbiAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgdHJ1ZSk7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25lcnJvcigpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgeGhyLm9uZXJyb3IgPSBvbmVycm9yO1xuICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc2V0V2luZG93VGl0bGUgPSAodGl0bGUpID0+IChkb2N1bWVudC50aXRsZSA9IHRpdGxlKTtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgICB2YXIgb3V0ID0gTW9kdWxlW1wicHJpbnRcIl0gfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICB2YXIgZXJyID0gTW9kdWxlW1wicHJpbnRFcnJcIl0gfHwgY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG4gICAgT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7XG4gICAgbW9kdWxlT3ZlcnJpZGVzID0gbnVsbDtcbiAgICBpZiAoTW9kdWxlW1wiYXJndW1lbnRzXCJdKSBhcmd1bWVudHNfID0gTW9kdWxlW1wiYXJndW1lbnRzXCJdO1xuICAgIGlmIChNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXTtcbiAgICBpZiAoTW9kdWxlW1wicXVpdFwiXSkgcXVpdF8gPSBNb2R1bGVbXCJxdWl0XCJdO1xuICAgIHZhciB3YXNtQmluYXJ5O1xuICAgIGlmIChNb2R1bGVbXCJ3YXNtQmluYXJ5XCJdKSB3YXNtQmluYXJ5ID0gTW9kdWxlW1wid2FzbUJpbmFyeVwiXTtcbiAgICB2YXIgbm9FeGl0UnVudGltZSA9IE1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl0gfHwgdHJ1ZTtcbiAgICBpZiAodHlwZW9mIFdlYkFzc2VtYmx5ICE9IFwib2JqZWN0XCIpIHtcbiAgICAgIGFib3J0KFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTtcbiAgICB9XG4gICAgdmFyIHdhc21NZW1vcnk7XG4gICAgdmFyIEFCT1JUID0gZmFsc2U7XG4gICAgdmFyIEVYSVRTVEFUVVM7XG4gICAgdmFyIEhFQVA4LCBIRUFQVTgsIEhFQVAxNiwgSEVBUFUxNiwgSEVBUDMyLCBIRUFQVTMyLCBIRUFQRjMyLCBIRUFQRjY0O1xuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW9yeVZpZXdzKCkge1xuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcbiAgICAgIE1vZHVsZVtcIkhFQVA4XCJdID0gSEVBUDggPSBuZXcgSW50OEFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUDE2XCJdID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQMzJcIl0gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBVOFwiXSA9IEhFQVBVOCA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUFUxNlwiXSA9IEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQVTMyXCJdID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBGMzJcIl0gPSBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBGNjRcIl0gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTtcbiAgICB9XG4gICAgdmFyIHdhc21UYWJsZTtcbiAgICB2YXIgX19BVFBSRVJVTl9fID0gW107XG4gICAgdmFyIF9fQVRJTklUX18gPSBbXTtcbiAgICB2YXIgX19BVFBPU1RSVU5fXyA9IFtdO1xuICAgIHZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBwcmVSdW4oKSB7XG4gICAgICBpZiAoTW9kdWxlW1wicHJlUnVuXCJdKSB7XG4gICAgICAgIGlmICh0eXBlb2YgTW9kdWxlW1wicHJlUnVuXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBNb2R1bGVbXCJwcmVSdW5cIl0gPSBbTW9kdWxlW1wicHJlUnVuXCJdXTtcbiAgICAgICAgd2hpbGUgKE1vZHVsZVtcInByZVJ1blwiXS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRPblByZVJ1bihNb2R1bGVbXCJwcmVSdW5cIl0uc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRSdW50aW1lKCkge1xuICAgICAgcnVudGltZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3N0UnVuKCkge1xuICAgICAgaWYgKE1vZHVsZVtcInBvc3RSdW5cIl0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwb3N0UnVuXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBNb2R1bGVbXCJwb3N0UnVuXCJdID0gW01vZHVsZVtcInBvc3RSdW5cIl1dO1xuICAgICAgICB3aGlsZSAoTW9kdWxlW1wicG9zdFJ1blwiXS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRPblBvc3RSdW4oTW9kdWxlW1wicG9zdFJ1blwiXS5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XG4gICAgICBfX0FUUFJFUlVOX18udW5zaGlmdChjYik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xuICAgICAgX19BVElOSVRfXy51bnNoaWZ0KGNiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XG4gICAgICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpO1xuICAgIH1cbiAgICB2YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcbiAgICB2YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xuICAgIHZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcbiAgICAgIHJ1bkRlcGVuZGVuY2llcysrO1xuICAgICAgaWYgKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7XG4gICAgICBydW5EZXBlbmRlbmNpZXMtLTtcbiAgICAgIGlmIChNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKSB7XG4gICAgICAgIE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0ocnVuRGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChydW5EZXBlbmRlbmNpZXMgPT0gMCkge1xuICAgICAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtcbiAgICAgICAgICBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGRlcGVuZGVuY2llc0Z1bGZpbGxlZDtcbiAgICAgICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWJvcnQod2hhdCkge1xuICAgICAgaWYgKE1vZHVsZVtcIm9uQWJvcnRcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wib25BYm9ydFwiXSh3aGF0KTtcbiAgICAgIH1cbiAgICAgIHdoYXQgPSBcIkFib3J0ZWQoXCIgKyB3aGF0ICsgXCIpXCI7XG4gICAgICBlcnIod2hhdCk7XG4gICAgICBBQk9SVCA9IHRydWU7XG4gICAgICBFWElUU1RBVFVTID0gMTtcbiAgICAgIHdoYXQgKz0gXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCI7XG4gICAgICB2YXIgZSA9IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Iod2hhdCk7XG4gICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB2YXIgZGF0YVVSSVByZWZpeCA9IFwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LFwiO1xuICAgIGZ1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZGF0YVVSSVByZWZpeCk7XG4gICAgfVxuICAgIHZhciB3YXNtQmluYXJ5RmlsZTtcbiAgICB3YXNtQmluYXJ5RmlsZSA9IFwid2FzbUNsdXN0ZXIud2FzbVwiO1xuICAgIGlmICghaXNEYXRhVVJJKHdhc21CaW5hcnlGaWxlKSkge1xuICAgICAgd2FzbUJpbmFyeUZpbGUgPSBsb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmaWxlID09IHdhc21CaW5hcnlGaWxlICYmIHdhc21CaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlYWRCaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgYWJvcnQoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKSB7XG4gICAgICBpZiAoIXdhc21CaW5hcnkgJiYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmV0Y2ggPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbXCJva1wiXSkge1xuICAgICAgICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW1wiYXJyYXlCdWZmZXJcIl0oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XG4gICAgICByZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoYmluYXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSwgaW1wb3J0cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVjZWl2ZXIsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBlcnIoXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIiArIHJlYXNvbik7XG4gICAgICAgICAgYWJvcnQocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xuICAgICAgaWYgKFxuICAgICAgICAhYmluYXJ5ICYmXG4gICAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgIWlzRGF0YVVSSShiaW5hcnlGaWxlKSAmJlxuICAgICAgICB0eXBlb2YgZmV0Y2ggPT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KS50aGVuKGZ1bmN0aW9uIChcbiAgICAgICAgICByZXNwb25zZVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcocmVzcG9uc2UsIGltcG9ydHMpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihjYWxsYmFjaywgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgZXJyKFwid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6IFwiICsgcmVhc29uKTtcbiAgICAgICAgICAgIGVycihcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcbiAgICAgIHZhciBpbmZvID0geyBhOiB3YXNtSW1wb3J0cyB9O1xuICAgICAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcbiAgICAgICAgdmFyIGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzO1xuICAgICAgICBNb2R1bGVbXCJhc21cIl0gPSBleHBvcnRzO1xuICAgICAgICB3YXNtTWVtb3J5ID0gTW9kdWxlW1wiYXNtXCJdW1wiZVwiXTtcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcbiAgICAgICAgd2FzbVRhYmxlID0gTW9kdWxlW1wiYXNtXCJdW1wiaVwiXTtcbiAgICAgICAgYWRkT25Jbml0KE1vZHVsZVtcImFzbVwiXVtcImZcIl0pO1xuICAgICAgICByZW1vdmVSdW5EZXBlbmRlbmN5KFwid2FzbS1pbnN0YW50aWF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9XG4gICAgICBhZGRSdW5EZXBlbmRlbmN5KFwid2FzbS1pbnN0YW50aWF0ZVwiKTtcbiAgICAgIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xuICAgICAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0W1wiaW5zdGFuY2VcIl0pO1xuICAgICAgfVxuICAgICAgaWYgKE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl0oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGVycihcIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnN0YW50aWF0ZUFzeW5jKFxuICAgICAgICB3YXNtQmluYXJ5LFxuICAgICAgICB3YXNtQmluYXJ5RmlsZSxcbiAgICAgICAgaW5mbyxcbiAgICAgICAgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHRcbiAgICAgICkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFJ1bnRpbWVDYWxsYmFja3MoY2FsbGJhY2tzKSB7XG4gICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gRXhjZXB0aW9uSW5mbyhleGNQdHIpIHtcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xuICAgICAgdGhpcy5wdHIgPSBleGNQdHIgLSAyNDtcbiAgICAgIHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBIRUFQVTMyWyh0aGlzLnB0ciArIDQpID4+IDJdID0gdHlwZTtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF90eXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyA0KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24gKGRlc3RydWN0b3IpIHtcbiAgICAgICAgSEVBUFUzMlsodGhpcy5wdHIgKyA4KSA+PiAyXSA9IGRlc3RydWN0b3I7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKHRoaXMucHRyICsgOCkgPj4gMl07XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKGNhdWdodCkge1xuICAgICAgICBjYXVnaHQgPSBjYXVnaHQgPyAxIDogMDtcbiAgICAgICAgSEVBUDhbKHRoaXMucHRyICsgMTIpID4+IDBdID0gY2F1Z2h0O1xuICAgICAgfTtcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVA4Wyh0aGlzLnB0ciArIDEyKSA+PiAwXSAhPSAwO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0X3JldGhyb3duID0gZnVuY3Rpb24gKHJldGhyb3duKSB7XG4gICAgICAgIHJldGhyb3duID0gcmV0aHJvd24gPyAxIDogMDtcbiAgICAgICAgSEVBUDhbKHRoaXMucHRyICsgMTMpID4+IDBdID0gcmV0aHJvd247XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQOFsodGhpcy5wdHIgKyAxMykgPj4gMF0gIT0gMDtcbiAgICAgIH07XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAodHlwZSwgZGVzdHJ1Y3Rvcikge1xuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XG4gICAgICAgIHRoaXMuc2V0X3R5cGUodHlwZSk7XG4gICAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24gKGFkanVzdGVkUHRyKSB7XG4gICAgICAgIEhFQVBVMzJbKHRoaXMucHRyICsgMTYpID4+IDJdID0gYWRqdXN0ZWRQdHI7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyAxNikgPj4gMl07XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfZXhjZXB0aW9uX3B0ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlzUG9pbnRlciA9IF9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xuICAgICAgICAgIHJldHVybiBIRUFQVTMyW3RoaXMuZXhjUHRyID4+IDJdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZGp1c3RlZCA9IHRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO1xuICAgICAgICBpZiAoYWRqdXN0ZWQgIT09IDApIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGV4Y2VwdGlvbkxhc3QgPSAwO1xuICAgIHZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50ID0gMDtcbiAgICBmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLCB0eXBlLCBkZXN0cnVjdG9yKSB7XG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XG4gICAgICBleGNlcHRpb25MYXN0ID0gcHRyO1xuICAgICAgdW5jYXVnaHRFeGNlcHRpb25Db3VudCsrO1xuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2Fib3J0KCkge1xuICAgICAgYWJvcnQoXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcbiAgICAgIEhFQVBVOC5jb3B5V2l0aGluKGRlc3QsIHNyYywgc3JjICsgbnVtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGVhcE1heCgpIHtcbiAgICAgIHJldHVybiAyMTQ3NDgzNjQ4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpIHtcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XG4gICAgICB0cnkge1xuICAgICAgICB3YXNtTWVtb3J5Lmdyb3coKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgPj4+IDE2KTtcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XG4gICAgICB2YXIgb2xkU2l6ZSA9IEhFQVBVOC5sZW5ndGg7XG4gICAgICByZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVkU2l6ZSA+Pj4gMDtcbiAgICAgIHZhciBtYXhIZWFwU2l6ZSA9IGdldEhlYXBNYXgoKTtcbiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbGV0IGFsaWduVXAgPSAoeCwgbXVsdGlwbGUpID0+XG4gICAgICAgIHggKyAoKG11bHRpcGxlIC0gKHggJSBtdWx0aXBsZSkpICUgbXVsdGlwbGUpO1xuICAgICAgZm9yICh2YXIgY3V0RG93biA9IDE7IGN1dERvd24gPD0gNDsgY3V0RG93biAqPSAyKSB7XG4gICAgICAgIHZhciBvdmVyR3Jvd25IZWFwU2l6ZSA9IG9sZFNpemUgKiAoMSArIDAuMiAvIGN1dERvd24pO1xuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKFxuICAgICAgICAgIG92ZXJHcm93bkhlYXBTaXplLFxuICAgICAgICAgIHJlcXVlc3RlZFNpemUgKyAxMDA2NjMyOTZcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihcbiAgICAgICAgICBtYXhIZWFwU2l6ZSxcbiAgICAgICAgICBhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsIG92ZXJHcm93bkhlYXBTaXplKSwgNjU1MzYpXG4gICAgICAgICk7XG4gICAgICAgIHZhciByZXBsYWNlbWVudCA9IGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7XG4gICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XG4gICAgICB2YXIgZnVuYyA9IE1vZHVsZVtcIl9cIiArIGlkZW50XTtcbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xuICAgICAgSEVBUDguc2V0KGFycmF5LCBidWZmZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjgoc3RyKSB7XG4gICAgICB2YXIgbGVuID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDw9IDEyNykge1xuICAgICAgICAgIGxlbisrO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMjA0Nykge1xuICAgICAgICAgIGxlbiArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gNTUyOTYgJiYgYyA8PSA1NzM0Mykge1xuICAgICAgICAgIGxlbiArPSA0O1xuICAgICAgICAgICsraTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW4gKz0gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBoZWFwLCBvdXRJZHgsIG1heEJ5dGVzVG9Xcml0ZSkge1xuICAgICAgaWYgKCEobWF4Qnl0ZXNUb1dyaXRlID4gMCkpIHJldHVybiAwO1xuICAgICAgdmFyIHN0YXJ0SWR4ID0gb3V0SWR4O1xuICAgICAgdmFyIGVuZElkeCA9IG91dElkeCArIG1heEJ5dGVzVG9Xcml0ZSAtIDE7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAodSA+PSA1NTI5NiAmJiB1IDw9IDU3MzQzKSB7XG4gICAgICAgICAgdmFyIHUxID0gc3RyLmNoYXJDb2RlQXQoKytpKTtcbiAgICAgICAgICB1ID0gKDY1NTM2ICsgKCh1ICYgMTAyMykgPDwgMTApKSB8ICh1MSAmIDEwMjMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1IDw9IDEyNykge1xuICAgICAgICAgIGlmIChvdXRJZHggPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAyMDQ3KSB7XG4gICAgICAgICAgaWYgKG91dElkeCArIDEgPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDE5MiB8ICh1ID4+IDYpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKHUgJiA2Myk7XG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSA2NTUzNSkge1xuICAgICAgICAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAyMjQgfCAodSA+PiAxMik7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAoKHUgPj4gNikgJiA2Myk7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAodSAmIDYzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMyA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMjQwIHwgKHUgPj4gMTgpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKCh1ID4+IDEyKSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICgodSA+PiA2KSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICh1ICYgNjMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoZWFwW291dElkeF0gPSAwO1xuICAgICAgcmV0dXJuIG91dElkeCAtIHN0YXJ0SWR4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xuICAgICAgcmV0dXJuIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgSEVBUFU4LCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XG4gICAgICB2YXIgc2l6ZSA9IGxlbmd0aEJ5dGVzVVRGOChzdHIpICsgMTtcbiAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKHNpemUpO1xuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHZhciBVVEY4RGVjb2RlciA9XG4gICAgICB0eXBlb2YgVGV4dERlY29kZXIgIT0gXCJ1bmRlZmluZWRcIiA/IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIikgOiB1bmRlZmluZWQ7XG4gICAgZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksIGlkeCwgbWF4Qnl0ZXNUb1JlYWQpIHtcbiAgICAgIHZhciBlbmRJZHggPSBpZHggKyBtYXhCeXRlc1RvUmVhZDtcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcbiAgICAgIGlmIChlbmRQdHIgLSBpZHggPiAxNiAmJiBoZWFwT3JBcnJheS5idWZmZXIgJiYgVVRGOERlY29kZXIpIHtcbiAgICAgICAgcmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwT3JBcnJheS5zdWJhcnJheShpZHgsIGVuZFB0cikpO1xuICAgICAgfVxuICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICB3aGlsZSAoaWR4IDwgZW5kUHRyKSB7XG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcbiAgICAgICAgaWYgKCEodTAgJiAxMjgpKSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1MSA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xuICAgICAgICBpZiAoKHUwICYgMjI0KSA9PSAxOTIpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xuICAgICAgICBpZiAoKHUwICYgMjQwKSA9PSAyMjQpIHtcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdTAgPVxuICAgICAgICAgICAgKCh1MCAmIDcpIDw8IDE4KSB8XG4gICAgICAgICAgICAodTEgPDwgMTIpIHxcbiAgICAgICAgICAgICh1MiA8PCA2KSB8XG4gICAgICAgICAgICAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1MCA8IDY1NTM2KSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjaCA9IHUwIC0gNjU1MzY7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCAoY2ggPj4gMTApLCA1NjMyMCB8IChjaCAmIDEwMjMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZnVuY3Rpb24gVVRGOFRvU3RyaW5nKHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIHtcbiAgICAgIHJldHVybiBwdHIgPyBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgsIHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XG4gICAgICB2YXIgdG9DID0ge1xuICAgICAgICBzdHJpbmc6IChzdHIpID0+IHtcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcbiAgICAgICAgICBpZiAoc3RyICE9PSBudWxsICYmIHN0ciAhPT0gdW5kZWZpbmVkICYmIHN0ciAhPT0gMCkge1xuICAgICAgICAgICAgcmV0ID0gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9LFxuICAgICAgICBhcnJheTogKGFycikgPT4ge1xuICAgICAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKGFyci5sZW5ndGgpO1xuICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeShhcnIsIHJldCk7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KSB7XG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIEJvb2xlYW4ocmV0KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpO1xuICAgICAgdmFyIGNBcmdzID0gW107XG4gICAgICB2YXIgc3RhY2sgPSAwO1xuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XG4gICAgICAgICAgaWYgKGNvbnZlcnRlcikge1xuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwKSBzdGFjayA9IHN0YWNrU2F2ZSgpO1xuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNBcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcbiAgICAgIGZ1bmN0aW9uIG9uRG9uZShyZXQpIHtcbiAgICAgICAgaWYgKHN0YWNrICE9PSAwKSBzdGFja1Jlc3RvcmUoc3RhY2spO1xuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XG4gICAgICB9XG4gICAgICByZXQgPSBvbkRvbmUocmV0KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xuICAgICAgdmFyIG51bWVyaWNBcmdzID1cbiAgICAgICAgIWFyZ1R5cGVzIHx8XG4gICAgICAgIGFyZ1R5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiKTtcbiAgICAgIHZhciBudW1lcmljUmV0ID0gcmV0dXJuVHlwZSAhPT0gXCJzdHJpbmdcIjtcbiAgICAgIGlmIChudW1lcmljUmV0ICYmIG51bWVyaWNBcmdzICYmICFvcHRzKSB7XG4gICAgICAgIHJldHVybiBnZXRDRnVuYyhpZGVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHdhc21JbXBvcnRzID0ge1xuICAgICAgZDogX19fY3hhX3Rocm93LFxuICAgICAgYTogX2Fib3J0LFxuICAgICAgYzogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcbiAgICAgIGI6IF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwLFxuICAgIH07XG4gICAgdmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcbiAgICB2YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJmXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIF9nZXREZW5kcm9ncmFtID0gKE1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfZ2V0RGVuZHJvZ3JhbSA9IE1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdID1cbiAgICAgICAgTW9kdWxlW1wiYXNtXCJdW1wiZ1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9KTtcbiAgICB2YXIgX2ZyZWUgPSAoTW9kdWxlW1wiX2ZyZWVcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJoXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBfX19lcnJub19sb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbXCJhc21cIl1bXCJfX2Vycm5vX2xvY2F0aW9uXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIF9tYWxsb2MgPSAoTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJqXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBzdGFja1NhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrU2F2ZSA9IE1vZHVsZVtcImFzbVwiXVtcImtcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJsXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIHN0YWNrQWxsb2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrQWxsb2MgPSBNb2R1bGVbXCJhc21cIl1bXCJtXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJuXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcbiAgICBNb2R1bGVbXCJjd3JhcFwiXSA9IGN3cmFwO1xuICAgIHZhciBjYWxsZWRSdW47XG4gICAgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xuICAgICAgaWYgKCFjYWxsZWRSdW4pIHJ1bigpO1xuICAgICAgaWYgKCFjYWxsZWRSdW4pIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bkNhbGxlcjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByZVJ1bigpO1xuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcbiAgICAgICAgY2FsbGVkUnVuID0gdHJ1ZTtcbiAgICAgICAgTW9kdWxlW1wiY2FsbGVkUnVuXCJdID0gdHJ1ZTtcbiAgICAgICAgaWYgKEFCT1JUKSByZXR1cm47XG4gICAgICAgIGluaXRSdW50aW1lKCk7XG4gICAgICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcbiAgICAgICAgaWYgKE1vZHVsZVtcIm9uUnVudGltZUluaXRpYWxpemVkXCJdKSBNb2R1bGVbXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiXSgpO1xuICAgICAgICBwb3N0UnVuKCk7XG4gICAgICB9XG4gICAgICBpZiAoTW9kdWxlW1wic2V0U3RhdHVzXCJdKSB7XG4gICAgICAgIE1vZHVsZVtcInNldFN0YXR1c1wiXShcIlJ1bm5pbmcuLi5cIik7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgTW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpO1xuICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9SdW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE1vZHVsZVtcInByZUluaXRcIl0pIHtcbiAgICAgIGlmICh0eXBlb2YgTW9kdWxlW1wicHJlSW5pdFwiXSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIE1vZHVsZVtcInByZUluaXRcIl0gPSBbTW9kdWxlW1wicHJlSW5pdFwiXV07XG4gICAgICB3aGlsZSAoTW9kdWxlW1wicHJlSW5pdFwiXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIE1vZHVsZVtcInByZUluaXRcIl0ucG9wKCkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnVuKCk7XG5cbiAgICByZXR1cm4gZXhwb3J0Q3BwTGliLnJlYWR5O1xuICB9O1xufSkoKTtcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKVxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcExpYjtcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmVbXCJhbWRcIl0pXG4gIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBleHBvcnRDcHBMaWI7XG4gIH0pO1xuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIGV4cG9ydHNbXCJleHBvcnRDcHBMaWJcIl0gPSBleHBvcnRDcHBMaWI7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MzU2OiAxXG59O1xuXG4vLyBubyBjaHVuayBpbnN0YWxsIGZ1bmN0aW9uIG5lZWRlZFxuLy8gbm8gY2h1bmsgbG9hZGluZ1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiaW1wb3J0IHsgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20gfSBmcm9tICcuL2NsdXN0ZXJpemVyV2FzbSc7XG5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGRpc3RNYXRBcnJheSwgbiwgbWV0aG9kQ29kZSB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgdHJ5IHtcbiAgICAgICAgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20oZGlzdE1hdEFycmF5LCBuLCBtZXRob2RDb2RlKVxuICAgICAgICAgICAgLnRoZW4oKGNsdXN0ZXJNYXRyaXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEuY2x1c3Rlck1hdHJpeCA9IGNsdXN0ZXJNYXRyaXg7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2x1c3RlcmluZy13b3JrZXIuanMubWFwIiwiaW1wb3J0IHtleHBvcnRDcHBMaWJ9IGZyb20gJy4vd2FzbUNsdXN0ZXIuanMnO1xuXG4vKipcbiBjYWxscyB3YXNtIGZ1bmN0aW9uIHRvIGdldCBjbHVzdGVyaW5nIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIGRpc3RhbmNlIG1hdHJpeFxuIGRpc3RtYXQ6IGRpc3RhbmNlIG1hdHJpeCBhcyBhbiBhcnJheSBvZiBmbG9hdHMgY29tcHJpc2luZyB0aGUgdG9wIHJpZ2h0IHRyaWFuZ2xlIG9mIHRoZSBtYXRyaXhcbiBuOiBudW1iZXIgb2Ygb2JzZXJ2YWJsZXNcbiBtZXRob2Q6IDAgPSBzaW5nbGUgbGlua2FnZSwgMSA9IGNvbXBsZXRlIGxpbmthZ2UsIDIgPSBhdmVyYWdlIGxpbmthZ2UsIDMgPSBtZWRpYW4gbGlua2FnZVxuIHJlc3VsdDogeyBtZXJnZVJlc3VsdDogSW50MzJBcnJheSwgaGVpZ2h0c1Jlc3VsdDogRmxvYXQzMkFycmF5IH1cbiBtZXJnZVJlc3VsdCBoYXMgbGVuZ3RoIG9mIChuLTEpKjIgYW5kIGhlaWdodFJlc3VsdCBoYXMgbGVuZ3RoIG9mIG4tMVxuIHRvZ2V0aGVyIHRoZXkgZGVzY3JpYmUgdGhlIGNsdXN0ZXJpbmcgYXMgYSBkZW5kcm9ncmFtIGFzIGEgbWF0cml4IG9mIChuLTEpIFggM1xuIGVhY2ggcm93IGluIHRoZSBnaXZlbiBtYXRyaXggY29tcHJpc2VzIHRoZSBtZXJnZSBldmVudCBhdCBzdGVwIGkgYW5kIGxhc3QgY29sdW1uIGlzIHRoZSBoZWlnaHQgZnJvbSB0aGUgbGVhdmVzLlxuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbShkaXN0bWF0LCBuLCBtZXRob2QpIHtcbiAgY29uc3Qgd2FzbVVybCA9IG5ldyBVUkwoJy4vd2FzbUNsdXN0ZXIud2FzbScsIGltcG9ydC5tZXRhLnVybCkuaHJlZjtcbiAgY29uc3Qgd2FzbVBhdGggPSB3YXNtVXJsLnN1YnN0cmluZygwLCB3YXNtVXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICd3YXNtQ2x1c3Rlci53YXNtJztcbiAgbGV0IHdhc21JbnN0YW5jZTtcbiAgdHJ5IHtcbiAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcExpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVBhdGgsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICB3YXNtSW5zdGFuY2UgPSBhd2FpdCBleHBvcnRDcHBMaWIoe2xvY2F0ZUZpbGU6ICgpID0+IHdhc21VcmwsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsb2FkIHdhc20gZmlsZSBmb3IgaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcnKTtcbiAgICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdldERlbmRyb2dyYW1XYXNtID1cbiAgICB3YXNtSW5zdGFuY2UuY3dyYXAoJ2dldERlbmRyb2dyYW0nLCAnbnVsbCcsIFsnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddKTtcbiAgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGRpc3RhbmNlIG1hdHJpeFxuICBjb25zdCBieXRlc0ZvckRpc3RNYXQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBkaXN0bWF0Lmxlbmd0aDtcbiAgY29uc3QgZGF0YVB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRGlzdE1hdCk7XG4gIGNvbnN0IG1hdEhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0ciwgYnl0ZXNGb3JEaXN0TWF0KTtcbiAgbWF0SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZGlzdG1hdC5idWZmZXIpKTtcblxuICAvL2FsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBtZXJnZXMgYXJyYXlcbiAgY29uc3QgYnl0ZXNGb3JNZXJnZUFycmF5ID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIChuIC0gMSkgKiAyO1xuICBjb25zdCBtZXJnZVB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yTWVyZ2VBcnJheSk7XG4gIGNvbnN0IG1lcmdlSGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBtZXJnZVB0ciwgYnl0ZXNGb3JNZXJnZUFycmF5KTtcblxuICAvL2FsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBoZWlndCBhcnJheVxuICBjb25zdCBieXRlc0ZvckhlaWdodHNBcnJheSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIChuIC0gMSk7XG4gIGNvbnN0IGhlaWdodHNQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckhlaWdodHNBcnJheSk7XG4gIGNvbnN0IGhlaWdodHNIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGhlaWdodHNQdHIsIGJ5dGVzRm9ySGVpZ2h0c0FycmF5KTtcblxuICAvLyBjYWxsIHRoZSB3YXNtIGZ1bmN0aW9uXG4gIGdldERlbmRyb2dyYW1XYXNtKGRhdGFQdHIsIG4sIG1ldGhvZCwgbWVyZ2VQdHIsIGhlaWdodHNQdHIpO1xuICAvLyBnZXQgdGhlIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIHRoZSB3YXNtIGhlYXBcbiAgY29uc3QgbWVyZ2VSZXN1bHQgPSBuZXcgSW50MzJBcnJheShtZXJnZUhlYXAuYnVmZmVyLCBtZXJnZUhlYXAuYnl0ZU9mZnNldCwgKG4tMSkgKiAyKTtcbiAgY29uc3QgaGVpZ2h0c1Jlc3VsdCA9IChuZXcgRmxvYXQzMkFycmF5KGhlaWdodHNIZWFwLmJ1ZmZlciwgaGVpZ2h0c0hlYXAuYnl0ZU9mZnNldCwgbi0xKSkuc2xpY2UoMCwgbi0xKTtcblxuICBjb25zdCBtZXJnZVJvdzEgPSBtZXJnZVJlc3VsdC5zbGljZSgwLCBuLTEpO1xuICBjb25zdCBtZXJnZVJvdzIgPSBtZXJnZVJlc3VsdC5zbGljZShuLTEsIDIqbiAtIDIpO1xuICAvLyBmcmVlIHRoZSBtZW1vcnkgYmxvY2tzIG9uIHRoZSB3YXNtIGhlYXBcbiAgd2FzbUluc3RhbmNlLl9mcmVlKG1hdEhlYXAuYnl0ZU9mZnNldCk7XG4gIHdhc21JbnN0YW5jZS5fZnJlZShtZXJnZUhlYXAuYnl0ZU9mZnNldCk7XG4gIHdhc21JbnN0YW5jZS5fZnJlZShoZWlnaHRzSGVhcC5ieXRlT2Zmc2V0KTtcbiAgcmV0dXJuIHttZXJnZVJvdzEsIG1lcmdlUm93MiwgaGVpZ2h0c1Jlc3VsdH07XG59XG4iXSwibmFtZXMiOlsiX3NjcmlwdERpciIsImV4cG9ydENwcExpYiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJFTlZJUk9OTUVOVF9JU19XRUIiLCJ3aW5kb3ciLCJFTlZJUk9OTUVOVF9JU19XT1JLRVIiLCJpbXBvcnRTY3JpcHRzIiwic2NyaXB0RGlyZWN0b3J5IiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsInNlbGYiLCJsb2NhdGlvbiIsImhyZWYiLCJpbmRleE9mIiwic3Vic3RyIiwicmVwbGFjZSIsImxhc3RJbmRleE9mIiwidXJsIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwic2VuZCIsIlVpbnQ4QXJyYXkiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJiaW5kIiwid2FzbUJpbmFyeSIsIndhc21NZW1vcnkiLCJlcnIiLCJ3YXJuIiwiV2ViQXNzZW1ibHkiLCJhYm9ydCIsIkhFQVA4IiwiSEVBUFU4IiwiSEVBUFUzMiIsIkFCT1JUIiwidXBkYXRlTWVtb3J5Vmlld3MiLCJiIiwiYnVmZmVyIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiX19BVFBSRVJVTl9fIiwiX19BVElOSVRfXyIsIl9fQVRQT1NUUlVOX18iLCJydW5EZXBlbmRlbmNpZXMiLCJydW5EZXBlbmRlbmN5V2F0Y2hlciIsImRlcGVuZGVuY2llc0Z1bGZpbGxlZCIsIndoYXQiLCJlIiwiUnVudGltZUVycm9yIiwid2FzbUJpbmFyeUZpbGUiLCJwYXRoIiwiaXNEYXRhVVJJIiwiZmlsZW5hbWUiLCJzdGFydHNXaXRoIiwiZ2V0QmluYXJ5IiwiZmlsZSIsImluc3RhbnRpYXRlQXJyYXlCdWZmZXIiLCJiaW5hcnlGaWxlIiwiaW1wb3J0cyIsInJlY2VpdmVyIiwiZmV0Y2giLCJ0aGVuIiwiY3JlZGVudGlhbHMiLCJjYXRjaCIsImdldEJpbmFyeVByb21pc2UiLCJiaW5hcnkiLCJpbnN0YW50aWF0ZSIsImluc3RhbmNlIiwicmVhc29uIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwicHRyIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9jYXVnaHQiLCJjYXVnaHQiLCJnZXRfY2F1Z2h0Iiwic2V0X3JldGhyb3duIiwicmV0aHJvd24iLCJnZXRfcmV0aHJvd24iLCJpbml0Iiwic2V0X2FkanVzdGVkX3B0ciIsImFkanVzdGVkUHRyIiwiZ2V0X2FkanVzdGVkX3B0ciIsImdldF9leGNlcHRpb25fcHRyIiwiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSIsImFkanVzdGVkIiwiZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlciIsInNpemUiLCJncm93IiwiYnl0ZUxlbmd0aCIsImdldENGdW5jIiwiaWRlbnQiLCJVVEY4RGVjb2RlciIsIlRleHREZWNvZGVyIiwiY2NhbGwiLCJyZXR1cm5UeXBlIiwiYXJnVHlwZXMiLCJhcmdzIiwib3B0cyIsInRvQyIsInN0cmluZyIsInN0ciIsInJldCIsImxlbiIsImkiLCJjIiwiY2hhckNvZGVBdCIsImxlbmd0aEJ5dGVzVVRGOCIsInN0YWNrQWxsb2MiLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiZW5kSWR4IiwidSIsInN0cmluZ1RvVVRGOEFycmF5Iiwic3RyaW5nVG9VVEY4Iiwic3RyaW5nVG9VVEY4T25TdGFjayIsImFycmF5IiwiYXJyIiwic2V0IiwiZnVuYyIsImNBcmdzIiwic3RhY2siLCJjb252ZXJ0ZXIiLCJzdGFja1NhdmUiLCJhcHBseSIsInN0YWNrUmVzdG9yZSIsImhlYXBPckFycmF5IiwiaWR4IiwibWF4Qnl0ZXNUb1JlYWQiLCJlbmRQdHIiLCJkZWNvZGUiLCJzdWJhcnJheSIsInUwIiwidTEiLCJ1MiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoIiwiVVRGOEFycmF5VG9TdHJpbmciLCJCb29sZWFuIiwiY29udmVydFJldHVyblZhbHVlIiwib25Eb25lIiwiY2FsbGVkUnVuIiwid2FzbUltcG9ydHMiLCJkIiwiYSIsImRlc3QiLCJudW0iLCJjb3B5V2l0aGluIiwicmVxdWVzdGVkU2l6ZSIsIngiLCJvbGRTaXplIiwibWF4SGVhcFNpemUiLCJjdXREb3duIiwib3Zlckdyb3duSGVhcFNpemUiLCJNYXRoIiwibWluIiwibWF4IiwiY2FsbGJhY2siLCJpbmZvIiwicmVjZWl2ZUluc3RhbmNlIiwibW9kdWxlIiwiY2IiLCJleHBvcnRzIiwidW5zaGlmdCIsImlkIiwiY2xlYXJJbnRlcnZhbCIsInJlbW92ZVJ1bkRlcGVuZGVuY3kiLCJyZXN1bHQiLCJpbnN0YW50aWF0ZVN0cmVhbWluZyIsImNyZWF0ZVdhc20iLCJhcmd1bWVudHMiLCJydW4iLCJkb1J1biIsInBvc3RSdW4iLCJwcmVSdW4iLCJzZXRUaW1lb3V0IiwibnVtZXJpY0FyZ3MiLCJldmVyeSIsInJ1bkNhbGxlciIsInBvcCIsInJlYWR5IiwiZGVmaW5lIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJhbWRPIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwIiwib25tZXNzYWdlIiwiZXZlbnQiLCJkaXN0TWF0QXJyYXkiLCJuIiwibWV0aG9kQ29kZSIsImRhdGEiLCJhc3luYyIsImRpc3RtYXQiLCJtZXRob2QiLCJ3YXNtVXJsIiwiVVJMIiwid2FzbVBhdGgiLCJzdWJzdHJpbmciLCJ3YXNtSW5zdGFuY2UiLCJsb2NhdGVGaWxlIiwicHJpbnRFcnIiLCJfIiwiZXJyb3IiLCJnZXREZW5kcm9ncmFtV2FzbSIsImN3cmFwIiwiYnl0ZXNGb3JEaXN0TWF0IiwiQllURVNfUEVSX0VMRU1FTlQiLCJkYXRhUHRyIiwiX21hbGxvYyIsIm1hdEhlYXAiLCJieXRlc0Zvck1lcmdlQXJyYXkiLCJtZXJnZVB0ciIsIm1lcmdlSGVhcCIsImJ5dGVzRm9ySGVpZ2h0c0FycmF5IiwiaGVpZ2h0c1B0ciIsImhlaWdodHNIZWFwIiwibWVyZ2VSZXN1bHQiLCJieXRlT2Zmc2V0IiwiaGVpZ2h0c1Jlc3VsdCIsInNsaWNlIiwibWVyZ2VSb3cxIiwibWVyZ2VSb3cyIiwiX2ZyZWUiLCJnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbSIsImNsdXN0ZXJNYXRyaXgiLCJwb3N0TWVzc2FnZSJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/436.js CHANGED
@@ -1,2 +1,2 @@
1
- var peptides;(()=>{"use strict";({8436:function(){var t=this&&this.__awaiter||function(t,n,e,a){return new(e||(e=Promise))((function(o,r){function i(t){try{c(a.next(t))}catch(t){r(t)}}function s(t){try{c(a.throw(t))}catch(t){r(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,s)}c((a=a.apply(t,n||[])).next())}))};onmessage=n=>t(void 0,void 0,void 0,(function*(){var t,e;const{startIdx:a,endIdx:o,activityArray:r,monomerInfoArray:i,settings:s,currentTargetIdx:c}=n.data,l=[],f=[],d=[],h=o-a;let u=0;const v=r.length-2-Math.floor(Math.sqrt(-8*a+4*r.length*(r.length-1)-7)/2-.5);let p=v,g=a-r.length*v+Math.floor((v+1)*(v+2)/2);const w=new Array(i.length);for(;u<h;){if(-1===c||(null===(t=s.targetCol)||void 0===t?void 0:t.rawData[p])===c&&(null===(e=s.targetCol)||void 0===e?void 0:e.rawData[g])===c){let t=0;const n=r[p]-r[g];if(Math.abs(n)>=s.minActivityDelta){let n=!1,e=0;for(const a of i)if(a.rawData[p]!==a.rawData[g]){if(t++,n=t>s.maxMutations,n)break;w[e++]={pos:a.name,seq1Idx:p,seq2Idx:g}}if(!n&&0!==t)for(let t=0;t<e;t++){const n=w[t].pos;l.push(n),f.push(p),d.push(g)}}}u++,g++,g===r.length&&(p++,g=p+1)}postMessage({pos:l,seq1Idxs:new Uint32Array(f),seq2Idxs:new Uint32Array(d)})}))}})[8436](),peptides={}})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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MUJDLFNBQVUsSUFBSTJCLFlBQVkzQixJQUVsQyxHLElDbkVvQixRLFNBRE0sQ0FBQyxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9zcmMvd29ya2Vycy9tdXRhdGlvbi1jbGlmZnMtd29ya2VyLnRzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc3RhcnRJZHgsIGVuZElkeCwgYWN0aXZpdHlBcnJheSwgbW9ub21lckluZm9BcnJheSwgc2V0dGluZ3MsIGN1cnJlbnRUYXJnZXRJZHggfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgcG9zID0gW107XG4gICAgY29uc3Qgc2VxMUlkeHMgPSBbXTtcbiAgICBjb25zdCBzZXEySWR4cyA9IFtdO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gYWN0aXZpdHlBcnJheS5sZW5ndGggLSAyIC0gTWF0aC5mbG9vcihNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiBhY3Rpdml0eUFycmF5Lmxlbmd0aCAqIChhY3Rpdml0eUFycmF5Lmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gYWN0aXZpdHlBcnJheS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBzZXExSWR4ID0gc3RhcnRSb3c7XG4gICAgbGV0IHNlcTJJZHggPSBzdGFydENvbDtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IG5ldyBBcnJheShtb25vbWVySW5mb0FycmF5Lmxlbmd0aCk7XG4gICAgd2hpbGUgKGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICBpZiAoIShjdXJyZW50VGFyZ2V0SWR4ICE9PSAtMSAmJiAoKChfYSA9IHNldHRpbmdzLnRhcmdldENvbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhd0RhdGFbc2VxMUlkeF0pICE9PSBjdXJyZW50VGFyZ2V0SWR4IHx8XG4gICAgICAgICAgICAoKF9iID0gc2V0dGluZ3MudGFyZ2V0Q29sKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmF3RGF0YVtzZXEySWR4XSkgIT09IGN1cnJlbnRUYXJnZXRJZHgpKSkge1xuICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eVZhbFNlcTEgPSBhY3Rpdml0eUFycmF5W3NlcTFJZHhdO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlWYWxTZXEyID0gYWN0aXZpdHlBcnJheVtzZXEySWR4XTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYWN0aXZpdHlWYWxTZXExIC0gYWN0aXZpdHlWYWxTZXEyO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSBzZXR0aW5ncy5taW5BY3Rpdml0eURlbHRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcERhdGFJZHggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9ub21lckluZm8gb2YgbW9ub21lckluZm9BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXExY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTFJZHhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEyY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTJJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VxMWNhdGVnb3J5SWR4ID09PSBzZXEyY2F0ZWdvcnlJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic3RDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHN1YnN0Q291bnRlckZsYWcgPSBzdWJzdENvdW50ZXIgPiBzZXR0aW5ncy5tYXhNdXRhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdENvdW50ZXJGbGFnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3RlbXBEYXRhSWR4KytdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBtb25vbWVySW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeDogc2VxMUlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHg6IHNlcTJJZHgsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHN1YnN0Q291bnRlckZsYWcgfHwgc3Vic3RDb3VudGVyID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBEYXRhSWR4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhRWxlbWVudCA9IHRlbXBEYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wRGF0YUVsZW1lbnQucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeHMucHVzaChzZXExSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHhzLnB1c2goc2VxMklkeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY250Kys7XG4gICAgICAgIHNlcTJJZHgrKztcbiAgICAgICAgaWYgKHNlcTJJZHggPT09IGFjdGl2aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXExSWR4Kys7XG4gICAgICAgICAgICBzZXEySWR4ID0gc2VxMUlkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgc2VxMUlkeHM6IG5ldyBVaW50MzJBcnJheShzZXExSWR4cyksXG4gICAgICAgIHNlcTJJZHhzOiBuZXcgVWludDMyQXJyYXkoc2VxMklkeHMpLFxuICAgIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFYwWVhScGIyNHRZMnhwWm1aekxYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTExZEdGMGFXOXVMV05zYVdabWN5MTNiM0pyWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dEJRVUZCTEZOQlFWTXNSMEZCUnl4RFFVRlBMRXRCUVVzc1JVRkJhVUlzUlVGQlJUczdTVUZEZWtNc1RVRkJUU3hGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNZVUZCWVN4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4blFrRkJaMElzUlVGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRia2NzVFVGQlRTeEhRVUZITEVkQlFXRXNSVUZCUlN4RFFVRkRPMGxCUTNwQ0xFMUJRVTBzVVVGQlVTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxGRkJRVkVzUjBGQllTeEZRVUZGTEVOQlFVTTdTVUZET1VJc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXp0SlFVTndReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2l4TlFVRk5MRkZCUVZFc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOd1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NZVUZCWVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJ4SExFMUJRVTBzVVVGQlVTeEhRVUZITEZGQlFWRXNSMEZCUnl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEhMRWxCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF6dEpRVU4yUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRGRrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRk8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRU3hOUVVGQkxGRkJRVkVzUTBGQlF5eFRRVUZUTERCRFFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlN5eG5Ra0ZCWjBJN1dVRkRla1lzUTBGQlFTeE5RVUZCTEZGQlFWRXNRMEZCUXl4VFFVRlRMREJEUVVGRkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCU3l4blFrRkJaMElzUTBGQlF5eERRVUZETEVWQlFVVTdXVUZETjBRc1NVRkJTU3haUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzSkNMRTFCUVUwc1pVRkJaU3hIUVVGSExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTXZReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRMME1zVFVGQlRTeExRVUZMTEVkQlFVY3NaVUZCWlN4SFFVRkhMR1ZCUVdVc1EwRkJRenRaUVVOb1JDeEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8yZENRVU5vUkN4SlFVRkpMR2RDUVVGblFpeEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkROMElzU1VGQlNTeFhRVUZYTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOd1FpeExRVUZMTEUxQlFVMHNWMEZCVnl4SlFVRkpMR2RDUVVGblFpeEZRVUZGTzI5Q1FVTXhReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yOUNRVU55UkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMjlDUVVOeVJDeEpRVUZKTEdWQlFXVXNTMEZCU3l4bFFVRmxPM2RDUVVOeVF5eFRRVUZUTzI5Q1FVVllMRmxCUVZrc1JVRkJSU3hEUVVGRE8yOUNRVU5tTEdkQ1FVRm5RaXhIUVVGSExGbEJRVmtzUjBGQlJ5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRPMjlDUVVONFJDeEpRVUZKTEdkQ1FVRm5RanQzUWtGRGJFSXNUVUZCVFR0dlFrRkZVaXhSUVVGUkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSMEZCUnp0M1FrRkRlRUlzUjBGQlJ5eEZRVUZGTEZkQlFWY3NRMEZCUXl4SlFVRkpPM2RDUVVOeVFpeFBRVUZQTEVWQlFVVXNUMEZCVHp0M1FrRkRhRUlzVDBGQlR5eEZRVUZGTEU5QlFVODdjVUpCUTJwQ0xFTkJRVU03YVVKQlEwZzdaMEpCUTBRc1NVRkJTU3hEUVVGRExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc1dVRkJXU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTTNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzNkQ1FVTndReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRM0JETEUxQlFVMHNVVUZCVVN4SFFVRkhMR1ZCUVdVc1EwRkJReXhIUVVGSExFTkJRVU03ZDBKQlEzSkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdkMEpCUTI1Q0xGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN2QwSkJRM1pDTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03Y1VKQlEzaENPMmxDUVVOR08yRkJRMFk3VTBGRFJqdFJRVU5FTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTA0c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRFZpeEpRVUZKTEU5QlFVOHNTMEZCU3l4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRk8xbEJRM0JETEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTFZc1QwRkJUeXhIUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZGtJN1MwRkRSanRKUVVORUxGZEJRVmNzUTBGQlF6dFJRVU5XTEVkQlFVY3NSVUZCUlN4SFFVRkhPMUZCUTFJc1VVRkJVU3hGUVVGRkxFbEJRVWtzVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTnVReXhSUVVGUkxFVkJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTXNVVUZCVVN4RFFVRkRPMHRCUTNCRExFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYjI1dFpYTnpZV2RsSUQwZ1lYTjVibU1nS0dWMlpXNTBLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQTlQaUI3WEc0Z0lHTnZibk4wSUh0emRHRnlkRWxrZUN3Z1pXNWtTV1I0TENCaFkzUnBkbWwwZVVGeWNtRjVMQ0J0YjI1dmJXVnlTVzVtYjBGeWNtRjVMQ0J6WlhSMGFXNW5jeXdnWTNWeWNtVnVkRlJoY21kbGRFbGtlSDBnUFNCbGRtVnVkQzVrWVhSaE8xeHVJQ0JqYjI1emRDQndiM002SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJSE5sY1RGSlpIaHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emRDQnpaWEV5U1dSNGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdZMjl1YzNRZ1kyaDFibXRUYVhwbElEMGdaVzVrU1dSNElDMGdjM1JoY25SSlpIZzdYRzRnSUd4bGRDQmpiblFnUFNBd08xeHVJQ0JqYjI1emRDQnpkR0Z5ZEZKdmR5QTlJR0ZqZEdsMmFYUjVRWEp5WVhrdWJHVnVaM1JvSUMwZ01pQXRJRTFoZEdndVpteHZiM0lvWEc0Z0lDQWdUV0YwYUM1emNYSjBLQzA0SUNvZ2MzUmhjblJKWkhnZ0t5QTBJQ29nWVdOMGFYWnBkSGxCY25KaGVTNXNaVzVuZEdnZ0tpQW9ZV04wYVhacGRIbEJjbkpoZVM1c1pXNW5kR2dnTFNBeEtTQXRJRGNwSUM4Z01pQXRJREF1TlNrN1hHNGdJR052Ym5OMElITjBZWEowUTI5c0lEMGdjM1JoY25SSlpIZ2dMU0JoWTNScGRtbDBlVUZ5Y21GNUxteGxibWQwYUNBcUlITjBZWEowVW05M0lDc2dUV0YwYUM1bWJHOXZjaWdvYzNSaGNuUlNiM2NnS3lBeEtTQXFJQ2h6ZEdGeWRGSnZkeUFySURJcElDOGdNaWs3WEc0Z0lHeGxkQ0J6WlhFeFNXUjRJRDBnYzNSaGNuUlNiM2M3WEc0Z0lHeGxkQ0J6WlhFeVNXUjRJRDBnYzNSaGNuUkRiMnc3WEc0Z0lHTnZibk4wSUhSbGJYQkVZWFJoSUQwZ2JtVjNJRUZ5Y21GNUtHMXZibTl0WlhKSmJtWnZRWEp5WVhrdWJHVnVaM1JvS1R0Y2JpQWdkMmhwYkdVZ0tHTnVkQ0E4SUdOb2RXNXJVMmw2WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hLR04xY25KbGJuUlVZWEpuWlhSSlpIZ2dJVDA5SUMweElDWW1JQ2h6WlhSMGFXNW5jeTUwWVhKblpYUkRiMncvTG5KaGQwUmhkR0ZiYzJWeE1VbGtlRjBnSVQwOUlHTjFjbkpsYm5SVVlYSm5aWFJKWkhnZ2ZIeGNiaUFnSUNBZ0lITmxkSFJwYm1kekxuUmhjbWRsZEVOdmJEOHVjbUYzUkdGMFlWdHpaWEV5U1dSNFhTQWhQVDBnWTNWeWNtVnVkRlJoY21kbGRFbGtlQ2twS1NCN1hHNGdJQ0FnSUNCc1pYUWdjM1ZpYzNSRGIzVnVkR1Z5SUQwZ01EdGNiaUFnSUNBZ0lHTnZibk4wSUdGamRHbDJhWFI1Vm1Gc1UyVnhNU0E5SUdGamRHbDJhWFI1UVhKeVlYbGJjMlZ4TVVsa2VGMDdYRzRnSUNBZ0lDQmpiMjV6ZENCaFkzUnBkbWwwZVZaaGJGTmxjVElnUFNCaFkzUnBkbWwwZVVGeWNtRjVXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHVnNkR0VnUFNCaFkzUnBkbWwwZVZaaGJGTmxjVEVnTFNCaFkzUnBkbWwwZVZaaGJGTmxjVEk3WEc0Z0lDQWdJQ0JwWmlBb1RXRjBhQzVoWW5Nb1pHVnNkR0VwSUQ0OUlITmxkSFJwYm1kekxtMXBia0ZqZEdsMmFYUjVSR1ZzZEdFcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhOMVluTjBRMjkxYm5SbGNrWnNZV2NnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnYkdWMElIUmxiWEJFWVhSaFNXUjRJRDBnTUR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnRiMjV2YldWeVNXNW1ieUJ2WmlCdGIyNXZiV1Z5U1c1bWIwRnljbUY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnhNV05oZEdWbmIzSjVTV1I0SUQwZ2JXOXViMjFsY2tsdVptOHVjbUYzUkdGMFlWdHpaWEV4U1dSNFhUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnpaWEV5WTJGMFpXZHZjbmxKWkhnZ1BTQnRiMjV2YldWeVNXNW1ieTV5WVhkRVlYUmhXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHpaWEV4WTJGMFpXZHZjbmxKWkhnZ1BUMDlJSE5sY1RKallYUmxaMjl5ZVVsa2VDbGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dVhHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5S3lzN1hHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5Um14aFp5QTlJSE4xWW5OMFEyOTFiblJsY2lBK0lITmxkSFJwYm1kekxtMWhlRTExZEdGMGFXOXVjenRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jM1ZpYzNSRGIzVnVkR1Z5Um14aFp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2RHVnRjRVJoZEdGYmRHVnRjRVJoZEdGSlpIZ3JLMTBnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNNklHMXZibTl0WlhKSmJtWnZMbTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhFeFNXUjRPaUJ6WlhFeFNXUjRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnhNa2xrZURvZ2MyVnhNa2xrZUN4Y2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hLSE4xWW5OMFEyOTFiblJsY2tac1lXY2dmSHdnYzNWaWMzUkRiM1Z1ZEdWeUlEMDlQU0F3S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdWdGNFUmhkR0ZKWkhnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RHVnRjRVJoZEdGRmJHVnRaVzUwSUQwZ2RHVnRjRVJoZEdGYmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3YjNOcGRHbHZiaUE5SUhSbGJYQkVZWFJoUld4bGJXVnVkQzV3YjNNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNdWNIVnphQ2h3YjNOcGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWEV4U1dSNGN5NXdkWE5vS0hObGNURkpaSGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ4TWtsa2VITXVjSFZ6YUNoelpYRXlTV1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1kyNTBLeXM3WEc0Z0lDQWdjMlZ4TWtsa2VDc3JPMXh1SUNBZ0lHbG1JQ2h6WlhFeVNXUjRJRDA5UFNCaFkzUnBkbWwwZVVGeWNtRjVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdjMlZ4TVVsa2VDc3JPMXh1SUNBZ0lDQWdjMlZ4TWtsa2VDQTlJSE5sY1RGSlpIZ2dLeUF4TzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J3YjNOMFRXVnpjMkZuWlNoN1hHNGdJQ0FnY0c5ek9pQndiM01zWEc0Z0lDQWdjMlZ4TVVsa2VITTZJRzVsZHlCVmFXNTBNekpCY25KaGVTaHpaWEV4U1dSNGN5a3NYRzRnSUNBZ2MyVnhNa2xrZUhNNklHNWxkeUJWYVc1ME16SkJjbkpoZVNoelpYRXlTV1I0Y3lrc1hHNGdJSDBwTzF4dWZUdGNiaUpkZlE9PSIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG5fX3dlYnBhY2tfbW9kdWxlc19fWzg0MzZdKCk7XG4iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpcyIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJvbm1lc3NhZ2UiLCJldmVudCIsIl9hIiwiX2IiLCJzdGFydElkeCIsImVuZElkeCIsImFjdGl2aXR5QXJyYXkiLCJtb25vbWVySW5mb0FycmF5Iiwic2V0dGluZ3MiLCJjdXJyZW50VGFyZ2V0SWR4IiwiZGF0YSIsInBvcyIsInNlcTFJZHhzIiwic2VxMklkeHMiLCJjaHVua1NpemUiLCJjbnQiLCJzdGFydFJvdyIsImxlbmd0aCIsIk1hdGgiLCJmbG9vciIsInNxcnQiLCJzZXExSWR4Iiwic2VxMklkeCIsInRlbXBEYXRhIiwiQXJyYXkiLCJ0YXJnZXRDb2wiLCJyYXdEYXRhIiwic3Vic3RDb3VudGVyIiwiZGVsdGEiLCJhYnMiLCJtaW5BY3Rpdml0eURlbHRhIiwic3Vic3RDb3VudGVyRmxhZyIsInRlbXBEYXRhSWR4IiwibW9ub21lckluZm8iLCJtYXhNdXRhdGlvbnMiLCJuYW1lIiwiaSIsInBvc2l0aW9uIiwicHVzaCIsInBvc3RNZXNzYWdlIiwiVWludDMyQXJyYXkiXSwic291cmNlUm9vdCI6IiJ9
1
+ var peptides;(()=>{"use strict";({436:function(){var t=this&&this.__awaiter||function(t,n,e,a){return new(e||(e=Promise))((function(o,r){function i(t){try{c(a.next(t))}catch(t){r(t)}}function s(t){try{c(a.throw(t))}catch(t){r(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,s)}c((a=a.apply(t,n||[])).next())}))};onmessage=n=>t(void 0,void 0,void 0,(function*(){var t,e;const{startIdx:a,endIdx:o,activityArray:r,monomerInfoArray:i,settings:s,currentTargetIdx:c}=n.data,l=[],f=[],d=[],h=o-a;let u=0;const v=r.length-2-Math.floor(Math.sqrt(-8*a+4*r.length*(r.length-1)-7)/2-.5);let p=v,g=a-r.length*v+Math.floor((v+1)*(v+2)/2);const w=new Array(i.length);for(;u<h;){if(-1===c||(null===(t=s.targetCol)||void 0===t?void 0:t.rawData[p])===c&&(null===(e=s.targetCol)||void 0===e?void 0:e.rawData[g])===c){let t=0;const n=r[p]-r[g];if(Math.abs(n)>=s.minActivityDelta){let n=!1,e=0;for(const a of i)if(a.rawData[p]!==a.rawData[g]){if(t++,n=t>s.maxMutations,n)break;w[e++]={pos:a.name,seq1Idx:p,seq2Idx:g}}if(!n&&0!==t)for(let t=0;t<e;t++){const n=w[t].pos;l.push(n),f.push(p),d.push(g)}}}u++,g++,g===r.length&&(p++,g=p+1)}postMessage({pos:l,seq1Idxs:new Uint32Array(f),seq2Idxs:new Uint32Array(d)})}))}})[436](),peptides={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDM2LmpzIiwibWFwcGluZ3MiOiJpREFDQSxJQUFJQSxFQUFhQyxNQUFRQSxLQUFLRCxXQUFjLFNBQVVFLEVBQVNDLEVBQVlDLEVBQUdDLEdBRTFFLE9BQU8sSUFBS0QsSUFBTUEsRUFBSUUsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVQyxHQUFTLElBQU1DLEVBQUtOLEVBQVVPLEtBQUtGLEdBQVMsQ0FBRSxNQUFPRyxHQUFLTCxFQUFPSyxFQUFJLENBQUUsQ0FDMUYsU0FBU0MsRUFBU0osR0FBUyxJQUFNQyxFQUFLTixFQUFpQixNQUFFSyxHQUFTLENBQUUsTUFBT0csR0FBS0wsRUFBT0ssRUFBSSxDQUFFLENBQzdGLFNBQVNGLEVBQUtJLEdBSmxCLElBQWVMLEVBSWFLLEVBQU9DLEtBQU9ULEVBQVFRLEVBQU9MLFFBSjFDQSxFQUl5REssRUFBT0wsTUFKaERBLGFBQWlCTixFQUFJTSxFQUFRLElBQUlOLEdBQUUsU0FBVUcsR0FBV0EsRUFBUUcsRUFBUSxLQUlqQk8sS0FBS1IsRUFBV0ssRUFBVyxDQUM3R0gsR0FBTU4sRUFBWUEsRUFBVWEsTUFBTWhCLEVBQVNDLEdBQWMsS0FBS1MsT0FDbEUsR0FDSixFQUNBTyxVQUFhQyxHQUFVcEIsT0FBVSxPQUFRLE9BQVEsR0FBUSxZQUNyRCxJQUFJcUIsRUFBSUMsRUFDUixNQUFNLFNBQUVDLEVBQVEsT0FBRUMsRUFBTSxjQUFFQyxFQUFhLGlCQUFFQyxFQUFnQixTQUFFQyxFQUFRLGlCQUFFQyxHQUFxQlIsRUFBTVMsS0FDMUZDLEVBQU0sR0FDTkMsRUFBVyxHQUNYQyxFQUFXLEdBQ1hDLEVBQVlULEVBQVNELEVBQzNCLElBQUlXLEVBQU0sRUFDVixNQUFNQyxFQUFXVixFQUFjVyxPQUFTLEVBQUlDLEtBQUtDLE1BQU1ELEtBQUtFLE1BQU0sRUFBSWhCLEVBQVcsRUFBSUUsRUFBY1csUUFBVVgsRUFBY1csT0FBUyxHQUFLLEdBQUssRUFBSSxJQUVsSixJQUFJSSxFQUFVTCxFQUNWTSxFQUZhbEIsRUFBV0UsRUFBY1csT0FBU0QsRUFBV0UsS0FBS0MsT0FBT0gsRUFBVyxJQUFNQSxFQUFXLEdBQUssR0FHM0csTUFBTU8sRUFBVyxJQUFJQyxNQUFNakIsRUFBaUJVLFFBQzVDLEtBQU9GLEVBQU1ELEdBQVcsQ0FDcEIsSUFBNEIsSUFBdEJMLElBQTJELFFBQTdCUCxFQUFLTSxFQUFTaUIsaUJBQThCLElBQVB2QixPQUFnQixFQUFTQSxFQUFHd0IsUUFBUUwsTUFBY1osSUFDeEYsUUFBN0JOLEVBQUtLLEVBQVNpQixpQkFBOEIsSUFBUHRCLE9BQWdCLEVBQVNBLEVBQUd1QixRQUFRSixNQUFjYixFQUFvQixDQUM3RyxJQUFJa0IsRUFBZSxFQUNuQixNQUVNQyxFQUZrQnRCLEVBQWNlLEdBQ2RmLEVBQWNnQixHQUV0QyxHQUFJSixLQUFLVyxJQUFJRCxJQUFVcEIsRUFBU3NCLGlCQUFrQixDQUM5QyxJQUFJQyxHQUFtQixFQUNuQkMsRUFBYyxFQUNsQixJQUFLLE1BQU1DLEtBQWUxQixFQUd0QixHQUZ3QjBCLEVBQVlQLFFBQVFMLEtBQ3BCWSxFQUFZUCxRQUFRSixHQUM1QyxDQUlBLEdBRkFLLElBQ0FJLEVBQW1CSixFQUFlbkIsRUFBUzBCLGFBQ3ZDSCxFQUNBLE1BQ0pSLEVBQVNTLEtBQWlCLENBQ3RCckIsSUFBS3NCLEVBQVlFLEtBQ2pCZCxRQUFTQSxFQUNUQyxRQUFTQSxFQVJELENBV2hCLElBQU1TLEdBQXFDLElBQWpCSixFQUN0QixJQUFLLElBQUlTLEVBQUksRUFBR0EsRUFBSUosRUFBYUksSUFBSyxDQUNsQyxNQUNNQyxFQURrQmQsRUFBU2EsR0FDQXpCLElBQ2pDQSxFQUFJMkIsS0FBS0QsR0FDVHpCLEVBQVMwQixLQUFLakIsR0FDZFIsRUFBU3lCLEtBQUtoQixFQUNsQixDQUVSLENBQ0osQ0FDQVAsSUFDQU8sSUFDSUEsSUFBWWhCLEVBQWNXLFNBQzFCSSxJQUNBQyxFQUFVRCxFQUFVLEVBRTVCLENBQ0FrQixZQUFZLENBQ1I1QixJQUFLQSxFQUNMQyxTQUFVLElBQUk0QixZQUFZNUIsR0FDMUJDLFNBQVUsSUFBSTJCLFlBQVkzQixJQUVsQyxHLElDbkVvQixPLFNBRE0sQ0FBQyxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9zcmMvd29ya2Vycy9tdXRhdGlvbi1jbGlmZnMtd29ya2VyLnRzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc3RhcnRJZHgsIGVuZElkeCwgYWN0aXZpdHlBcnJheSwgbW9ub21lckluZm9BcnJheSwgc2V0dGluZ3MsIGN1cnJlbnRUYXJnZXRJZHggfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgcG9zID0gW107XG4gICAgY29uc3Qgc2VxMUlkeHMgPSBbXTtcbiAgICBjb25zdCBzZXEySWR4cyA9IFtdO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gYWN0aXZpdHlBcnJheS5sZW5ndGggLSAyIC0gTWF0aC5mbG9vcihNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiBhY3Rpdml0eUFycmF5Lmxlbmd0aCAqIChhY3Rpdml0eUFycmF5Lmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gYWN0aXZpdHlBcnJheS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBzZXExSWR4ID0gc3RhcnRSb3c7XG4gICAgbGV0IHNlcTJJZHggPSBzdGFydENvbDtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IG5ldyBBcnJheShtb25vbWVySW5mb0FycmF5Lmxlbmd0aCk7XG4gICAgd2hpbGUgKGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICBpZiAoIShjdXJyZW50VGFyZ2V0SWR4ICE9PSAtMSAmJiAoKChfYSA9IHNldHRpbmdzLnRhcmdldENvbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhd0RhdGFbc2VxMUlkeF0pICE9PSBjdXJyZW50VGFyZ2V0SWR4IHx8XG4gICAgICAgICAgICAoKF9iID0gc2V0dGluZ3MudGFyZ2V0Q29sKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmF3RGF0YVtzZXEySWR4XSkgIT09IGN1cnJlbnRUYXJnZXRJZHgpKSkge1xuICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eVZhbFNlcTEgPSBhY3Rpdml0eUFycmF5W3NlcTFJZHhdO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlWYWxTZXEyID0gYWN0aXZpdHlBcnJheVtzZXEySWR4XTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYWN0aXZpdHlWYWxTZXExIC0gYWN0aXZpdHlWYWxTZXEyO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSBzZXR0aW5ncy5taW5BY3Rpdml0eURlbHRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcERhdGFJZHggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9ub21lckluZm8gb2YgbW9ub21lckluZm9BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXExY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTFJZHhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEyY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTJJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VxMWNhdGVnb3J5SWR4ID09PSBzZXEyY2F0ZWdvcnlJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic3RDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHN1YnN0Q291bnRlckZsYWcgPSBzdWJzdENvdW50ZXIgPiBzZXR0aW5ncy5tYXhNdXRhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdENvdW50ZXJGbGFnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3RlbXBEYXRhSWR4KytdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBtb25vbWVySW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeDogc2VxMUlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHg6IHNlcTJJZHgsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHN1YnN0Q291bnRlckZsYWcgfHwgc3Vic3RDb3VudGVyID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBEYXRhSWR4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhRWxlbWVudCA9IHRlbXBEYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wRGF0YUVsZW1lbnQucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeHMucHVzaChzZXExSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHhzLnB1c2goc2VxMklkeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY250Kys7XG4gICAgICAgIHNlcTJJZHgrKztcbiAgICAgICAgaWYgKHNlcTJJZHggPT09IGFjdGl2aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXExSWR4Kys7XG4gICAgICAgICAgICBzZXEySWR4ID0gc2VxMUlkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgc2VxMUlkeHM6IG5ldyBVaW50MzJBcnJheShzZXExSWR4cyksXG4gICAgICAgIHNlcTJJZHhzOiBuZXcgVWludDMyQXJyYXkoc2VxMklkeHMpLFxuICAgIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFYwWVhScGIyNHRZMnhwWm1aekxYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTExZEdGMGFXOXVMV05zYVdabWN5MTNiM0pyWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dEJRVUZCTEZOQlFWTXNSMEZCUnl4RFFVRlBMRXRCUVVzc1JVRkJhVUlzUlVGQlJUczdTVUZEZWtNc1RVRkJUU3hGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNZVUZCWVN4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4blFrRkJaMElzUlVGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRia2NzVFVGQlRTeEhRVUZITEVkQlFXRXNSVUZCUlN4RFFVRkRPMGxCUTNwQ0xFMUJRVTBzVVVGQlVTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxGRkJRVkVzUjBGQllTeEZRVUZGTEVOQlFVTTdTVUZET1VJc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXp0SlFVTndReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2l4TlFVRk5MRkZCUVZFc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOd1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NZVUZCWVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJ4SExFMUJRVTBzVVVGQlVTeEhRVUZITEZGQlFWRXNSMEZCUnl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEhMRWxCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF6dEpRVU4yUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRGRrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRk8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRU3hOUVVGQkxGRkJRVkVzUTBGQlF5eFRRVUZUTERCRFFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlN5eG5Ra0ZCWjBJN1dVRkRla1lzUTBGQlFTeE5RVUZCTEZGQlFWRXNRMEZCUXl4VFFVRlRMREJEUVVGRkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCU3l4blFrRkJaMElzUTBGQlF5eERRVUZETEVWQlFVVTdXVUZETjBRc1NVRkJTU3haUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzSkNMRTFCUVUwc1pVRkJaU3hIUVVGSExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTXZReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRMME1zVFVGQlRTeExRVUZMTEVkQlFVY3NaVUZCWlN4SFFVRkhMR1ZCUVdVc1EwRkJRenRaUVVOb1JDeEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8yZENRVU5vUkN4SlFVRkpMR2RDUVVGblFpeEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkROMElzU1VGQlNTeFhRVUZYTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOd1FpeExRVUZMTEUxQlFVMHNWMEZCVnl4SlFVRkpMR2RDUVVGblFpeEZRVUZGTzI5Q1FVTXhReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yOUNRVU55UkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMjlDUVVOeVJDeEpRVUZKTEdWQlFXVXNTMEZCU3l4bFFVRmxPM2RDUVVOeVF5eFRRVUZUTzI5Q1FVVllMRmxCUVZrc1JVRkJSU3hEUVVGRE8yOUNRVU5tTEdkQ1FVRm5RaXhIUVVGSExGbEJRVmtzUjBGQlJ5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRPMjlDUVVONFJDeEpRVUZKTEdkQ1FVRm5RanQzUWtGRGJFSXNUVUZCVFR0dlFrRkZVaXhSUVVGUkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSMEZCUnp0M1FrRkRlRUlzUjBGQlJ5eEZRVUZGTEZkQlFWY3NRMEZCUXl4SlFVRkpPM2RDUVVOeVFpeFBRVUZQTEVWQlFVVXNUMEZCVHp0M1FrRkRhRUlzVDBGQlR5eEZRVUZGTEU5QlFVODdjVUpCUTJwQ0xFTkJRVU03YVVKQlEwZzdaMEpCUTBRc1NVRkJTU3hEUVVGRExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc1dVRkJXU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTTNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzNkQ1FVTndReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRM0JETEUxQlFVMHNVVUZCVVN4SFFVRkhMR1ZCUVdVc1EwRkJReXhIUVVGSExFTkJRVU03ZDBKQlEzSkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdkMEpCUTI1Q0xGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN2QwSkJRM1pDTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03Y1VKQlEzaENPMmxDUVVOR08yRkJRMFk3VTBGRFJqdFJRVU5FTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTA0c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRFZpeEpRVUZKTEU5QlFVOHNTMEZCU3l4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRk8xbEJRM0JETEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTFZc1QwRkJUeXhIUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZGtJN1MwRkRSanRKUVVORUxGZEJRVmNzUTBGQlF6dFJRVU5XTEVkQlFVY3NSVUZCUlN4SFFVRkhPMUZCUTFJc1VVRkJVU3hGUVVGRkxFbEJRVWtzVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTnVReXhSUVVGUkxFVkJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTXNVVUZCVVN4RFFVRkRPMHRCUTNCRExFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYjI1dFpYTnpZV2RsSUQwZ1lYTjVibU1nS0dWMlpXNTBLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQTlQaUI3WEc0Z0lHTnZibk4wSUh0emRHRnlkRWxrZUN3Z1pXNWtTV1I0TENCaFkzUnBkbWwwZVVGeWNtRjVMQ0J0YjI1dmJXVnlTVzVtYjBGeWNtRjVMQ0J6WlhSMGFXNW5jeXdnWTNWeWNtVnVkRlJoY21kbGRFbGtlSDBnUFNCbGRtVnVkQzVrWVhSaE8xeHVJQ0JqYjI1emRDQndiM002SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJSE5sY1RGSlpIaHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emRDQnpaWEV5U1dSNGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdZMjl1YzNRZ1kyaDFibXRUYVhwbElEMGdaVzVrU1dSNElDMGdjM1JoY25SSlpIZzdYRzRnSUd4bGRDQmpiblFnUFNBd08xeHVJQ0JqYjI1emRDQnpkR0Z5ZEZKdmR5QTlJR0ZqZEdsMmFYUjVRWEp5WVhrdWJHVnVaM1JvSUMwZ01pQXRJRTFoZEdndVpteHZiM0lvWEc0Z0lDQWdUV0YwYUM1emNYSjBLQzA0SUNvZ2MzUmhjblJKWkhnZ0t5QTBJQ29nWVdOMGFYWnBkSGxCY25KaGVTNXNaVzVuZEdnZ0tpQW9ZV04wYVhacGRIbEJjbkpoZVM1c1pXNW5kR2dnTFNBeEtTQXRJRGNwSUM4Z01pQXRJREF1TlNrN1hHNGdJR052Ym5OMElITjBZWEowUTI5c0lEMGdjM1JoY25SSlpIZ2dMU0JoWTNScGRtbDBlVUZ5Y21GNUxteGxibWQwYUNBcUlITjBZWEowVW05M0lDc2dUV0YwYUM1bWJHOXZjaWdvYzNSaGNuUlNiM2NnS3lBeEtTQXFJQ2h6ZEdGeWRGSnZkeUFySURJcElDOGdNaWs3WEc0Z0lHeGxkQ0J6WlhFeFNXUjRJRDBnYzNSaGNuUlNiM2M3WEc0Z0lHeGxkQ0J6WlhFeVNXUjRJRDBnYzNSaGNuUkRiMnc3WEc0Z0lHTnZibk4wSUhSbGJYQkVZWFJoSUQwZ2JtVjNJRUZ5Y21GNUtHMXZibTl0WlhKSmJtWnZRWEp5WVhrdWJHVnVaM1JvS1R0Y2JpQWdkMmhwYkdVZ0tHTnVkQ0E4SUdOb2RXNXJVMmw2WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hLR04xY25KbGJuUlVZWEpuWlhSSlpIZ2dJVDA5SUMweElDWW1JQ2h6WlhSMGFXNW5jeTUwWVhKblpYUkRiMncvTG5KaGQwUmhkR0ZiYzJWeE1VbGtlRjBnSVQwOUlHTjFjbkpsYm5SVVlYSm5aWFJKWkhnZ2ZIeGNiaUFnSUNBZ0lITmxkSFJwYm1kekxuUmhjbWRsZEVOdmJEOHVjbUYzUkdGMFlWdHpaWEV5U1dSNFhTQWhQVDBnWTNWeWNtVnVkRlJoY21kbGRFbGtlQ2twS1NCN1hHNGdJQ0FnSUNCc1pYUWdjM1ZpYzNSRGIzVnVkR1Z5SUQwZ01EdGNiaUFnSUNBZ0lHTnZibk4wSUdGamRHbDJhWFI1Vm1Gc1UyVnhNU0E5SUdGamRHbDJhWFI1UVhKeVlYbGJjMlZ4TVVsa2VGMDdYRzRnSUNBZ0lDQmpiMjV6ZENCaFkzUnBkbWwwZVZaaGJGTmxjVElnUFNCaFkzUnBkbWwwZVVGeWNtRjVXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHVnNkR0VnUFNCaFkzUnBkbWwwZVZaaGJGTmxjVEVnTFNCaFkzUnBkbWwwZVZaaGJGTmxjVEk3WEc0Z0lDQWdJQ0JwWmlBb1RXRjBhQzVoWW5Nb1pHVnNkR0VwSUQ0OUlITmxkSFJwYm1kekxtMXBia0ZqZEdsMmFYUjVSR1ZzZEdFcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhOMVluTjBRMjkxYm5SbGNrWnNZV2NnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnYkdWMElIUmxiWEJFWVhSaFNXUjRJRDBnTUR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnRiMjV2YldWeVNXNW1ieUJ2WmlCdGIyNXZiV1Z5U1c1bWIwRnljbUY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnhNV05oZEdWbmIzSjVTV1I0SUQwZ2JXOXViMjFsY2tsdVptOHVjbUYzUkdGMFlWdHpaWEV4U1dSNFhUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnpaWEV5WTJGMFpXZHZjbmxKWkhnZ1BTQnRiMjV2YldWeVNXNW1ieTV5WVhkRVlYUmhXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHpaWEV4WTJGMFpXZHZjbmxKWkhnZ1BUMDlJSE5sY1RKallYUmxaMjl5ZVVsa2VDbGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dVhHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5S3lzN1hHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5Um14aFp5QTlJSE4xWW5OMFEyOTFiblJsY2lBK0lITmxkSFJwYm1kekxtMWhlRTExZEdGMGFXOXVjenRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jM1ZpYzNSRGIzVnVkR1Z5Um14aFp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2RHVnRjRVJoZEdGYmRHVnRjRVJoZEdGSlpIZ3JLMTBnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNNklHMXZibTl0WlhKSmJtWnZMbTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhFeFNXUjRPaUJ6WlhFeFNXUjRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnhNa2xrZURvZ2MyVnhNa2xrZUN4Y2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hLSE4xWW5OMFEyOTFiblJsY2tac1lXY2dmSHdnYzNWaWMzUkRiM1Z1ZEdWeUlEMDlQU0F3S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdWdGNFUmhkR0ZKWkhnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RHVnRjRVJoZEdGRmJHVnRaVzUwSUQwZ2RHVnRjRVJoZEdGYmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3YjNOcGRHbHZiaUE5SUhSbGJYQkVZWFJoUld4bGJXVnVkQzV3YjNNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNdWNIVnphQ2h3YjNOcGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWEV4U1dSNGN5NXdkWE5vS0hObGNURkpaSGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ4TWtsa2VITXVjSFZ6YUNoelpYRXlTV1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1kyNTBLeXM3WEc0Z0lDQWdjMlZ4TWtsa2VDc3JPMXh1SUNBZ0lHbG1JQ2h6WlhFeVNXUjRJRDA5UFNCaFkzUnBkbWwwZVVGeWNtRjVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdjMlZ4TVVsa2VDc3JPMXh1SUNBZ0lDQWdjMlZ4TWtsa2VDQTlJSE5sY1RGSlpIZ2dLeUF4TzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J3YjNOMFRXVnpjMkZuWlNoN1hHNGdJQ0FnY0c5ek9pQndiM01zWEc0Z0lDQWdjMlZ4TVVsa2VITTZJRzVsZHlCVmFXNTBNekpCY25KaGVTaHpaWEV4U1dSNGN5a3NYRzRnSUNBZ2MyVnhNa2xrZUhNNklHNWxkeUJWYVc1ME16SkJjbkpoZVNoelpYRXlTV1I0Y3lrc1hHNGdJSDBwTzF4dWZUdGNiaUpkZlE9PSIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG5fX3dlYnBhY2tfbW9kdWxlc19fWzQzNl0oKTtcbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm9ubWVzc2FnZSIsImV2ZW50IiwiX2EiLCJfYiIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiYWN0aXZpdHlBcnJheSIsIm1vbm9tZXJJbmZvQXJyYXkiLCJzZXR0aW5ncyIsImN1cnJlbnRUYXJnZXRJZHgiLCJkYXRhIiwicG9zIiwic2VxMUlkeHMiLCJzZXEySWR4cyIsImNodW5rU2l6ZSIsImNudCIsInN0YXJ0Um93IiwibGVuZ3RoIiwiTWF0aCIsImZsb29yIiwic3FydCIsInNlcTFJZHgiLCJzZXEySWR4IiwidGVtcERhdGEiLCJBcnJheSIsInRhcmdldENvbCIsInJhd0RhdGEiLCJzdWJzdENvdW50ZXIiLCJkZWx0YSIsImFicyIsIm1pbkFjdGl2aXR5RGVsdGEiLCJzdWJzdENvdW50ZXJGbGFnIiwidGVtcERhdGFJZHgiLCJtb25vbWVySW5mbyIsIm1heE11dGF0aW9ucyIsIm5hbWUiLCJpIiwicG9zaXRpb24iLCJwdXNoIiwicG9zdE1lc3NhZ2UiLCJVaW50MzJBcnJheSJdLCJzb3VyY2VSb290IjoiIn0=