@datagrok/eda 1.1.16 → 1.1.17
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/CHANGELOG.md +7 -0
- package/dist/221.js +1 -1
- package/dist/246.js +2 -0
- package/dist/42.js +2 -2
- package/dist/523.js +3 -0
- package/dist/590.js +1 -1
- package/dist/694.js +2 -2
- package/dist/972.js +2 -0
- package/dist/package-test.js +2 -2
- package/dist/package.js +2 -2
- package/package.json +3 -3
- package/src/package.ts +6 -3
- package/dist/133.js +0 -3
- package/dist/352.js +0 -2
- package/dist/709.js +0 -2
- /package/dist/{133.js.LICENSE.txt → 523.js.LICENSE.txt} +0 -0
package/CHANGELOG.md
CHANGED
package/dist/221.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[221],{3107:(t,e,r)=>{r.r(e),r.d(e,{default:()=>o});var n=r(7531),i=r(1353),a=r(4162);function o(t,e,r={}){let{maxIterations:o=100,gradientDifference:s=.1,damping:h=0,errorTolerance:u=.01,minValues:l,maxValues:c,initialValues:f}=r;if(h<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!(0,n.Z)(t.x)||t.x.length<2||!(0,n.Z)(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let p=f||new Array(e.length).fill(1),m=p.length;if(c=c||new Array(m).fill(Number.MAX_SAFE_INTEGER),l=l||new Array(m).fill(Number.MIN_SAFE_INTEGER),c.length!==l.length)throw new Error("minValues and maxValues must be the same size");if(!(0,n.Z)(p))throw new Error("initialValues must be an array");let v,d=(0,i.Z)(t,p,e),g=d<=u;for(v=0;v<o&&!g;v++){p=(0,a.Z)(t,p,h,s,e);for(let t=0;t<m;t++)p[t]=Math.min(Math.max(l[t],p[t]),c[t]);if(d=(0,i.Z)(t,p,e),isNaN(d))break;g=d<=u}return{parameterValues:p,parameterError:d,iterations:v}}},9378:function(t,e,r){var n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var i=n(r(4517));function a(t,e){var r=function(r){return i.empty(t).map((function(){return i.filled(e,r)}))},n=[];return n.push(r(-1)),n.push(r(1/0)),n.push(r(0)),n}function o(t,e,r,n,i){e=Math.floor(e);var a=t[0][e],o=t[1][e];if(t[2][e],r>=o[0])return 0;for(var h=0;h<a.length;h++)if(n===a[h])return 0;return s(t,e,r,n,i)}function s(t,e,r,n,i){var a=t[0][e],o=t[1][e],s=t[2][e];if(r>=o[0])return 0;o[0]=r,a[0]=n,s[0]=i;for(var h=0,u=0;;){var l=2*h+1,c=l+1,f=t[0][0].length;if(l>=f)break;if(c>=f){if(!(o[l]>r))break;u=l}else if(o[l]>=o[c]){if(!(r<o[l]))break;u=l}else{if(!(r<o[c]))break;u=c}o[h]=o[u],a[h]=a[u],s[h]=s[u],h=u}return o[h]=r,a[h]=n,s[h]=i,1}function h(t,e,r,n){for(;2*n+1<r;){var i=2*n+1,a=i+1,o=n;if(t[o]<t[i]&&(o=i),a<r&&t[o]<t[a]&&(o=a),o===n)break;var s=t[n];t[n]=t[o],t[o]=s;var h=e[n];e[n]=e[o],e[o]=h,n=o}}e.makeHeap=a,e.rejectionSample=function(t,e,r){for(var n=i.zeros(t),a=0;a<t;a++){for(var o=!0,s=0;o;){s=i.tauRandInt(e,r);for(var h=!1,u=0;u<a;u++)if(s===n[u]){h=!0;break}h||(o=!1)}n[a]=s}return n},e.heapPush=o,e.uncheckedHeapPush=s,e.buildCandidates=function(t,e,r,n,s){for(var h=a(e,n),u=0;u<e;u++)for(var l=0;l<r;l++)if(!(t[0][u][l]<0)){var c=t[0][u][l],f=t[2][u][l],p=i.tauRand(s);o(h,u,p,c,f),o(h,c,p,u,f),t[2][u][l]=0}return h},e.deheapSort=function(t){for(var e=t[0],r=t[1],n=0;n<e.length;n++)for(var i=e[n],a=r[n],o=0;o<i.length-1;o++){var s=i.length-o-1,u=a.length-o-1,l=i[0];i[0]=i[s],i[s]=l;var c=a[0];a[0]=a[u],a[u]=c,h(a,i,u,0)}return{indices:e,weights:r}},e.smallestFlagged=function(t,e){for(var r=t[0][e],n=t[1][e],i=t[2][e],a=1/0,o=-1,s=0;s>r.length;s++)1===i[s]&&n[s]<a&&(a=n[s],o=s);return o>=0?(i[o]=0,Math.floor(r[o])):-1}},4221:(t,e,r)=>{var n=r(4364);e.u=n.UMAP},5686:function(t,e,r){var n,i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(4517)),h=function(){function t(t,e,r,n){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==r.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=n[0],this.nCols=n[1];for(var i=0;i<r.length;i++){var a=t[i],o=e[i];this.checkDims(a,o);var s=this.makeKey(a,o);this.entries.set(s,{value:r[i],row:a,col:o})}}return t.prototype.makeKey=function(t,e){return t+":"+e},t.prototype.checkDims=function(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")},t.prototype.set=function(t,e,r){this.checkDims(t,e);var n=this.makeKey(t,e);this.entries.has(n)?this.entries.get(n).value=r:this.entries.set(n,{value:r,row:t,col:e})},t.prototype.get=function(t,e,r){void 0===r&&(r=0),this.checkDims(t,e);var n=this.makeKey(t,e);return this.entries.has(n)?this.entries.get(n).value:r},t.prototype.getAll=function(t){void 0===t&&(t=!0);var e=[];return this.entries.forEach((function(t){e.push(t)})),t&&e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row})),e},t.prototype.getDims=function(){return[this.nRows,this.nCols]},t.prototype.getRows=function(){return Array.from(this.entries,(function(t){var e=i(t,2);return e[0],e[1].row}))},t.prototype.getCols=function(){return Array.from(this.entries,(function(t){var e=i(t,2);return e[0],e[1].col}))},t.prototype.getValues=function(){return Array.from(this.entries,(function(t){var e=i(t,2);return e[0],e[1].value}))},t.prototype.forEach=function(t){this.entries.forEach((function(e){return t(e.value,e.row,e.col)}))},t.prototype.map=function(e){var r=[];this.entries.forEach((function(t){r.push(e(t.value,t.row,t.col))}));var n=[this.nRows,this.nCols];return new t(this.getRows(),this.getCols(),r,n)},t.prototype.toArray=function(){var t=this,e=s.empty(this.nRows).map((function(){return s.zeros(t.nCols)}));return this.entries.forEach((function(t){e[t.row][t.col]=t.value})),e},t}();e.SparseMatrix=h,e.transpose=function(t){var e=[],r=[],n=[];t.forEach((function(t,i,a){e.push(i),r.push(a),n.push(t)}));var i=[t.nCols,t.nRows];return new h(r,e,n,i)},e.identity=function(t){for(var e=i(t,1)[0],r=new h([],[],[],t),n=0;n<e;n++)r.set(n,n,1);return r},e.pairwiseMultiply=function(t,e){return l(t,e,(function(t,e){return t*e}))},e.add=function(t,e){return l(t,e,(function(t,e){return t+e}))},e.subtract=function(t,e){return l(t,e,(function(t,e){return t-e}))},e.maximum=function(t,e){return l(t,e,(function(t,e){return t>e?t:e}))},e.multiplyScalar=function(t,e){return t.map((function(t){return t*e}))},e.eliminateZeros=function(t){for(var e=new Set,r=t.getValues(),n=t.getRows(),i=t.getCols(),a=0;a<r.length;a++)0===r[a]&&e.add(a);var o=function(t,r){return!e.has(r)},s=r.filter(o),u=n.filter(o),l=i.filter(o);return new h(u,l,s,t.getDims())},e.normalize=function(t,e){var r,n;void 0===e&&(e="l2");var i=u[e],o=new Map;t.forEach((function(t,e,r){var n=o.get(e)||[];n.push(r),o.set(e,n)}));var s=new h([],[],[],t.getDims()),l=function(e){for(var r=o.get(e).sort(),n=r.map((function(r){return t.get(e,r)})),a=i(n),h=0;h<a.length;h++)s.set(e,r[h],a[h])};try{for(var c=a(o.keys()),f=c.next();!f.done;f=c.next())l(f.value)}catch(t){r={error:t}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return s};var u=((n={}).max=function(t){for(var e=-1/0,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return t.map((function(t){return t/e}))},n.l1=function(t){for(var e=0,r=0;r<t.length;r++)e+=t[r];return t.map((function(t){return t/e}))},n.l2=function(t){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r],2);return t.map((function(t){return Math.sqrt(Math.pow(t,2)/e)}))},n);function l(t,e,r){for(var n=new Set,i=[],a=[],o=[],s=function(n,s){i.push(n),a.push(s);var h=r(t.get(n,s),e.get(n,s));o.push(h)},u=t.getValues(),l=t.getRows(),c=t.getCols(),f=0;f<u.length;f++){var p=(g=l[f])+":"+(y=c[f]);n.add(p),s(g,y)}var m=e.getValues(),v=e.getRows(),d=e.getCols();for(f=0;f<m.length;f++){var g,y;p=(g=v[f])+":"+(y=d[f]),n.has(p)||s(g,y)}var w=[t.nRows,t.nCols];return new h(i,a,o,w)}e.getCSR=function(t){var e=[];t.forEach((function(t,r,n){e.push({value:t,row:r,col:n})})),e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row}));for(var r=[],n=[],i=[],a=-1,o=0;o<e.length;o++){var s=e[o],h=s.row,u=s.col,l=s.value;h!==a&&(a=h,i.push(o)),r.push(u),n.push(l)}return{indices:r,values:n,indptr:i}}},760:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var a=i(r(9378)),o=i(r(5686)),s=i(r(2320)),h=i(r(4517));e.makeNNDescent=function(t,e){return function(r,n,i,o,s,u,l,c){void 0===o&&(o=10),void 0===s&&(s=50),void 0===u&&(u=.001),void 0===l&&(l=.5),void 0===c&&(c=!0);for(var f=r.length,p=a.makeHeap(r.length,i),m=0;m<r.length;m++)for(var v=a.rejectionSample(i,r.length,e),d=0;d<v.length;d++){var g=t(r[m],r[v[d]]);a.heapPush(p,m,g,v[d],1),a.heapPush(p,v[d],g,m,1)}if(c)for(var y=0;y<n.length;y++)for(m=0;m<n[y].length&&!(n[y][m]<0);m++)for(d=m+1;d<n[y].length&&!(n[y][d]<0);d++)g=t(r[n[y][m]],r[n[y][d]]),a.heapPush(p,n[y][m],g,n[y][d],1),a.heapPush(p,n[y][d],g,n[y][m],1);for(y=0;y<o;y++){var w=a.buildCandidates(p,f,i,s,e),S=0;for(m=0;m<f;m++)for(d=0;d<s;d++){var b=Math.floor(w[0][m][d]);if(!(b<0||h.tauRand(e)<l))for(var M=0;M<s;M++){var z=Math.floor(w[0][m][M]),N=w[2][m][d],E=w[2][m][M];z<0||!N&&!E||(g=t(r[b],r[z]),S+=a.heapPush(p,b,g,z,1),S+=a.heapPush(p,z,g,b,1))}}if(S<=u*i*r.length)break}return a.deheapSort(p)}},e.makeInitializations=function(t){return{initFromRandom:function(e,r,n,i,o){for(var s=0;s<n.length;s++)for(var u=h.rejectionSample(e,r.length,o),l=0;l<u.length;l++)if(!(u[l]<0)){var c=t(r[u[l]],n[s]);a.heapPush(i,s,c,u[l],1)}},initFromTree:function(e,r,n,i,o){for(var h=0;h<n.length;h++)for(var u=s.searchFlatTree(n[h],e,o),l=0;l<u.length;l++){if(u[l]<0)return;var c=t(r[u[l]],n[h]);a.heapPush(i,h,c,u[l],1)}}}},e.makeInitializedNNSearch=function(t){return function(e,r,i,s){for(var h,u,l=o.getCSR(r),c=l.indices,f=l.indptr,p=0;p<s.length;p++)for(var m=new Set(i[0][p]);;){var v=a.smallestFlagged(i,p);if(-1===v)break;var d=c.slice(f[v],f[v+1]);try{for(var g=n(d),y=g.next();!y.done;y=g.next()){var w=y.value;if(w!==v&&-1!==w&&!m.has(w)){var S=t(e[w],s[p]);a.uncheckedHeapPush(i,p,S,w,1),m.add(w)}}}catch(t){h={error:t}}finally{try{y&&!y.done&&(u=g.return)&&u.call(g)}finally{if(h)throw h.error}}}return i}},e.initializeSearch=function(t,e,r,i,o,s,h){var u,l,c=a.makeHeap(r.length,i);if(o(i,e,r,c,h),t)try{for(var f=n(t),p=f.next();!p.done;p=f.next())s(p.value,e,r,c,h)}catch(t){u={error:t}}finally{try{p&&!p.done&&(l=f.return)&&l.call(f)}finally{if(u)throw u.error}}return c}},2320:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(4517)),h=function(t,e,r,n){this.hyperplanes=t,this.offsets=e,this.children=r,this.indices=n};function u(t,e,r,n,i){if(void 0===r&&(r=30),e.length>r){var a=function(t,e,r){var n=t[0].length,i=s.tauRandInt(e.length,r),a=s.tauRandInt(e.length,r);a=(a+=i===a?1:0)%e.length;for(var o=e[i],h=e[a],u=0,l=s.zeros(n),c=0;c<l.length;c++)l[c]=t[o][c]-t[h][c],u-=l[c]*(t[o][c]+t[h][c])/2;var f=0,p=0,m=s.zeros(e.length);for(c=0;c<e.length;c++){for(var v=u,d=0;d<n;d++)v+=l[d]*t[e[c]][d];0===v?(m[c]=s.tauRandInt(2,r),0===m[c]?f+=1:p+=1):v>0?(m[c]=0,f+=1):(m[c]=1,p+=1)}var g=s.zeros(f),y=s.zeros(p);for(f=0,p=0,c=0;c<m.length;c++)0===m[c]?(g[f]=e[c],f+=1):(y[p]=e[c],p+=1);return{indicesLeft:g,indicesRight:y,hyperplane:l,offset:u}}(t,e,i),o=a.indicesLeft,h=a.indicesRight,l=a.hyperplane,c=a.offset;return{leftChild:u(t,o,r,n+1,i),rightChild:u(t,h,r,n+1,i),isLeaf:!1,hyperplane:l,offset:c}}return{indices:e,isLeaf:!0}}function l(t,e,r,n,a,o,s){var h;if(t.isLeaf)return n[o][0]=-s,(h=a[s]).splice.apply(h,i([0,t.indices.length],t.indices)),{nodeNum:o,leafNum:s+=1};e[o]=t.hyperplane,r[o]=t.offset,n[o][0]=o+1;var u=o,c=l(t.leftChild,e,r,n,a,o+1,s);return o=c.nodeNum,s=c.leafNum,n[u][1]=o+1,{nodeNum:(c=l(t.rightChild,e,r,n,a,o+1,s)).nodeNum,leafNum:c.leafNum}}function c(t){return t.isLeaf?1:1+c(t.leftChild)+c(t.rightChild)}function f(t){return t.isLeaf?1:f(t.leftChild)+f(t.rightChild)}function p(t,e,r,n){for(var i=e,a=0;a<r.length;a++)i+=t[a]*r[a];return 0===i?s.tauRandInt(2,n):i>0?0:1}e.FlatTree=h,e.makeForest=function(t,e,r,n){var i=Math.max(10,e);return s.range(r).map((function(e,r){return function(t,e,r,n){return void 0===e&&(e=30),u(t,s.range(t.length),e,r,n)}(t,i,r,n)})).map((function(t){return function(t,e){var r=c(t),n=f(t),i=s.range(r).map((function(){return s.zeros(t.hyperplane?t.hyperplane.length:0)})),a=s.zeros(r),o=s.range(r).map((function(){return[-1,-1]})),u=s.range(n).map((function(){return s.range(e).map((function(){return-1}))}));return l(t,i,a,o,u,0,0),new h(i,a,o,u)}(t,i)}))},e.makeLeafArray=function(t){var e,r;if(t.length>0){var n=[];try{for(var o=a(t),s=o.next();!s.done;s=o.next()){var h=s.value;n.push.apply(n,i(h.indices))}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n}return[[-1]]},e.searchFlatTree=function(t,e,r){for(var n=0;e.children[n][0]>0;)n=0===p(e.hyperplanes[n],e.offsets[n],t,r)?e.children[n][0]:e.children[n][1];var i=-1*e.children[n][0];return e.indices[i]}},4364:function(t,e,r){var n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(i,a){function o(t){try{h(n.next(t))}catch(t){a(t)}}function s(t){try{h(n.throw(t))}catch(t){a(t)}}function h(t){t.done?i(t.value):new r((function(e){e(t.value)})).then(o,s)}h((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,n=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=e.call(t,o)}catch(t){a=[6,t],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t},s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e},h=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=s(r(9378)),l=s(r(5686)),c=s(r(760)),f=s(r(2320)),p=s(r(4517)),m=h(r(3107)),v=1e-5,d=.001,g=function(){function t(t){void 0===t&&(t={});var e=this;this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=y,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new w;var r=function(r){void 0!==t[r]&&(e[r]=t[r])};r("distanceFn"),r("learningRate"),r("localConnectivity"),r("minDist"),r("nComponents"),r("nEpochs"),r("nNeighbors"),r("negativeSampleRate"),r("random"),r("repulsionStrength"),r("setOpMixRatio"),r("spread"),r("transformQueueSize")}return t.prototype.fit=function(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding},t.prototype.fitAsync=function(t,e){return void 0===e&&(e=function(){return!0}),n(this,void 0,void 0,(function(){return i(this,(function(r){switch(r.label){case 0:return this.initializeFit(t),[4,this.optimizeLayoutAsync(e)];case 1:return r.sent(),[2,this.embedding]}}))}))},t.prototype.setSupervisedProjection=function(t,e){void 0===e&&(e={}),this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors},t.prototype.setPrecomputedKNN=function(t,e){this.knnIndices=t,this.knnDistances=e},t.prototype.initializeFit=function(t){if(t.length<=this.nNeighbors)throw new Error("Not enough data points ("+t.length+") to create nNeighbors: "+this.nNeighbors+". Add more data points or adjust the configuration.");if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){var e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();var r=this.initializeSimplicialSetEmbedding(),n=r.head,i=r.tail,a=r.epochsPerSample;return this.optimizationState.head=n,this.optimizationState.tail=i,this.optimizationState.epochsPerSample=a,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()},t.prototype.makeSearchFns=function(){var t=c.makeInitializations(this.distanceFn),e=t.initFromTree,r=t.initFromRandom;this.initFromTree=e,this.initFromRandom=r,this.search=c.makeInitializedNNSearch(this.distanceFn)},t.prototype.makeSearchGraph=function(t){for(var e=this.knnIndices,r=this.knnDistances,n=[t.length,t.length],i=new l.SparseMatrix([],[],[],n),a=0;a<e.length;a++)for(var o=e[a],s=r[a],h=0;h<o.length;h++){var u=o[h],c=s[h];c>0&&i.set(a,u,c)}var f=l.transpose(i);return l.maximum(i,f)},t.prototype.transform=function(t){var e=this,r=this.X;if(void 0===r||0===r.length)throw new Error("No data has been fit.");var n=Math.floor(this.nNeighbors*this.transformQueueSize);n=Math.min(r.length,n);var i=c.initializeSearch(this.rpForest,r,t,n,this.initFromRandom,this.initFromTree,this.random),a=this.search(r,this.searchGraph,i,t),o=u.deheapSort(a),s=o.indices,h=o.weights;s=s.map((function(t){return t.slice(0,e.nNeighbors)})),h=h.map((function(t){return t.slice(0,e.nNeighbors)}));var f=Math.max(0,this.localConnectivity-1),m=this.smoothKNNDistance(h,this.nNeighbors,f),v=m.sigmas,d=m.rhos,g=this.computeMembershipStrengths(s,h,v,d),y=g.rows,w=g.cols,S=g.vals,b=[t.length,r.length],M=new l.SparseMatrix(y,w,S,b),z=l.normalize(M,"l1"),N=l.getCSR(z),k=t.length,x=E(p.reshape2d(N.indices,k,this.nNeighbors),p.reshape2d(N.values,k,this.nNeighbors),this.embedding),_=this.nEpochs?this.nEpochs/3:M.nRows<=1e4?100:30,P=M.getValues().reduce((function(t,e){return e>t?e:t}),0);M=M.map((function(t){return t<P/_?0:t})),M=l.eliminateZeros(M);var R=this.makeEpochsPerSample(M.getValues(),_),C=M.getRows(),O=M.getCols();return this.assignOptimizationStateParameters({headEmbedding:x,tailEmbedding:this.embedding,head:C,tail:O,currentEpoch:0,nEpochs:_,nVertices:M.getDims()[1],epochsPerSample:R}),this.prepareForOptimizationLoop(),this.optimizeLayout()},t.prototype.processGraphForSupervisedProjection=function(){var t=this.Y,e=this.X;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){var r=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,r)}}},t.prototype.step=function(){var t=this.optimizationState.currentEpoch;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch},t.prototype.getEmbedding=function(){return this.embedding},t.prototype.nearestNeighbors=function(t){var e,r=this.distanceFn,n=this.nNeighbors,i=c.makeNNDescent(r,this.random),a=5+Math.floor(.5==(e=Math.pow(t.length,.5)/20)?0:Math.round(e)),o=Math.max(5,Math.floor(Math.round(function(t){return Math.log(t)/Math.log(2)}(t.length))));this.rpForest=f.makeForest(t,n,a,this.random);var s=i(t,f.makeLeafArray(this.rpForest),n,o);return{knnIndices:s.indices,knnDistances:s.weights}},t.prototype.fuzzySimplicialSet=function(t,e,r){void 0===r&&(r=1);var n=this,i=n.knnIndices,a=void 0===i?[]:i,o=n.knnDistances,s=void 0===o?[]:o,h=n.localConnectivity,u=this.smoothKNNDistance(s,e,h),c=u.sigmas,f=u.rhos,p=this.computeMembershipStrengths(a,s,c,f),m=p.rows,v=p.cols,d=p.vals,g=[t.length,t.length],y=new l.SparseMatrix(m,v,d,g),w=l.transpose(y),S=l.pairwiseMultiply(y,w),b=l.subtract(l.add(y,w),S),M=l.multiplyScalar(b,r),z=l.multiplyScalar(S,1-r);return l.add(M,z)},t.prototype.categoricalSimplicialSetIntersection=function(t,e,r,n){void 0===n&&(n=1);var i=z(t,e,n,r);return N(i=l.eliminateZeros(i))},t.prototype.smoothKNNDistance=function(t,e,r,n,i){void 0===r&&(r=1),void 0===n&&(n=64),void 0===i&&(i=1);for(var a=Math.log(e)/Math.log(2)*i,o=p.zeros(t.length),s=p.zeros(t.length),h=0;h<t.length;h++){var u=0,l=1/0,c=1,f=t[h],m=f.filter((function(t){return t>0}));if(m.length>=r){var g=Math.floor(r),y=r-g;g>0?(o[h]=m[g-1],y>v&&(o[h]+=y*(m[g]-m[g-1]))):o[h]=y*m[0]}else m.length>0&&(o[h]=p.max(m));for(var w=0;w<n;w++){for(var S=0,b=1;b<t[h].length;b++){var M=t[h][b]-o[h];S+=M>0?Math.exp(-M/c):1}if(Math.abs(S-a)<v)break;S>a?c=(u+(l=c))/2:(u=c,l===1/0?c*=2:c=(u+l)/2)}if(s[h]=c,o[h]>0){var z=p.mean(f);s[h]<d*z&&(s[h]=d*z)}else{var N=p.mean(t.map(p.mean));s[h]<d*N&&(s[h]=d*N)}}return{sigmas:s,rhos:o}},t.prototype.computeMembershipStrengths=function(t,e,r,n){for(var i=t.length,a=t[0].length,o=p.zeros(i*a),s=p.zeros(i*a),h=p.zeros(i*a),u=0;u<i;u++)for(var l=0;l<a;l++){var c=0;-1!==t[u][l]&&(c=t[u][l]===u?0:e[u][l]-n[u]<=0?1:Math.exp(-(e[u][l]-n[u])/r[u]),o[u*a+l]=u,s[u*a+l]=t[u][l],h[u*a+l]=c)}return{rows:o,cols:s,vals:h}},t.prototype.initializeSimplicialSetEmbedding=function(){for(var t=this,e=this.getNEpochs(),r=this.nComponents,n=this.graph.getValues(),i=0,a=0;a<n.length;a++){var o=n[a];i<n[a]&&(i=o)}var s=this.graph.map((function(t){return t<i/e?0:t}));this.embedding=p.zeros(s.nRows).map((function(){return p.zeros(r).map((function(){return 20*p.tauRand(t.random)-10}))}));var h=[],u=[],l=[],c=s.getAll();for(a=0;a<c.length;a++){var f=c[a];f.value&&(h.push(f.value),l.push(f.row),u.push(f.col))}return{head:u,tail:l,epochsPerSample:this.makeEpochsPerSample(h,e)}},t.prototype.makeEpochsPerSample=function(t,e){var r=p.filled(t.length,-1),n=p.max(t),i=t.map((function(t){return t/n*e}));return i.forEach((function(t,n){t>0&&(r[n]=e/i[n])})),r},t.prototype.assignOptimizationStateParameters=function(t){Object.assign(this.optimizationState,t)},t.prototype.prepareForOptimizationLoop=function(){var t=this,e=t.repulsionStrength,r=t.learningRate,n=t.negativeSampleRate,i=this.optimizationState,a=i.epochsPerSample,s=i.headEmbedding,h=i.tailEmbedding,u=s[0].length,l=s.length===h.length,c=a.map((function(t){return t/n})),f=o(c),p=o(a);this.assignOptimizationStateParameters({epochOfNextSample:p,epochOfNextNegativeSample:f,epochsPerNegativeSample:c,moveOther:l,initialAlpha:r,alpha:r,gamma:e,dim:u})},t.prototype.initializeOptimization=function(){var t=this.embedding,e=this.embedding,r=this.optimizationState,n=r.head,i=r.tail,a=r.epochsPerSample,o=this.getNEpochs(),s=this.graph.nCols,h=M(this.spread,this.minDist),u=h.a,l=h.b;this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:n,tail:i,epochsPerSample:a,a:u,b:l,nEpochs:o,nVertices:s})},t.prototype.optimizeLayoutStep=function(t){for(var e=this.optimizationState,r=e.head,n=e.tail,i=e.headEmbedding,a=e.tailEmbedding,o=e.epochsPerSample,s=e.epochOfNextSample,h=e.epochOfNextNegativeSample,u=e.epochsPerNegativeSample,l=e.moveOther,c=e.initialAlpha,f=e.alpha,m=e.gamma,v=e.a,d=e.b,g=e.dim,y=e.nEpochs,w=e.nVertices,M=0;M<o.length;M++)if(!(s[M]>t)){var z=r[M],N=n[M],E=i[z],k=a[N],x=b(E,k),_=0;x>0&&(_=-2*v*d*Math.pow(x,d-1),_/=v*Math.pow(x,d)+1);for(var P=0;P<g;P++){var R=S(_*(E[P]-k[P]),4);E[P]+=R*f,l&&(k[P]+=-R*f)}s[M]+=o[M];for(var C=Math.floor((t-h[M])/u[M]),O=0;O<C;O++){var F=p.tauRandInt(w,this.random),I=a[F],D=b(E,I),A=0;if(D>0)A=2*m*d,A/=(.001+D)*(v*Math.pow(D,d)+1);else if(z===F)continue;for(P=0;P<g;P++)R=4,A>0&&(R=S(A*(E[P]-I[P]),4)),E[P]+=R*f}h[M]+=C*u[M]}return e.alpha=c*(1-t/y),e.currentEpoch+=1,i},t.prototype.optimizeLayoutAsync=function(t){var e=this;return void 0===t&&(t=function(){return!0}),new Promise((function(r,a){var o=function(){return n(e,void 0,void 0,(function(){var e,n,s,h,u,l;return i(this,(function(i){try{if(e=this.optimizationState,n=e.nEpochs,s=e.currentEpoch,this.embedding=this.optimizeLayoutStep(s),h=this.optimizationState.currentEpoch,u=!1===t(h),l=h===n,u||l)return[2,r(l)];setTimeout((function(){return o()}),0)}catch(t){a(t)}return[2]}))}))};setTimeout((function(){return o()}),0)}))},t.prototype.optimizeLayout=function(t){void 0===t&&(t=function(){return!0});for(var e=!1,r=[];!e;){var n=this.optimizationState,i=n.nEpochs,a=n.currentEpoch;r=this.optimizeLayoutStep(a);var o=this.optimizationState.currentEpoch,s=!1===t(o);e=o===i||s}return r},t.prototype.getNEpochs=function(){var t=this.graph;if(this.nEpochs>0)return this.nEpochs;var e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200},t}();function y(t,e){for(var r=0,n=0;n<t.length;n++)r+=Math.pow(t[n]-e[n],2);return Math.sqrt(r)}e.UMAP=g,e.euclidean=y,e.cosine=function(t,e){for(var r=0,n=0,i=0,a=0;a<t.length;a++)r+=t[a]*e[a],n+=Math.pow(t[a],2),i+=Math.pow(e[a],2);return 0===n&&0===i?0:0===n||0===i?1:1-r/Math.sqrt(n*i)};var w=function(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0};function S(t,e){return t>e?e:t<-e?-e:t}function b(t,e){for(var r=0,n=0;n<t.length;n++)r+=Math.pow(t[n]-e[n],2);return r}function M(t,e){var r=p.linear(0,3*t,300).map((function(t){return t<e?1:t})),n=p.zeros(r.length).map((function(n,i){return r[i]>=e?Math.exp(-(r[i]-e)/t):n})),i={x:r,y:n},o=m.default(i,(function(t){var e=a(t,2),r=e[0],n=e[1];return function(t){return 1/(1+r*Math.pow(t,2*n))}}),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}).parameterValues,s=a(o,2);return{a:s[0],b:s[1]}}function z(t,e,r,n){return void 0===r&&(r=1),void 0===n&&(n=5),t.map((function(t,i,a){return-1===e[i]||-1===e[a]?t*Math.exp(-r):e[i]!==e[a]?t*Math.exp(-n):t}))}function N(t){t=l.normalize(t,"max");var e=l.transpose(t),r=l.pairwiseMultiply(e,t);return t=l.add(t,l.subtract(e,r)),l.eliminateZeros(t)}function E(t,e,r){for(var n=p.zeros(t.length).map((function(t){return p.zeros(r[0].length)})),i=0;i<t.length;i++)for(var a=0;a<t[0].length;a++)for(var o=0;o<r[0].length;o++){var s=t[i][a];n[i][o]+=e[i][a]*r[s][o]}return n}e.findABParams=M,e.fastIntersection=z,e.resetLocalConnectivity=N,e.initTransform=E},4517:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};function n(t,e){return Math.floor(e()*t)}function i(t){for(var e=[],r=0;r<t;r++)e.push(void 0);return e}function a(t,e){return i(t).map((function(){return e}))}function o(t){return a(t,0)}function s(t){return t.reduce((function(t,e){return t+e}))}Object.defineProperty(e,"__esModule",{value:!0}),e.tauRandInt=n,e.tauRand=function(t){return t()},e.norm=function(t){var e,n,i=0;try{for(var a=r(t),o=a.next();!o.done;o=a.next()){var s=o.value;i+=Math.pow(s,2)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(e)throw e.error}}return Math.sqrt(i)},e.empty=i,e.range=function(t){return i(t).map((function(t,e){return e}))},e.filled=a,e.zeros=o,e.ones=function(t){return a(t,1)},e.linear=function(t,e,r){return i(r).map((function(n,i){return t+i*((e-t)/(r-1))}))},e.sum=s,e.mean=function(t){return s(t)/t.length},e.max=function(t){for(var e=0,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return e},e.max2d=function(t){for(var e=0,r=0;r<t.length;r++)for(var n=0;n<t[r].length;n++)e=t[r][n]>e?t[r][n]:e;return e},e.rejectionSample=function(t,e,r){for(var i=o(t),a=0;a<t;a++)for(var s=!0;s;){for(var h=n(e,r),u=!1,l=0;l<a;l++)if(h===i[l]){u=!0;break}u||(s=!1),i[a]=h}return i},e.reshape2d=function(t,e,r){var n=[],i=0;if(t.length!==e*r)throw new Error("Array dimensions must match input length.");for(var a=0;a<e;a++){for(var o=[],s=0;s<r;s++)o.push(t[i]),i+=1;n.push(o)}return n}}}]);
|
|
1
|
+
"use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[221],{3107:(t,e,r)=>{r.r(e),r.d(e,{default:()=>o});var n=r(7531),i=r(1353),a=r(8188);function o(t,e,r={}){let{maxIterations:o=100,gradientDifference:s=.1,damping:h=0,errorTolerance:u=.01,minValues:l,maxValues:c,initialValues:f}=r;if(h<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!(0,n.Z)(t.x)||t.x.length<2||!(0,n.Z)(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let p=f||new Array(e.length).fill(1),m=p.length;if(c=c||new Array(m).fill(Number.MAX_SAFE_INTEGER),l=l||new Array(m).fill(Number.MIN_SAFE_INTEGER),c.length!==l.length)throw new Error("minValues and maxValues must be the same size");if(!(0,n.Z)(p))throw new Error("initialValues must be an array");let v,d=(0,i.Z)(t,p,e),g=d<=u;for(v=0;v<o&&!g;v++){p=(0,a.Z)(t,p,h,s,e);for(let t=0;t<m;t++)p[t]=Math.min(Math.max(l[t],p[t]),c[t]);if(d=(0,i.Z)(t,p,e),isNaN(d))break;g=d<=u}return{parameterValues:p,parameterError:d,iterations:v}}},9378:function(t,e,r){var n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var i=n(r(4517));function a(t,e){var r=function(r){return i.empty(t).map((function(){return i.filled(e,r)}))},n=[];return n.push(r(-1)),n.push(r(1/0)),n.push(r(0)),n}function o(t,e,r,n,i){e=Math.floor(e);var a=t[0][e],o=t[1][e];if(t[2][e],r>=o[0])return 0;for(var h=0;h<a.length;h++)if(n===a[h])return 0;return s(t,e,r,n,i)}function s(t,e,r,n,i){var a=t[0][e],o=t[1][e],s=t[2][e];if(r>=o[0])return 0;o[0]=r,a[0]=n,s[0]=i;for(var h=0,u=0;;){var l=2*h+1,c=l+1,f=t[0][0].length;if(l>=f)break;if(c>=f){if(!(o[l]>r))break;u=l}else if(o[l]>=o[c]){if(!(r<o[l]))break;u=l}else{if(!(r<o[c]))break;u=c}o[h]=o[u],a[h]=a[u],s[h]=s[u],h=u}return o[h]=r,a[h]=n,s[h]=i,1}function h(t,e,r,n){for(;2*n+1<r;){var i=2*n+1,a=i+1,o=n;if(t[o]<t[i]&&(o=i),a<r&&t[o]<t[a]&&(o=a),o===n)break;var s=t[n];t[n]=t[o],t[o]=s;var h=e[n];e[n]=e[o],e[o]=h,n=o}}e.makeHeap=a,e.rejectionSample=function(t,e,r){for(var n=i.zeros(t),a=0;a<t;a++){for(var o=!0,s=0;o;){s=i.tauRandInt(e,r);for(var h=!1,u=0;u<a;u++)if(s===n[u]){h=!0;break}h||(o=!1)}n[a]=s}return n},e.heapPush=o,e.uncheckedHeapPush=s,e.buildCandidates=function(t,e,r,n,s){for(var h=a(e,n),u=0;u<e;u++)for(var l=0;l<r;l++)if(!(t[0][u][l]<0)){var c=t[0][u][l],f=t[2][u][l],p=i.tauRand(s);o(h,u,p,c,f),o(h,c,p,u,f),t[2][u][l]=0}return h},e.deheapSort=function(t){for(var e=t[0],r=t[1],n=0;n<e.length;n++)for(var i=e[n],a=r[n],o=0;o<i.length-1;o++){var s=i.length-o-1,u=a.length-o-1,l=i[0];i[0]=i[s],i[s]=l;var c=a[0];a[0]=a[u],a[u]=c,h(a,i,u,0)}return{indices:e,weights:r}},e.smallestFlagged=function(t,e){for(var r=t[0][e],n=t[1][e],i=t[2][e],a=1/0,o=-1,s=0;s>r.length;s++)1===i[s]&&n[s]<a&&(a=n[s],o=s);return o>=0?(i[o]=0,Math.floor(r[o])):-1}},4221:(t,e,r)=>{var n=r(4364);e.u=n.UMAP},5686:function(t,e,r){var n,i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(4517)),h=function(){function t(t,e,r,n){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==r.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=n[0],this.nCols=n[1];for(var i=0;i<r.length;i++){var a=t[i],o=e[i];this.checkDims(a,o);var s=this.makeKey(a,o);this.entries.set(s,{value:r[i],row:a,col:o})}}return t.prototype.makeKey=function(t,e){return t+":"+e},t.prototype.checkDims=function(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")},t.prototype.set=function(t,e,r){this.checkDims(t,e);var n=this.makeKey(t,e);this.entries.has(n)?this.entries.get(n).value=r:this.entries.set(n,{value:r,row:t,col:e})},t.prototype.get=function(t,e,r){void 0===r&&(r=0),this.checkDims(t,e);var n=this.makeKey(t,e);return this.entries.has(n)?this.entries.get(n).value:r},t.prototype.getAll=function(t){void 0===t&&(t=!0);var e=[];return this.entries.forEach((function(t){e.push(t)})),t&&e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row})),e},t.prototype.getDims=function(){return[this.nRows,this.nCols]},t.prototype.getRows=function(){return Array.from(this.entries,(function(t){var e=i(t,2);return e[0],e[1].row}))},t.prototype.getCols=function(){return Array.from(this.entries,(function(t){var e=i(t,2);return e[0],e[1].col}))},t.prototype.getValues=function(){return Array.from(this.entries,(function(t){var e=i(t,2);return e[0],e[1].value}))},t.prototype.forEach=function(t){this.entries.forEach((function(e){return t(e.value,e.row,e.col)}))},t.prototype.map=function(e){var r=[];this.entries.forEach((function(t){r.push(e(t.value,t.row,t.col))}));var n=[this.nRows,this.nCols];return new t(this.getRows(),this.getCols(),r,n)},t.prototype.toArray=function(){var t=this,e=s.empty(this.nRows).map((function(){return s.zeros(t.nCols)}));return this.entries.forEach((function(t){e[t.row][t.col]=t.value})),e},t}();e.SparseMatrix=h,e.transpose=function(t){var e=[],r=[],n=[];t.forEach((function(t,i,a){e.push(i),r.push(a),n.push(t)}));var i=[t.nCols,t.nRows];return new h(r,e,n,i)},e.identity=function(t){for(var e=i(t,1)[0],r=new h([],[],[],t),n=0;n<e;n++)r.set(n,n,1);return r},e.pairwiseMultiply=function(t,e){return l(t,e,(function(t,e){return t*e}))},e.add=function(t,e){return l(t,e,(function(t,e){return t+e}))},e.subtract=function(t,e){return l(t,e,(function(t,e){return t-e}))},e.maximum=function(t,e){return l(t,e,(function(t,e){return t>e?t:e}))},e.multiplyScalar=function(t,e){return t.map((function(t){return t*e}))},e.eliminateZeros=function(t){for(var e=new Set,r=t.getValues(),n=t.getRows(),i=t.getCols(),a=0;a<r.length;a++)0===r[a]&&e.add(a);var o=function(t,r){return!e.has(r)},s=r.filter(o),u=n.filter(o),l=i.filter(o);return new h(u,l,s,t.getDims())},e.normalize=function(t,e){var r,n;void 0===e&&(e="l2");var i=u[e],o=new Map;t.forEach((function(t,e,r){var n=o.get(e)||[];n.push(r),o.set(e,n)}));var s=new h([],[],[],t.getDims()),l=function(e){for(var r=o.get(e).sort(),n=r.map((function(r){return t.get(e,r)})),a=i(n),h=0;h<a.length;h++)s.set(e,r[h],a[h])};try{for(var c=a(o.keys()),f=c.next();!f.done;f=c.next())l(f.value)}catch(t){r={error:t}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return s};var u=((n={}).max=function(t){for(var e=-1/0,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return t.map((function(t){return t/e}))},n.l1=function(t){for(var e=0,r=0;r<t.length;r++)e+=t[r];return t.map((function(t){return t/e}))},n.l2=function(t){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r],2);return t.map((function(t){return Math.sqrt(Math.pow(t,2)/e)}))},n);function l(t,e,r){for(var n=new Set,i=[],a=[],o=[],s=function(n,s){i.push(n),a.push(s);var h=r(t.get(n,s),e.get(n,s));o.push(h)},u=t.getValues(),l=t.getRows(),c=t.getCols(),f=0;f<u.length;f++){var p=(g=l[f])+":"+(y=c[f]);n.add(p),s(g,y)}var m=e.getValues(),v=e.getRows(),d=e.getCols();for(f=0;f<m.length;f++){var g,y;p=(g=v[f])+":"+(y=d[f]),n.has(p)||s(g,y)}var w=[t.nRows,t.nCols];return new h(i,a,o,w)}e.getCSR=function(t){var e=[];t.forEach((function(t,r,n){e.push({value:t,row:r,col:n})})),e.sort((function(t,e){return t.row===e.row?t.col-e.col:t.row-e.row}));for(var r=[],n=[],i=[],a=-1,o=0;o<e.length;o++){var s=e[o],h=s.row,u=s.col,l=s.value;h!==a&&(a=h,i.push(o)),r.push(u),n.push(l)}return{indices:r,values:n,indptr:i}}},760:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var a=i(r(9378)),o=i(r(5686)),s=i(r(2320)),h=i(r(4517));e.makeNNDescent=function(t,e){return function(r,n,i,o,s,u,l,c){void 0===o&&(o=10),void 0===s&&(s=50),void 0===u&&(u=.001),void 0===l&&(l=.5),void 0===c&&(c=!0);for(var f=r.length,p=a.makeHeap(r.length,i),m=0;m<r.length;m++)for(var v=a.rejectionSample(i,r.length,e),d=0;d<v.length;d++){var g=t(r[m],r[v[d]]);a.heapPush(p,m,g,v[d],1),a.heapPush(p,v[d],g,m,1)}if(c)for(var y=0;y<n.length;y++)for(m=0;m<n[y].length&&!(n[y][m]<0);m++)for(d=m+1;d<n[y].length&&!(n[y][d]<0);d++)g=t(r[n[y][m]],r[n[y][d]]),a.heapPush(p,n[y][m],g,n[y][d],1),a.heapPush(p,n[y][d],g,n[y][m],1);for(y=0;y<o;y++){var w=a.buildCandidates(p,f,i,s,e),S=0;for(m=0;m<f;m++)for(d=0;d<s;d++){var b=Math.floor(w[0][m][d]);if(!(b<0||h.tauRand(e)<l))for(var M=0;M<s;M++){var z=Math.floor(w[0][m][M]),N=w[2][m][d],E=w[2][m][M];z<0||!N&&!E||(g=t(r[b],r[z]),S+=a.heapPush(p,b,g,z,1),S+=a.heapPush(p,z,g,b,1))}}if(S<=u*i*r.length)break}return a.deheapSort(p)}},e.makeInitializations=function(t){return{initFromRandom:function(e,r,n,i,o){for(var s=0;s<n.length;s++)for(var u=h.rejectionSample(e,r.length,o),l=0;l<u.length;l++)if(!(u[l]<0)){var c=t(r[u[l]],n[s]);a.heapPush(i,s,c,u[l],1)}},initFromTree:function(e,r,n,i,o){for(var h=0;h<n.length;h++)for(var u=s.searchFlatTree(n[h],e,o),l=0;l<u.length;l++){if(u[l]<0)return;var c=t(r[u[l]],n[h]);a.heapPush(i,h,c,u[l],1)}}}},e.makeInitializedNNSearch=function(t){return function(e,r,i,s){for(var h,u,l=o.getCSR(r),c=l.indices,f=l.indptr,p=0;p<s.length;p++)for(var m=new Set(i[0][p]);;){var v=a.smallestFlagged(i,p);if(-1===v)break;var d=c.slice(f[v],f[v+1]);try{for(var g=n(d),y=g.next();!y.done;y=g.next()){var w=y.value;if(w!==v&&-1!==w&&!m.has(w)){var S=t(e[w],s[p]);a.uncheckedHeapPush(i,p,S,w,1),m.add(w)}}}catch(t){h={error:t}}finally{try{y&&!y.done&&(u=g.return)&&u.call(g)}finally{if(h)throw h.error}}}return i}},e.initializeSearch=function(t,e,r,i,o,s,h){var u,l,c=a.makeHeap(r.length,i);if(o(i,e,r,c,h),t)try{for(var f=n(t),p=f.next();!p.done;p=f.next())s(p.value,e,r,c,h)}catch(t){u={error:t}}finally{try{p&&!p.done&&(l=f.return)&&l.call(f)}finally{if(u)throw u.error}}return c}},2320:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}},o=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e};Object.defineProperty(e,"__esModule",{value:!0});var s=o(r(4517)),h=function(t,e,r,n){this.hyperplanes=t,this.offsets=e,this.children=r,this.indices=n};function u(t,e,r,n,i){if(void 0===r&&(r=30),e.length>r){var a=function(t,e,r){var n=t[0].length,i=s.tauRandInt(e.length,r),a=s.tauRandInt(e.length,r);a=(a+=i===a?1:0)%e.length;for(var o=e[i],h=e[a],u=0,l=s.zeros(n),c=0;c<l.length;c++)l[c]=t[o][c]-t[h][c],u-=l[c]*(t[o][c]+t[h][c])/2;var f=0,p=0,m=s.zeros(e.length);for(c=0;c<e.length;c++){for(var v=u,d=0;d<n;d++)v+=l[d]*t[e[c]][d];0===v?(m[c]=s.tauRandInt(2,r),0===m[c]?f+=1:p+=1):v>0?(m[c]=0,f+=1):(m[c]=1,p+=1)}var g=s.zeros(f),y=s.zeros(p);for(f=0,p=0,c=0;c<m.length;c++)0===m[c]?(g[f]=e[c],f+=1):(y[p]=e[c],p+=1);return{indicesLeft:g,indicesRight:y,hyperplane:l,offset:u}}(t,e,i),o=a.indicesLeft,h=a.indicesRight,l=a.hyperplane,c=a.offset;return{leftChild:u(t,o,r,n+1,i),rightChild:u(t,h,r,n+1,i),isLeaf:!1,hyperplane:l,offset:c}}return{indices:e,isLeaf:!0}}function l(t,e,r,n,a,o,s){var h;if(t.isLeaf)return n[o][0]=-s,(h=a[s]).splice.apply(h,i([0,t.indices.length],t.indices)),{nodeNum:o,leafNum:s+=1};e[o]=t.hyperplane,r[o]=t.offset,n[o][0]=o+1;var u=o,c=l(t.leftChild,e,r,n,a,o+1,s);return o=c.nodeNum,s=c.leafNum,n[u][1]=o+1,{nodeNum:(c=l(t.rightChild,e,r,n,a,o+1,s)).nodeNum,leafNum:c.leafNum}}function c(t){return t.isLeaf?1:1+c(t.leftChild)+c(t.rightChild)}function f(t){return t.isLeaf?1:f(t.leftChild)+f(t.rightChild)}function p(t,e,r,n){for(var i=e,a=0;a<r.length;a++)i+=t[a]*r[a];return 0===i?s.tauRandInt(2,n):i>0?0:1}e.FlatTree=h,e.makeForest=function(t,e,r,n){var i=Math.max(10,e);return s.range(r).map((function(e,r){return function(t,e,r,n){return void 0===e&&(e=30),u(t,s.range(t.length),e,r,n)}(t,i,r,n)})).map((function(t){return function(t,e){var r=c(t),n=f(t),i=s.range(r).map((function(){return s.zeros(t.hyperplane?t.hyperplane.length:0)})),a=s.zeros(r),o=s.range(r).map((function(){return[-1,-1]})),u=s.range(n).map((function(){return s.range(e).map((function(){return-1}))}));return l(t,i,a,o,u,0,0),new h(i,a,o,u)}(t,i)}))},e.makeLeafArray=function(t){var e,r;if(t.length>0){var n=[];try{for(var o=a(t),s=o.next();!s.done;s=o.next()){var h=s.value;n.push.apply(n,i(h.indices))}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n}return[[-1]]},e.searchFlatTree=function(t,e,r){for(var n=0;e.children[n][0]>0;)n=0===p(e.hyperplanes[n],e.offsets[n],t,r)?e.children[n][0]:e.children[n][1];var i=-1*e.children[n][0];return e.indices[i]}},4364:function(t,e,r){var n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(i,a){function o(t){try{h(n.next(t))}catch(t){a(t)}}function s(t){try{h(n.throw(t))}catch(t){a(t)}}function h(t){t.done?i(t.value):new r((function(e){e(t.value)})).then(o,s)}h((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,n=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=e.call(t,o)}catch(t){a=[6,t],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t},s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)Object.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e},h=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=s(r(9378)),l=s(r(5686)),c=s(r(760)),f=s(r(2320)),p=s(r(4517)),m=h(r(3107)),v=1e-5,d=.001,g=function(){function t(t){void 0===t&&(t={});var e=this;this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=y,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new w;var r=function(r){void 0!==t[r]&&(e[r]=t[r])};r("distanceFn"),r("learningRate"),r("localConnectivity"),r("minDist"),r("nComponents"),r("nEpochs"),r("nNeighbors"),r("negativeSampleRate"),r("random"),r("repulsionStrength"),r("setOpMixRatio"),r("spread"),r("transformQueueSize")}return t.prototype.fit=function(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding},t.prototype.fitAsync=function(t,e){return void 0===e&&(e=function(){return!0}),n(this,void 0,void 0,(function(){return i(this,(function(r){switch(r.label){case 0:return this.initializeFit(t),[4,this.optimizeLayoutAsync(e)];case 1:return r.sent(),[2,this.embedding]}}))}))},t.prototype.setSupervisedProjection=function(t,e){void 0===e&&(e={}),this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors},t.prototype.setPrecomputedKNN=function(t,e){this.knnIndices=t,this.knnDistances=e},t.prototype.initializeFit=function(t){if(t.length<=this.nNeighbors)throw new Error("Not enough data points ("+t.length+") to create nNeighbors: "+this.nNeighbors+". Add more data points or adjust the configuration.");if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){var e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();var r=this.initializeSimplicialSetEmbedding(),n=r.head,i=r.tail,a=r.epochsPerSample;return this.optimizationState.head=n,this.optimizationState.tail=i,this.optimizationState.epochsPerSample=a,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()},t.prototype.makeSearchFns=function(){var t=c.makeInitializations(this.distanceFn),e=t.initFromTree,r=t.initFromRandom;this.initFromTree=e,this.initFromRandom=r,this.search=c.makeInitializedNNSearch(this.distanceFn)},t.prototype.makeSearchGraph=function(t){for(var e=this.knnIndices,r=this.knnDistances,n=[t.length,t.length],i=new l.SparseMatrix([],[],[],n),a=0;a<e.length;a++)for(var o=e[a],s=r[a],h=0;h<o.length;h++){var u=o[h],c=s[h];c>0&&i.set(a,u,c)}var f=l.transpose(i);return l.maximum(i,f)},t.prototype.transform=function(t){var e=this,r=this.X;if(void 0===r||0===r.length)throw new Error("No data has been fit.");var n=Math.floor(this.nNeighbors*this.transformQueueSize);n=Math.min(r.length,n);var i=c.initializeSearch(this.rpForest,r,t,n,this.initFromRandom,this.initFromTree,this.random),a=this.search(r,this.searchGraph,i,t),o=u.deheapSort(a),s=o.indices,h=o.weights;s=s.map((function(t){return t.slice(0,e.nNeighbors)})),h=h.map((function(t){return t.slice(0,e.nNeighbors)}));var f=Math.max(0,this.localConnectivity-1),m=this.smoothKNNDistance(h,this.nNeighbors,f),v=m.sigmas,d=m.rhos,g=this.computeMembershipStrengths(s,h,v,d),y=g.rows,w=g.cols,S=g.vals,b=[t.length,r.length],M=new l.SparseMatrix(y,w,S,b),z=l.normalize(M,"l1"),N=l.getCSR(z),k=t.length,x=E(p.reshape2d(N.indices,k,this.nNeighbors),p.reshape2d(N.values,k,this.nNeighbors),this.embedding),_=this.nEpochs?this.nEpochs/3:M.nRows<=1e4?100:30,P=M.getValues().reduce((function(t,e){return e>t?e:t}),0);M=M.map((function(t){return t<P/_?0:t})),M=l.eliminateZeros(M);var R=this.makeEpochsPerSample(M.getValues(),_),C=M.getRows(),O=M.getCols();return this.assignOptimizationStateParameters({headEmbedding:x,tailEmbedding:this.embedding,head:C,tail:O,currentEpoch:0,nEpochs:_,nVertices:M.getDims()[1],epochsPerSample:R}),this.prepareForOptimizationLoop(),this.optimizeLayout()},t.prototype.processGraphForSupervisedProjection=function(){var t=this.Y,e=this.X;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){var r=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,r)}}},t.prototype.step=function(){var t=this.optimizationState.currentEpoch;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch},t.prototype.getEmbedding=function(){return this.embedding},t.prototype.nearestNeighbors=function(t){var e,r=this.distanceFn,n=this.nNeighbors,i=c.makeNNDescent(r,this.random),a=5+Math.floor(.5==(e=Math.pow(t.length,.5)/20)?0:Math.round(e)),o=Math.max(5,Math.floor(Math.round(function(t){return Math.log(t)/Math.log(2)}(t.length))));this.rpForest=f.makeForest(t,n,a,this.random);var s=i(t,f.makeLeafArray(this.rpForest),n,o);return{knnIndices:s.indices,knnDistances:s.weights}},t.prototype.fuzzySimplicialSet=function(t,e,r){void 0===r&&(r=1);var n=this,i=n.knnIndices,a=void 0===i?[]:i,o=n.knnDistances,s=void 0===o?[]:o,h=n.localConnectivity,u=this.smoothKNNDistance(s,e,h),c=u.sigmas,f=u.rhos,p=this.computeMembershipStrengths(a,s,c,f),m=p.rows,v=p.cols,d=p.vals,g=[t.length,t.length],y=new l.SparseMatrix(m,v,d,g),w=l.transpose(y),S=l.pairwiseMultiply(y,w),b=l.subtract(l.add(y,w),S),M=l.multiplyScalar(b,r),z=l.multiplyScalar(S,1-r);return l.add(M,z)},t.prototype.categoricalSimplicialSetIntersection=function(t,e,r,n){void 0===n&&(n=1);var i=z(t,e,n,r);return N(i=l.eliminateZeros(i))},t.prototype.smoothKNNDistance=function(t,e,r,n,i){void 0===r&&(r=1),void 0===n&&(n=64),void 0===i&&(i=1);for(var a=Math.log(e)/Math.log(2)*i,o=p.zeros(t.length),s=p.zeros(t.length),h=0;h<t.length;h++){var u=0,l=1/0,c=1,f=t[h],m=f.filter((function(t){return t>0}));if(m.length>=r){var g=Math.floor(r),y=r-g;g>0?(o[h]=m[g-1],y>v&&(o[h]+=y*(m[g]-m[g-1]))):o[h]=y*m[0]}else m.length>0&&(o[h]=p.max(m));for(var w=0;w<n;w++){for(var S=0,b=1;b<t[h].length;b++){var M=t[h][b]-o[h];S+=M>0?Math.exp(-M/c):1}if(Math.abs(S-a)<v)break;S>a?c=(u+(l=c))/2:(u=c,l===1/0?c*=2:c=(u+l)/2)}if(s[h]=c,o[h]>0){var z=p.mean(f);s[h]<d*z&&(s[h]=d*z)}else{var N=p.mean(t.map(p.mean));s[h]<d*N&&(s[h]=d*N)}}return{sigmas:s,rhos:o}},t.prototype.computeMembershipStrengths=function(t,e,r,n){for(var i=t.length,a=t[0].length,o=p.zeros(i*a),s=p.zeros(i*a),h=p.zeros(i*a),u=0;u<i;u++)for(var l=0;l<a;l++){var c=0;-1!==t[u][l]&&(c=t[u][l]===u?0:e[u][l]-n[u]<=0?1:Math.exp(-(e[u][l]-n[u])/r[u]),o[u*a+l]=u,s[u*a+l]=t[u][l],h[u*a+l]=c)}return{rows:o,cols:s,vals:h}},t.prototype.initializeSimplicialSetEmbedding=function(){for(var t=this,e=this.getNEpochs(),r=this.nComponents,n=this.graph.getValues(),i=0,a=0;a<n.length;a++){var o=n[a];i<n[a]&&(i=o)}var s=this.graph.map((function(t){return t<i/e?0:t}));this.embedding=p.zeros(s.nRows).map((function(){return p.zeros(r).map((function(){return 20*p.tauRand(t.random)-10}))}));var h=[],u=[],l=[],c=s.getAll();for(a=0;a<c.length;a++){var f=c[a];f.value&&(h.push(f.value),l.push(f.row),u.push(f.col))}return{head:u,tail:l,epochsPerSample:this.makeEpochsPerSample(h,e)}},t.prototype.makeEpochsPerSample=function(t,e){var r=p.filled(t.length,-1),n=p.max(t),i=t.map((function(t){return t/n*e}));return i.forEach((function(t,n){t>0&&(r[n]=e/i[n])})),r},t.prototype.assignOptimizationStateParameters=function(t){Object.assign(this.optimizationState,t)},t.prototype.prepareForOptimizationLoop=function(){var t=this,e=t.repulsionStrength,r=t.learningRate,n=t.negativeSampleRate,i=this.optimizationState,a=i.epochsPerSample,s=i.headEmbedding,h=i.tailEmbedding,u=s[0].length,l=s.length===h.length,c=a.map((function(t){return t/n})),f=o(c),p=o(a);this.assignOptimizationStateParameters({epochOfNextSample:p,epochOfNextNegativeSample:f,epochsPerNegativeSample:c,moveOther:l,initialAlpha:r,alpha:r,gamma:e,dim:u})},t.prototype.initializeOptimization=function(){var t=this.embedding,e=this.embedding,r=this.optimizationState,n=r.head,i=r.tail,a=r.epochsPerSample,o=this.getNEpochs(),s=this.graph.nCols,h=M(this.spread,this.minDist),u=h.a,l=h.b;this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:n,tail:i,epochsPerSample:a,a:u,b:l,nEpochs:o,nVertices:s})},t.prototype.optimizeLayoutStep=function(t){for(var e=this.optimizationState,r=e.head,n=e.tail,i=e.headEmbedding,a=e.tailEmbedding,o=e.epochsPerSample,s=e.epochOfNextSample,h=e.epochOfNextNegativeSample,u=e.epochsPerNegativeSample,l=e.moveOther,c=e.initialAlpha,f=e.alpha,m=e.gamma,v=e.a,d=e.b,g=e.dim,y=e.nEpochs,w=e.nVertices,M=0;M<o.length;M++)if(!(s[M]>t)){var z=r[M],N=n[M],E=i[z],k=a[N],x=b(E,k),_=0;x>0&&(_=-2*v*d*Math.pow(x,d-1),_/=v*Math.pow(x,d)+1);for(var P=0;P<g;P++){var R=S(_*(E[P]-k[P]),4);E[P]+=R*f,l&&(k[P]+=-R*f)}s[M]+=o[M];for(var C=Math.floor((t-h[M])/u[M]),O=0;O<C;O++){var F=p.tauRandInt(w,this.random),I=a[F],D=b(E,I),A=0;if(D>0)A=2*m*d,A/=(.001+D)*(v*Math.pow(D,d)+1);else if(z===F)continue;for(P=0;P<g;P++)R=4,A>0&&(R=S(A*(E[P]-I[P]),4)),E[P]+=R*f}h[M]+=C*u[M]}return e.alpha=c*(1-t/y),e.currentEpoch+=1,i},t.prototype.optimizeLayoutAsync=function(t){var e=this;return void 0===t&&(t=function(){return!0}),new Promise((function(r,a){var o=function(){return n(e,void 0,void 0,(function(){var e,n,s,h,u,l;return i(this,(function(i){try{if(e=this.optimizationState,n=e.nEpochs,s=e.currentEpoch,this.embedding=this.optimizeLayoutStep(s),h=this.optimizationState.currentEpoch,u=!1===t(h),l=h===n,u||l)return[2,r(l)];setTimeout((function(){return o()}),0)}catch(t){a(t)}return[2]}))}))};setTimeout((function(){return o()}),0)}))},t.prototype.optimizeLayout=function(t){void 0===t&&(t=function(){return!0});for(var e=!1,r=[];!e;){var n=this.optimizationState,i=n.nEpochs,a=n.currentEpoch;r=this.optimizeLayoutStep(a);var o=this.optimizationState.currentEpoch,s=!1===t(o);e=o===i||s}return r},t.prototype.getNEpochs=function(){var t=this.graph;if(this.nEpochs>0)return this.nEpochs;var e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200},t}();function y(t,e){for(var r=0,n=0;n<t.length;n++)r+=Math.pow(t[n]-e[n],2);return Math.sqrt(r)}e.UMAP=g,e.euclidean=y,e.cosine=function(t,e){for(var r=0,n=0,i=0,a=0;a<t.length;a++)r+=t[a]*e[a],n+=Math.pow(t[a],2),i+=Math.pow(e[a],2);return 0===n&&0===i?0:0===n||0===i?1:1-r/Math.sqrt(n*i)};var w=function(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0};function S(t,e){return t>e?e:t<-e?-e:t}function b(t,e){for(var r=0,n=0;n<t.length;n++)r+=Math.pow(t[n]-e[n],2);return r}function M(t,e){var r=p.linear(0,3*t,300).map((function(t){return t<e?1:t})),n=p.zeros(r.length).map((function(n,i){return r[i]>=e?Math.exp(-(r[i]-e)/t):n})),i={x:r,y:n},o=m.default(i,(function(t){var e=a(t,2),r=e[0],n=e[1];return function(t){return 1/(1+r*Math.pow(t,2*n))}}),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}).parameterValues,s=a(o,2);return{a:s[0],b:s[1]}}function z(t,e,r,n){return void 0===r&&(r=1),void 0===n&&(n=5),t.map((function(t,i,a){return-1===e[i]||-1===e[a]?t*Math.exp(-r):e[i]!==e[a]?t*Math.exp(-n):t}))}function N(t){t=l.normalize(t,"max");var e=l.transpose(t),r=l.pairwiseMultiply(e,t);return t=l.add(t,l.subtract(e,r)),l.eliminateZeros(t)}function E(t,e,r){for(var n=p.zeros(t.length).map((function(t){return p.zeros(r[0].length)})),i=0;i<t.length;i++)for(var a=0;a<t[0].length;a++)for(var o=0;o<r[0].length;o++){var s=t[i][a];n[i][o]+=e[i][a]*r[s][o]}return n}e.findABParams=M,e.fastIntersection=z,e.resetLocalConnectivity=N,e.initTransform=E},4517:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&t[Symbol.iterator],r=0;return e?e.call(t):{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};function n(t,e){return Math.floor(e()*t)}function i(t){for(var e=[],r=0;r<t;r++)e.push(void 0);return e}function a(t,e){return i(t).map((function(){return e}))}function o(t){return a(t,0)}function s(t){return t.reduce((function(t,e){return t+e}))}Object.defineProperty(e,"__esModule",{value:!0}),e.tauRandInt=n,e.tauRand=function(t){return t()},e.norm=function(t){var e,n,i=0;try{for(var a=r(t),o=a.next();!o.done;o=a.next()){var s=o.value;i+=Math.pow(s,2)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(e)throw e.error}}return Math.sqrt(i)},e.empty=i,e.range=function(t){return i(t).map((function(t,e){return e}))},e.filled=a,e.zeros=o,e.ones=function(t){return a(t,1)},e.linear=function(t,e,r){return i(r).map((function(n,i){return t+i*((e-t)/(r-1))}))},e.sum=s,e.mean=function(t){return s(t)/t.length},e.max=function(t){for(var e=0,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return e},e.max2d=function(t){for(var e=0,r=0;r<t.length;r++)for(var n=0;n<t[r].length;n++)e=t[r][n]>e?t[r][n]:e;return e},e.rejectionSample=function(t,e,r){for(var i=o(t),a=0;a<t;a++)for(var s=!0;s;){for(var h=n(e,r),u=!1,l=0;l<a;l++)if(h===i[l]){u=!0;break}u||(s=!1),i[a]=h}return i},e.reshape2d=function(t,e,r){var n=[],i=0;if(t.length!==e*r)throw new Error("Array dimensions must match input length.");for(var a=0;a<e;a++){for(var o=[],s=0;s<r;s++)o.push(t[i]),i+=1;n.push(o)}return n}}}]);
|
|
2
2
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUc5RCxJQUNuQitDLEVBQUloRixLQUFLMUMsRUFBRStDLElBQ1hBLEdBQVMsRUFFYm1FLEVBQUt4RSxLQUFLZ0YsRUFFZCxDQUNBLE9BQU9SLENBQ1gsQyIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9tbC1sZXZlbmJlcmctbWFycXVhcmR0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L2hlYXAuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3VtYXAtanMvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L21hdHJpeC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L25uX2Rlc2NlbnQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3VtYXAtanMvZGlzdC90cmVlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy91bWFwLWpzL2Rpc3QvdW1hcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvdW1hcC1qcy9kaXN0L3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0FycmF5IGZyb20gJ2lzLWFueS1hcnJheSc7XG5cbmltcG9ydCBlcnJvckNhbGN1bGF0aW9uIGZyb20gJy4vZXJyb3JDYWxjdWxhdGlvbic7XG5pbXBvcnQgc3RlcCBmcm9tICcuL3N0ZXAnO1xuXG4vKipcbiAqIEN1cnZlIGZpdHRpbmcgYWxnb3JpdGhtXG4gKiBAcGFyYW0ge3t4OkFycmF5PG51bWJlcj4sIHk6QXJyYXk8bnVtYmVyPn19IGRhdGEgLSBBcnJheSBvZiBwb2ludHMgdG8gZml0IGluIHRoZSBmb3JtYXQgW3gxLCB4MiwgLi4uIF0sIFt5MSwgeTIsIC4uLiBdXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbWV0ZXJpemVkRnVuY3Rpb24gLSBUaGUgcGFyYW1ldGVycyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gT3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kYW1waW5nXSAtIExldmVuYmVyZy1NYXJxdWFyZHQgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ3JhZGllbnREaWZmZXJlbmNlID0gMTBlLTJdIC0gQWRqdXN0bWVudCBmb3IgZGVjcmVhc2UgdGhlIGRhbXBpbmcgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLm1pblZhbHVlc10gLSBNaW5pbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLm1heFZhbHVlc10gLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmluaXRpYWxWYWx1ZXNdIC0gQXJyYXkgb2YgaW5pdGlhbCBwYXJhbWV0ZXIgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4SXRlcmF0aW9ucyA9IDEwMF0gLSBNYXhpbXVtIG9mIGFsbG93ZWQgaXRlcmF0aW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmVycm9yVG9sZXJhbmNlID0gMTBlLTNdIC0gTWluaW11bSB1bmNlcnRhaW50eSBhbGxvd2VkIGZvciBlYWNoIHBvaW50XG4gKiBAcmV0dXJuIHt7cGFyYW1ldGVyVmFsdWVzOiBBcnJheTxudW1iZXI+LCBwYXJhbWV0ZXJFcnJvcjogbnVtYmVyLCBpdGVyYXRpb25zOiBudW1iZXJ9fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsZXZlbmJlcmdNYXJxdWFyZHQoXG4gIGRhdGEsXG4gIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgb3B0aW9ucyA9IHt9LFxuKSB7XG4gIGxldCB7XG4gICAgbWF4SXRlcmF0aW9ucyA9IDEwMCxcbiAgICBncmFkaWVudERpZmZlcmVuY2UgPSAxMGUtMixcbiAgICBkYW1waW5nID0gMCxcbiAgICBlcnJvclRvbGVyYW5jZSA9IDEwZS0zLFxuICAgIG1pblZhbHVlcyxcbiAgICBtYXhWYWx1ZXMsXG4gICAgaW5pdGlhbFZhbHVlcyxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKGRhbXBpbmcgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgfSBlbHNlIGlmICghZGF0YS54IHx8ICFkYXRhLnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHBhcmFtZXRlciBtdXN0IGhhdmUgeCBhbmQgeSBlbGVtZW50cycpO1xuICB9IGVsc2UgaWYgKFxuICAgICFpc0FycmF5KGRhdGEueCkgfHxcbiAgICBkYXRhLngubGVuZ3RoIDwgMiB8fFxuICAgICFpc0FycmF5KGRhdGEueSkgfHxcbiAgICBkYXRhLnkubGVuZ3RoIDwgMlxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gMiBwb2ludHMnLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoZGF0YS54Lmxlbmd0aCAhPT0gZGF0YS55Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEgcGFyYW1ldGVyIGVsZW1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzaXplJyk7XG4gIH1cblxuICBsZXQgcGFyYW1ldGVycyA9XG4gICAgaW5pdGlhbFZhbHVlcyB8fCBuZXcgQXJyYXkocGFyYW1ldGVyaXplZEZ1bmN0aW9uLmxlbmd0aCkuZmlsbCgxKTtcbiAgbGV0IHBhckxlbiA9IHBhcmFtZXRlcnMubGVuZ3RoO1xuICBtYXhWYWx1ZXMgPSBtYXhWYWx1ZXMgfHwgbmV3IEFycmF5KHBhckxlbikuZmlsbChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gIG1pblZhbHVlcyA9IG1pblZhbHVlcyB8fCBuZXcgQXJyYXkocGFyTGVuKS5maWxsKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcblxuICBpZiAobWF4VmFsdWVzLmxlbmd0aCAhPT0gbWluVmFsdWVzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWluVmFsdWVzIGFuZCBtYXhWYWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplJyk7XG4gIH1cblxuICBpZiAoIWlzQXJyYXkocGFyYW1ldGVycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luaXRpYWxWYWx1ZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG5cbiAgbGV0IGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24pO1xuXG4gIGxldCBjb252ZXJnZWQgPSBlcnJvciA8PSBlcnJvclRvbGVyYW5jZTtcblxuICBsZXQgaXRlcmF0aW9uO1xuICBmb3IgKGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMgJiYgIWNvbnZlcmdlZDsgaXRlcmF0aW9uKyspIHtcbiAgICBwYXJhbWV0ZXJzID0gc3RlcChcbiAgICAgIGRhdGEsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgZGFtcGluZyxcbiAgICAgIGdyYWRpZW50RGlmZmVyZW5jZSxcbiAgICAgIHBhcmFtZXRlcml6ZWRGdW5jdGlvbixcbiAgICApO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBwYXJMZW47IGsrKykge1xuICAgICAgcGFyYW1ldGVyc1trXSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChtaW5WYWx1ZXNba10sIHBhcmFtZXRlcnNba10pLFxuICAgICAgICBtYXhWYWx1ZXNba10sXG4gICAgICApO1xuICAgIH1cblxuICAgIGVycm9yID0gZXJyb3JDYWxjdWxhdGlvbihkYXRhLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJpemVkRnVuY3Rpb24pO1xuICAgIGlmIChpc05hTihlcnJvcikpIGJyZWFrO1xuICAgIGNvbnZlcmdlZCA9IGVycm9yIDw9IGVycm9yVG9sZXJhbmNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJWYWx1ZXM6IHBhcmFtZXRlcnMsXG4gICAgcGFyYW1ldGVyRXJyb3I6IGVycm9yLFxuICAgIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbixcbiAgfTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbmZ1bmN0aW9uIG1ha2VIZWFwKG5Qb2ludHMsIHNpemUpIHtcbiAgICB2YXIgbWFrZUFycmF5cyA9IGZ1bmN0aW9uIChmaWxsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmVtcHR5KG5Qb2ludHMpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuZmlsbGVkKHNpemUsIGZpbGxWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGhlYXAgPSBbXTtcbiAgICBoZWFwLnB1c2gobWFrZUFycmF5cygtMSkpO1xuICAgIGhlYXAucHVzaChtYWtlQXJyYXlzKEluZmluaXR5KSk7XG4gICAgaGVhcC5wdXNoKG1ha2VBcnJheXMoMCkpO1xuICAgIHJldHVybiBoZWFwO1xufVxuZXhwb3J0cy5tYWtlSGVhcCA9IG1ha2VIZWFwO1xuZnVuY3Rpb24gcmVqZWN0aW9uU2FtcGxlKG5TYW1wbGVzLCBwb29sU2l6ZSwgcmFuZG9tKSB7XG4gICAgdmFyIHJlc3VsdCA9IHV0aWxzLnplcm9zKG5TYW1wbGVzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgdmFyIHJlamVjdFNhbXBsZSA9IHRydWU7XG4gICAgICAgIHZhciBqID0gMDtcbiAgICAgICAgd2hpbGUgKHJlamVjdFNhbXBsZSkge1xuICAgICAgICAgICAgaiA9IHV0aWxzLnRhdVJhbmRJbnQocG9vbFNpemUsIHJhbmRvbSk7XG4gICAgICAgICAgICB2YXIgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGk7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChqID09PSByZXN1bHRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFicm9rZW4pXG4gICAgICAgICAgICAgICAgcmVqZWN0U2FtcGxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W2ldID0gajtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucmVqZWN0aW9uU2FtcGxlID0gcmVqZWN0aW9uU2FtcGxlO1xuZnVuY3Rpb24gaGVhcFB1c2goaGVhcCwgcm93LCB3ZWlnaHQsIGluZGV4LCBmbGFnKSB7XG4gICAgcm93ID0gTWF0aC5mbG9vcihyb3cpO1xuICAgIHZhciBpbmRpY2VzID0gaGVhcFswXVtyb3ddO1xuICAgIHZhciB3ZWlnaHRzID0gaGVhcFsxXVtyb3ddO1xuICAgIHZhciBpc05ldyA9IGhlYXBbMl1bcm93XTtcbiAgICBpZiAod2VpZ2h0ID49IHdlaWdodHNbMF0pIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXggPT09IGluZGljZXNbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmNoZWNrZWRIZWFwUHVzaChoZWFwLCByb3csIHdlaWdodCwgaW5kZXgsIGZsYWcpO1xufVxuZXhwb3J0cy5oZWFwUHVzaCA9IGhlYXBQdXNoO1xuZnVuY3Rpb24gdW5jaGVja2VkSGVhcFB1c2goaGVhcCwgcm93LCB3ZWlnaHQsIGluZGV4LCBmbGFnKSB7XG4gICAgdmFyIGluZGljZXMgPSBoZWFwWzBdW3Jvd107XG4gICAgdmFyIHdlaWdodHMgPSBoZWFwWzFdW3Jvd107XG4gICAgdmFyIGlzTmV3ID0gaGVhcFsyXVtyb3ddO1xuICAgIGlmICh3ZWlnaHQgPj0gd2VpZ2h0c1swXSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgd2VpZ2h0c1swXSA9IHdlaWdodDtcbiAgICBpbmRpY2VzWzBdID0gaW5kZXg7XG4gICAgaXNOZXdbMF0gPSBmbGFnO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaVN3YXAgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBpYzEgPSAyICogaSArIDE7XG4gICAgICAgIHZhciBpYzIgPSBpYzEgKyAxO1xuICAgICAgICB2YXIgaGVhcFNoYXBlMiA9IGhlYXBbMF1bMF0ubGVuZ3RoO1xuICAgICAgICBpZiAoaWMxID49IGhlYXBTaGFwZTIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGljMiA+PSBoZWFwU2hhcGUyKSB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0c1tpYzFdID4gd2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWlnaHRzW2ljMV0gPj0gd2VpZ2h0c1tpYzJdKSB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0IDwgd2VpZ2h0c1tpYzFdKSB7XG4gICAgICAgICAgICAgICAgaVN3YXAgPSBpYzE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3ZWlnaHQgPCB3ZWlnaHRzW2ljMl0pIHtcbiAgICAgICAgICAgICAgICBpU3dhcCA9IGljMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdlaWdodHNbaV0gPSB3ZWlnaHRzW2lTd2FwXTtcbiAgICAgICAgaW5kaWNlc1tpXSA9IGluZGljZXNbaVN3YXBdO1xuICAgICAgICBpc05ld1tpXSA9IGlzTmV3W2lTd2FwXTtcbiAgICAgICAgaSA9IGlTd2FwO1xuICAgIH1cbiAgICB3ZWlnaHRzW2ldID0gd2VpZ2h0O1xuICAgIGluZGljZXNbaV0gPSBpbmRleDtcbiAgICBpc05ld1tpXSA9IGZsYWc7XG4gICAgcmV0dXJuIDE7XG59XG5leHBvcnRzLnVuY2hlY2tlZEhlYXBQdXNoID0gdW5jaGVja2VkSGVhcFB1c2g7XG5mdW5jdGlvbiBidWlsZENhbmRpZGF0ZXMoY3VycmVudEdyYXBoLCBuVmVydGljZXMsIG5OZWlnaGJvcnMsIG1heENhbmRpZGF0ZXMsIHJhbmRvbSkge1xuICAgIHZhciBjYW5kaWRhdGVOZWlnaGJvcnMgPSBtYWtlSGVhcChuVmVydGljZXMsIG1heENhbmRpZGF0ZXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuTmVpZ2hib3JzOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50R3JhcGhbMF1baV1bal0gPCAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWR4ID0gY3VycmVudEdyYXBoWzBdW2ldW2pdO1xuICAgICAgICAgICAgdmFyIGlzbiA9IGN1cnJlbnRHcmFwaFsyXVtpXVtqXTtcbiAgICAgICAgICAgIHZhciBkID0gdXRpbHMudGF1UmFuZChyYW5kb20pO1xuICAgICAgICAgICAgaGVhcFB1c2goY2FuZGlkYXRlTmVpZ2hib3JzLCBpLCBkLCBpZHgsIGlzbik7XG4gICAgICAgICAgICBoZWFwUHVzaChjYW5kaWRhdGVOZWlnaGJvcnMsIGlkeCwgZCwgaSwgaXNuKTtcbiAgICAgICAgICAgIGN1cnJlbnRHcmFwaFsyXVtpXVtqXSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZU5laWdoYm9ycztcbn1cbmV4cG9ydHMuYnVpbGRDYW5kaWRhdGVzID0gYnVpbGRDYW5kaWRhdGVzO1xuZnVuY3Rpb24gZGVoZWFwU29ydChoZWFwKSB7XG4gICAgdmFyIGluZGljZXMgPSBoZWFwWzBdO1xuICAgIHZhciB3ZWlnaHRzID0gaGVhcFsxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGluZEhlYXAgPSBpbmRpY2VzW2ldO1xuICAgICAgICB2YXIgZGlzdEhlYXAgPSB3ZWlnaHRzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZEhlYXAubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgICB2YXIgaW5kSGVhcEluZGV4ID0gaW5kSGVhcC5sZW5ndGggLSBqIC0gMTtcbiAgICAgICAgICAgIHZhciBkaXN0SGVhcEluZGV4ID0gZGlzdEhlYXAubGVuZ3RoIC0gaiAtIDE7XG4gICAgICAgICAgICB2YXIgdGVtcDEgPSBpbmRIZWFwWzBdO1xuICAgICAgICAgICAgaW5kSGVhcFswXSA9IGluZEhlYXBbaW5kSGVhcEluZGV4XTtcbiAgICAgICAgICAgIGluZEhlYXBbaW5kSGVhcEluZGV4XSA9IHRlbXAxO1xuICAgICAgICAgICAgdmFyIHRlbXAyID0gZGlzdEhlYXBbMF07XG4gICAgICAgICAgICBkaXN0SGVhcFswXSA9IGRpc3RIZWFwW2Rpc3RIZWFwSW5kZXhdO1xuICAgICAgICAgICAgZGlzdEhlYXBbZGlzdEhlYXBJbmRleF0gPSB0ZW1wMjtcbiAgICAgICAgICAgIHNpZnREb3duKGRpc3RIZWFwLCBpbmRIZWFwLCBkaXN0SGVhcEluZGV4LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBpbmRpY2VzOiBpbmRpY2VzLCB3ZWlnaHRzOiB3ZWlnaHRzIH07XG59XG5leHBvcnRzLmRlaGVhcFNvcnQgPSBkZWhlYXBTb3J0O1xuZnVuY3Rpb24gc2lmdERvd24oaGVhcDEsIGhlYXAyLCBjZWlsaW5nLCBlbHQpIHtcbiAgICB3aGlsZSAoZWx0ICogMiArIDEgPCBjZWlsaW5nKSB7XG4gICAgICAgIHZhciBsZWZ0Q2hpbGQgPSBlbHQgKiAyICsgMTtcbiAgICAgICAgdmFyIHJpZ2h0Q2hpbGQgPSBsZWZ0Q2hpbGQgKyAxO1xuICAgICAgICB2YXIgc3dhcCA9IGVsdDtcbiAgICAgICAgaWYgKGhlYXAxW3N3YXBdIDwgaGVhcDFbbGVmdENoaWxkXSkge1xuICAgICAgICAgICAgc3dhcCA9IGxlZnRDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmlnaHRDaGlsZCA8IGNlaWxpbmcgJiYgaGVhcDFbc3dhcF0gPCBoZWFwMVtyaWdodENoaWxkXSkge1xuICAgICAgICAgICAgc3dhcCA9IHJpZ2h0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN3YXAgPT09IGVsdCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGVtcDEgPSBoZWFwMVtlbHRdO1xuICAgICAgICAgICAgaGVhcDFbZWx0XSA9IGhlYXAxW3N3YXBdO1xuICAgICAgICAgICAgaGVhcDFbc3dhcF0gPSB0ZW1wMTtcbiAgICAgICAgICAgIHZhciB0ZW1wMiA9IGhlYXAyW2VsdF07XG4gICAgICAgICAgICBoZWFwMltlbHRdID0gaGVhcDJbc3dhcF07XG4gICAgICAgICAgICBoZWFwMltzd2FwXSA9IHRlbXAyO1xuICAgICAgICAgICAgZWx0ID0gc3dhcDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNtYWxsZXN0RmxhZ2dlZChoZWFwLCByb3cpIHtcbiAgICB2YXIgaW5kID0gaGVhcFswXVtyb3ddO1xuICAgIHZhciBkaXN0ID0gaGVhcFsxXVtyb3ddO1xuICAgIHZhciBmbGFnID0gaGVhcFsyXVtyb3ddO1xuICAgIHZhciBtaW5EaXN0ID0gSW5maW5pdHk7XG4gICAgdmFyIHJlc3VsdEluZGV4ID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPiBpbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGZsYWdbaV0gPT09IDEgJiYgZGlzdFtpXSA8IG1pbkRpc3QpIHtcbiAgICAgICAgICAgIG1pbkRpc3QgPSBkaXN0W2ldO1xuICAgICAgICAgICAgcmVzdWx0SW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHRJbmRleCA+PSAwKSB7XG4gICAgICAgIGZsYWdbcmVzdWx0SW5kZXhdID0gMDtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5kW3Jlc3VsdEluZGV4XSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufVxuZXhwb3J0cy5zbWFsbGVzdEZsYWdnZWQgPSBzbWFsbGVzdEZsYWdnZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB1bWFwXzEgPSByZXF1aXJlKFwiLi91bWFwXCIpO1xuZXhwb3J0cy5VTUFQID0gdW1hcF8xLlVNQVA7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICAgIHJlc3VsdFtcImRlZmF1bHRcIl0gPSBtb2Q7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgX2E7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xudmFyIFNwYXJzZU1hdHJpeCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHVlcywgZGltcykge1xuICAgICAgICB0aGlzLmVudHJpZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMublJvd3MgPSAwO1xuICAgICAgICB0aGlzLm5Db2xzID0gMDtcbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICE9PSBjb2xzLmxlbmd0aCB8fCByb3dzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzLCBjb2xzIGFuZCB2YWx1ZXMgYXJyYXlzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uUm93cyA9IGRpbXNbMF07XG4gICAgICAgIHRoaXMubkNvbHMgPSBkaW1zWzFdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICB2YXIgY29sID0gY29sc1tpXTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaW1zKHJvdywgY29sKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLm1ha2VLZXkocm93LCBjb2wpO1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdmFsdWU6IHZhbHVlc1tpXSwgcm93OiByb3csIGNvbDogY29sIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUubWFrZUtleSA9IGZ1bmN0aW9uIChyb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gcm93ICsgXCI6XCIgKyBjb2w7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNoZWNrRGltcyA9IGZ1bmN0aW9uIChyb3csIGNvbCkge1xuICAgICAgICB2YXIgd2l0aGluQm91bmRzID0gcm93IDwgdGhpcy5uUm93cyAmJiBjb2wgPCB0aGlzLm5Db2xzO1xuICAgICAgICBpZiAoIXdpdGhpbkJvdW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgYW5kL29yIGNvbCBzcGVjaWZpZWQgb3V0c2lkZSBvZiBtYXRyaXggZGltZW5zaW9ucycpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChyb3csIGNvbCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgaWYgKCF0aGlzLmVudHJpZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB7IHZhbHVlOiB2YWx1ZSwgcm93OiByb3csIGNvbDogY29sIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmdldChrZXkpLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHJvdywgY29sLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdm9pZCAwKSB7IGRlZmF1bHRWYWx1ZSA9IDA7IH1cbiAgICAgICAgdGhpcy5jaGVja0RpbXMocm93LCBjb2wpO1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5tYWtlS2V5KHJvdywgY29sKTtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoa2V5KS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gKG9yZGVyZWQpIHtcbiAgICAgICAgaWYgKG9yZGVyZWQgPT09IHZvaWQgMCkgeyBvcmRlcmVkID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgcm93Q29sVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93Q29sVmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yZGVyZWQpIHtcbiAgICAgICAgICAgIHJvd0NvbFZhbHVlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEucm93ID09PSBiLnJvdykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb2wgLSBiLmNvbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJvdyAtIGIucm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dDb2xWYWx1ZXM7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERpbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5uUm93cywgdGhpcy5uQ29sc107XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yb3c7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXRDb2xzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwga2V5ID0gX2JbMF0sIHZhbHVlID0gX2JbMV07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuY29sO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwga2V5ID0gX2JbMF0sIHZhbHVlID0gX2JbMV07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gZm4odmFsdWUudmFsdWUsIHZhbHVlLnJvdywgdmFsdWUuY29sKTsgfSk7XG4gICAgfTtcbiAgICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB2YXIgdmFscyA9IFtdO1xuICAgICAgICB0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHMucHVzaChmbih2YWx1ZS52YWx1ZSwgdmFsdWUucm93LCB2YWx1ZS5jb2wpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkaW1zID0gW3RoaXMublJvd3MsIHRoaXMubkNvbHNdO1xuICAgICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh0aGlzLmdldFJvd3MoKSwgdGhpcy5nZXRDb2xzKCksIHZhbHMsIGRpbXMpO1xuICAgIH07XG4gICAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcm93cyA9IHV0aWxzLmVtcHR5KHRoaXMublJvd3MpO1xuICAgICAgICB2YXIgb3V0cHV0ID0gcm93cy5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnplcm9zKF90aGlzLm5Db2xzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgb3V0cHV0W3ZhbHVlLnJvd11bdmFsdWUuY29sXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xuICAgIHJldHVybiBTcGFyc2VNYXRyaXg7XG59KCkpO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXggPSBTcGFyc2VNYXRyaXg7XG5mdW5jdGlvbiB0cmFuc3Bvc2UobWF0cml4KSB7XG4gICAgdmFyIGNvbHMgPSBbXTtcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciB2YWxzID0gW107XG4gICAgbWF0cml4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICBjb2xzLnB1c2gocm93KTtcbiAgICAgICAgcm93cy5wdXNoKGNvbCk7XG4gICAgICAgIHZhbHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgdmFyIGRpbXMgPSBbbWF0cml4Lm5Db2xzLCBtYXRyaXgublJvd3NdO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIGRpbXMpO1xufVxuZXhwb3J0cy50cmFuc3Bvc2UgPSB0cmFuc3Bvc2U7XG5mdW5jdGlvbiBpZGVudGl0eShzaXplKSB7XG4gICAgdmFyIF9hID0gX19yZWFkKHNpemUsIDEpLCByb3dzID0gX2FbMF07XG4gICAgdmFyIG1hdHJpeCA9IG5ldyBTcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgc2l6ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgbWF0cml4LnNldChpLCBpLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbmV4cG9ydHMuaWRlbnRpdHkgPSBpZGVudGl0eTtcbmZ1bmN0aW9uIHBhaXJ3aXNlTXVsdGlwbHkoYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCAqIHk7IH0pO1xufVxuZXhwb3J0cy5wYWlyd2lzZU11bHRpcGx5ID0gcGFpcndpc2VNdWx0aXBseTtcbmZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXNlKGEsIGIsIGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4ICsgeTsgfSk7XG59XG5leHBvcnRzLmFkZCA9IGFkZDtcbmZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIpIHtcbiAgICByZXR1cm4gZWxlbWVudFdpc2UoYSwgYiwgZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHggLSB5OyB9KTtcbn1cbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbmZ1bmN0aW9uIG1heGltdW0oYSwgYikge1xuICAgIHJldHVybiBlbGVtZW50V2lzZShhLCBiLCBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKHggPiB5ID8geCA6IHkpOyB9KTtcbn1cbmV4cG9ydHMubWF4aW11bSA9IG1heGltdW07XG5mdW5jdGlvbiBtdWx0aXBseVNjYWxhcihhLCBzY2FsYXIpIHtcbiAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAqIHNjYWxhcjtcbiAgICB9KTtcbn1cbmV4cG9ydHMubXVsdGlwbHlTY2FsYXIgPSBtdWx0aXBseVNjYWxhcjtcbmZ1bmN0aW9uIGVsaW1pbmF0ZVplcm9zKG0pIHtcbiAgICB2YXIgemVyb0luZGljZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHZhbHVlcyA9IG0uZ2V0VmFsdWVzKCk7XG4gICAgdmFyIHJvd3MgPSBtLmdldFJvd3MoKTtcbiAgICB2YXIgY29scyA9IG0uZ2V0Q29scygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbaV0gPT09IDApIHtcbiAgICAgICAgICAgIHplcm9JbmRpY2VzLmFkZChpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVtb3ZlQnlaZXJvSW5kZXggPSBmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICF6ZXJvSW5kaWNlcy5oYXMoaW5kZXgpOyB9O1xuICAgIHZhciBuZXh0VmFsdWVzID0gdmFsdWVzLmZpbHRlcihyZW1vdmVCeVplcm9JbmRleCk7XG4gICAgdmFyIG5leHRSb3dzID0gcm93cy5maWx0ZXIocmVtb3ZlQnlaZXJvSW5kZXgpO1xuICAgIHZhciBuZXh0Q29scyA9IGNvbHMuZmlsdGVyKHJlbW92ZUJ5WmVyb0luZGV4KTtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChuZXh0Um93cywgbmV4dENvbHMsIG5leHRWYWx1ZXMsIG0uZ2V0RGltcygpKTtcbn1cbmV4cG9ydHMuZWxpbWluYXRlWmVyb3MgPSBlbGltaW5hdGVaZXJvcztcbmZ1bmN0aW9uIG5vcm1hbGl6ZShtLCBub3JtVHlwZSkge1xuICAgIGlmIChub3JtVHlwZSA9PT0gdm9pZCAwKSB7IG5vcm1UeXBlID0gXCJsMlwiOyB9XG4gICAgdmFyIGVfMSwgX2E7XG4gICAgdmFyIG5vcm1GbiA9IG5vcm1GbnNbbm9ybVR5cGVdO1xuICAgIHZhciBjb2xzQnlSb3cgPSBuZXcgTWFwKCk7XG4gICAgbS5mb3JFYWNoKGZ1bmN0aW9uIChfLCByb3csIGNvbCkge1xuICAgICAgICB2YXIgY29scyA9IGNvbHNCeVJvdy5nZXQocm93KSB8fCBbXTtcbiAgICAgICAgY29scy5wdXNoKGNvbCk7XG4gICAgICAgIGNvbHNCeVJvdy5zZXQocm93LCBjb2xzKTtcbiAgICB9KTtcbiAgICB2YXIgbmV4dE1hdHJpeCA9IG5ldyBTcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgbS5nZXREaW1zKCkpO1xuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgY29scyA9IGNvbHNCeVJvdy5nZXQocm93KS5zb3J0KCk7XG4gICAgICAgIHZhciB2YWxzID0gY29scy5tYXAoZnVuY3Rpb24gKGNvbCkgeyByZXR1cm4gbS5nZXQocm93LCBjb2wpOyB9KTtcbiAgICAgICAgdmFyIG5vcm0gPSBub3JtRm4odmFscyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbmV4dE1hdHJpeC5zZXQocm93LCBjb2xzW2ldLCBub3JtW2ldKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhjb2xzQnlSb3cua2V5cygpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHJvdyA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgX2xvb3BfMShyb3cpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dE1hdHJpeDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xudmFyIG5vcm1GbnMgPSAoX2EgPSB7fSxcbiAgICBfYVtcIm1heFwiXSA9IGZ1bmN0aW9uICh4cykge1xuICAgICAgICB2YXIgbWF4ID0gLUluZmluaXR5O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXggPSB4c1tpXSA+IG1heCA/IHhzW2ldIDogbWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggLyBtYXg7IH0pO1xuICAgIH0sXG4gICAgX2FbXCJsMVwiXSA9IGZ1bmN0aW9uICh4cykge1xuICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IHhzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4cy5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggLyBzdW07IH0pO1xuICAgIH0sXG4gICAgX2FbXCJsMlwiXSA9IGZ1bmN0aW9uICh4cykge1xuICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IE1hdGgucG93KHhzW2ldLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geHMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coeCwgMikgLyBzdW0pOyB9KTtcbiAgICB9LFxuICAgIF9hKTtcbmZ1bmN0aW9uIGVsZW1lbnRXaXNlKGEsIGIsIG9wKSB7XG4gICAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgY29scyA9IFtdO1xuICAgIHZhciB2YWxzID0gW107XG4gICAgdmFyIG9wZXJhdGUgPSBmdW5jdGlvbiAocm93LCBjb2wpIHtcbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgIGNvbHMucHVzaChjb2wpO1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gb3AoYS5nZXQocm93LCBjb2wpLCBiLmdldChyb3csIGNvbCkpO1xuICAgICAgICB2YWxzLnB1c2gobmV4dFZhbHVlKTtcbiAgICB9O1xuICAgIHZhciB2YWx1ZXNBID0gYS5nZXRWYWx1ZXMoKTtcbiAgICB2YXIgcm93c0EgPSBhLmdldFJvd3MoKTtcbiAgICB2YXIgY29sc0EgPSBhLmdldENvbHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc0EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHJvd3NBW2ldO1xuICAgICAgICB2YXIgY29sID0gY29sc0FbaV07XG4gICAgICAgIHZhciBrZXkgPSByb3cgKyBcIjpcIiArIGNvbDtcbiAgICAgICAgdmlzaXRlZC5hZGQoa2V5KTtcbiAgICAgICAgb3BlcmF0ZShyb3csIGNvbCk7XG4gICAgfVxuICAgIHZhciB2YWx1ZXNCID0gYi5nZXRWYWx1ZXMoKTtcbiAgICB2YXIgcm93c0IgPSBiLmdldFJvd3MoKTtcbiAgICB2YXIgY29sc0IgPSBiLmdldENvbHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc0IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHJvd3NCW2ldO1xuICAgICAgICB2YXIgY29sID0gY29sc0JbaV07XG4gICAgICAgIHZhciBrZXkgPSByb3cgKyBcIjpcIiArIGNvbDtcbiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgb3BlcmF0ZShyb3csIGNvbCk7XG4gICAgfVxuICAgIHZhciBkaW1zID0gW2EublJvd3MsIGEubkNvbHNdO1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHJvd3MsIGNvbHMsIHZhbHMsIGRpbXMpO1xufVxuZnVuY3Rpb24gZ2V0Q1NSKHgpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIHJvdywgY29sKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHZhbHVlOiB2YWx1ZSwgcm93OiByb3csIGNvbDogY29sIH0pO1xuICAgIH0pO1xuICAgIGVudHJpZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBpZiAoYS5yb3cgPT09IGIucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jb2wgLSBiLmNvbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhLnJvdyAtIGIucm93O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGljZXMgPSBbXTtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZHB0ciA9IFtdO1xuICAgIHZhciBjdXJyZW50Um93ID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfYSA9IGVudHJpZXNbaV0sIHJvdyA9IF9hLnJvdywgY29sID0gX2EuY29sLCB2YWx1ZSA9IF9hLnZhbHVlO1xuICAgICAgICBpZiAocm93ICE9PSBjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjdXJyZW50Um93ID0gcm93O1xuICAgICAgICAgICAgaW5kcHRyLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5kaWNlcy5wdXNoKGNvbCk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5kaWNlczogaW5kaWNlcywgdmFsdWVzOiB2YWx1ZXMsIGluZHB0cjogaW5kcHRyIH07XG59XG5leHBvcnRzLmdldENTUiA9IGdldENTUjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fdmFsdWVzID0gKHRoaXMgJiYgdGhpcy5fX3ZhbHVlcykgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gICAgcmVzdWx0W1wiZGVmYXVsdFwiXSA9IG1vZDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBoZWFwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2hlYXBcIikpO1xudmFyIG1hdHJpeCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiLi9tYXRyaXhcIikpO1xudmFyIHRyZWUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdHJlZVwiKSk7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xuZnVuY3Rpb24gbWFrZU5ORGVzY2VudChkaXN0YW5jZUZuLCByYW5kb20pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbk5EZXNjZW50KGRhdGEsIGxlYWZBcnJheSwgbk5laWdoYm9ycywgbkl0ZXJzLCBtYXhDYW5kaWRhdGVzLCBkZWx0YSwgcmhvLCBycFRyZWVJbml0KSB7XG4gICAgICAgIGlmIChuSXRlcnMgPT09IHZvaWQgMCkgeyBuSXRlcnMgPSAxMDsgfVxuICAgICAgICBpZiAobWF4Q2FuZGlkYXRlcyA9PT0gdm9pZCAwKSB7IG1heENhbmRpZGF0ZXMgPSA1MDsgfVxuICAgICAgICBpZiAoZGVsdGEgPT09IHZvaWQgMCkgeyBkZWx0YSA9IDAuMDAxOyB9XG4gICAgICAgIGlmIChyaG8gPT09IHZvaWQgMCkgeyByaG8gPSAwLjU7IH1cbiAgICAgICAgaWYgKHJwVHJlZUluaXQgPT09IHZvaWQgMCkgeyBycFRyZWVJbml0ID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgblZlcnRpY2VzID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBjdXJyZW50R3JhcGggPSBoZWFwLm1ha2VIZWFwKGRhdGEubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IGhlYXAucmVqZWN0aW9uU2FtcGxlKG5OZWlnaGJvcnMsIGRhdGEubGVuZ3RoLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbaV0sIGRhdGFbaW5kaWNlc1tqXV0pO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goY3VycmVudEdyYXBoLCBpLCBkLCBpbmRpY2VzW2pdLCAxKTtcbiAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgaW5kaWNlc1tqXSwgZCwgaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJwVHJlZUluaXQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGVhZkFycmF5Lmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZWFmQXJyYXlbbl0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWZBcnJheVtuXVtpXSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGxlYWZBcnJheVtuXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWZBcnJheVtuXVtqXSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2xlYWZBcnJheVtuXVtpXV0sIGRhdGFbbGVhZkFycmF5W25dW2pdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgbGVhZkFycmF5W25dW2ldLCBkLCBsZWFmQXJyYXlbbl1bal0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIGxlYWZBcnJheVtuXVtqXSwgZCwgbGVhZkFycmF5W25dW2ldLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5JdGVyczsgbisrKSB7XG4gICAgICAgICAgICB2YXIgY2FuZGlkYXRlTmVpZ2hib3JzID0gaGVhcC5idWlsZENhbmRpZGF0ZXMoY3VycmVudEdyYXBoLCBuVmVydGljZXMsIG5OZWlnaGJvcnMsIG1heENhbmRpZGF0ZXMsIHJhbmRvbSk7XG4gICAgICAgICAgICB2YXIgYyA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXhDYW5kaWRhdGVzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBNYXRoLmZsb29yKGNhbmRpZGF0ZU5laWdoYm9yc1swXVtpXVtqXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwIDwgMCB8fCB1dGlscy50YXVSYW5kKHJhbmRvbSkgPCByaG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWF4Q2FuZGlkYXRlczsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IE1hdGguZmxvb3IoY2FuZGlkYXRlTmVpZ2hib3JzWzBdW2ldW2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaiA9IGNhbmRpZGF0ZU5laWdoYm9yc1syXVtpXVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjayA9IGNhbmRpZGF0ZU5laWdoYm9yc1syXVtpXVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxIDwgMCB8fCAoIWNqICYmICFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW3BdLCBkYXRhW3FdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgKz0gaGVhcC5oZWFwUHVzaChjdXJyZW50R3JhcGgsIHAsIGQsIHEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBoZWFwLmhlYXBQdXNoKGN1cnJlbnRHcmFwaCwgcSwgZCwgcCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA8PSBkZWx0YSAqIG5OZWlnaGJvcnMgKiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBzb3J0ZWQgPSBoZWFwLmRlaGVhcFNvcnQoY3VycmVudEdyYXBoKTtcbiAgICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9O1xufVxuZXhwb3J0cy5tYWtlTk5EZXNjZW50ID0gbWFrZU5ORGVzY2VudDtcbmZ1bmN0aW9uIG1ha2VJbml0aWFsaXphdGlvbnMoZGlzdGFuY2VGbikge1xuICAgIGZ1bmN0aW9uIGluaXRGcm9tUmFuZG9tKG5OZWlnaGJvcnMsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBfaGVhcCwgcmFuZG9tKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gdXRpbHMucmVqZWN0aW9uU2FtcGxlKG5OZWlnaGJvcnMsIGRhdGEubGVuZ3RoLCByYW5kb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGljZXNbal0gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RhbmNlRm4oZGF0YVtpbmRpY2VzW2pdXSwgcXVlcnlQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgIGhlYXAuaGVhcFB1c2goX2hlYXAsIGksIGQsIGluZGljZXNbal0sIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRGcm9tVHJlZShfdHJlZSwgZGF0YSwgcXVlcnlQb2ludHMsIF9oZWFwLCByYW5kb20pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVyeVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0cmVlLnNlYXJjaEZsYXRUcmVlKHF1ZXJ5UG9pbnRzW2ldLCBfdHJlZSwgcmFuZG9tKTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzW2pdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VGbihkYXRhW2luZGljZXNbal1dLCBxdWVyeVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgaGVhcC5oZWFwUHVzaChfaGVhcCwgaSwgZCwgaW5kaWNlc1tqXSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4geyBpbml0RnJvbVJhbmRvbTogaW5pdEZyb21SYW5kb20sIGluaXRGcm9tVHJlZTogaW5pdEZyb21UcmVlIH07XG59XG5leHBvcnRzLm1ha2VJbml0aWFsaXphdGlvbnMgPSBtYWtlSW5pdGlhbGl6YXRpb25zO1xuZnVuY3Rpb24gbWFrZUluaXRpYWxpemVkTk5TZWFyY2goZGlzdGFuY2VGbikge1xuICAgIHJldHVybiBmdW5jdGlvbiBublNlYXJjaEZuKGRhdGEsIGdyYXBoLCBpbml0aWFsaXphdGlvbiwgcXVlcnlQb2ludHMpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHZhciBfYiA9IG1hdHJpeC5nZXRDU1IoZ3JhcGgpLCBpbmRpY2VzID0gX2IuaW5kaWNlcywgaW5kcHRyID0gX2IuaW5kcHRyO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdHJpZWQgPSBuZXcgU2V0KGluaXRpYWxpemF0aW9uWzBdW2ldKTtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IGhlYXAuc21hbGxlc3RGbGFnZ2VkKGluaXRpYWxpemF0aW9uLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZXMgPSBpbmRpY2VzLnNsaWNlKGluZHB0clt2ZXJ0ZXhdLCBpbmRwdHJbdmVydGV4ICsgMV0pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNhbmRpZGF0ZXNfMSA9IF9fdmFsdWVzKGNhbmRpZGF0ZXMpLCBjYW5kaWRhdGVzXzFfMSA9IGNhbmRpZGF0ZXNfMS5uZXh0KCk7ICFjYW5kaWRhdGVzXzFfMS5kb25lOyBjYW5kaWRhdGVzXzFfMSA9IGNhbmRpZGF0ZXNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgPT09IHZlcnRleCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9PT0gLTEgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmllZC5oYXMoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0YW5jZUZuKGRhdGFbY2FuZGlkYXRlXSwgcXVlcnlQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhcC51bmNoZWNrZWRIZWFwUHVzaChpbml0aWFsaXphdGlvbiwgaSwgZCwgY2FuZGlkYXRlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVkLmFkZChjYW5kaWRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlc18xXzEgJiYgIWNhbmRpZGF0ZXNfMV8xLmRvbmUgJiYgKF9hID0gY2FuZGlkYXRlc18xLnJldHVybikpIF9hLmNhbGwoY2FuZGlkYXRlc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbml0aWFsaXphdGlvbjtcbiAgICB9O1xufVxuZXhwb3J0cy5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCA9IG1ha2VJbml0aWFsaXplZE5OU2VhcmNoO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZVNlYXJjaChmb3Jlc3QsIGRhdGEsIHF1ZXJ5UG9pbnRzLCBuTmVpZ2hib3JzLCBpbml0RnJvbVJhbmRvbSwgaW5pdEZyb21UcmVlLCByYW5kb20pIHtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICB2YXIgcmVzdWx0cyA9IGhlYXAubWFrZUhlYXAocXVlcnlQb2ludHMubGVuZ3RoLCBuTmVpZ2hib3JzKTtcbiAgICBpbml0RnJvbVJhbmRvbShuTmVpZ2hib3JzLCBkYXRhLCBxdWVyeVBvaW50cywgcmVzdWx0cywgcmFuZG9tKTtcbiAgICBpZiAoZm9yZXN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBmb3Jlc3RfMSA9IF9fdmFsdWVzKGZvcmVzdCksIGZvcmVzdF8xXzEgPSBmb3Jlc3RfMS5uZXh0KCk7ICFmb3Jlc3RfMV8xLmRvbmU7IGZvcmVzdF8xXzEgPSBmb3Jlc3RfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJlZV8xID0gZm9yZXN0XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpbml0RnJvbVRyZWUodHJlZV8xLCBkYXRhLCBxdWVyeVBvaW50cywgcmVzdWx0cywgcmFuZG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcmVzdF8xXzEgJiYgIWZvcmVzdF8xXzEuZG9uZSAmJiAoX2EgPSBmb3Jlc3RfMS5yZXR1cm4pKSBfYS5jYWxsKGZvcmVzdF8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cbmV4cG9ydHMuaW5pdGlhbGl6ZVNlYXJjaCA9IGluaXRpYWxpemVTZWFyY2g7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3JlYWQgPSAodGhpcyAmJiB0aGlzLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZCA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWQpIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICAgIHJldHVybiBhcjtcbn07XG52YXIgX192YWx1ZXMgPSAodGhpcyAmJiB0aGlzLl9fdmFsdWVzKSB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHV0aWxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3V0aWxzXCIpKTtcbnZhciBGbGF0VHJlZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmxhdFRyZWUoaHlwZXJwbGFuZXMsIG9mZnNldHMsIGNoaWxkcmVuLCBpbmRpY2VzKSB7XG4gICAgICAgIHRoaXMuaHlwZXJwbGFuZXMgPSBoeXBlcnBsYW5lcztcbiAgICAgICAgdGhpcy5vZmZzZXRzID0gb2Zmc2V0cztcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xuICAgIH1cbiAgICByZXR1cm4gRmxhdFRyZWU7XG59KCkpO1xuZXhwb3J0cy5GbGF0VHJlZSA9IEZsYXRUcmVlO1xuZnVuY3Rpb24gbWFrZUZvcmVzdChkYXRhLCBuTmVpZ2hib3JzLCBuVHJlZXMsIHJhbmRvbSkge1xuICAgIHZhciBsZWFmU2l6ZSA9IE1hdGgubWF4KDEwLCBuTmVpZ2hib3JzKTtcbiAgICB2YXIgdHJlZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2UoblRyZWVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChfLCBpKSB7IHJldHVybiBtYWtlVHJlZShkYXRhLCBsZWFmU2l6ZSwgaSwgcmFuZG9tKTsgfSk7XG4gICAgdmFyIGZvcmVzdCA9IHRyZWVzLm1hcChmdW5jdGlvbiAodHJlZSkgeyByZXR1cm4gZmxhdHRlblRyZWUodHJlZSwgbGVhZlNpemUpOyB9KTtcbiAgICByZXR1cm4gZm9yZXN0O1xufVxuZXhwb3J0cy5tYWtlRm9yZXN0ID0gbWFrZUZvcmVzdDtcbmZ1bmN0aW9uIG1ha2VUcmVlKGRhdGEsIGxlYWZTaXplLCBuLCByYW5kb20pIHtcbiAgICBpZiAobGVhZlNpemUgPT09IHZvaWQgMCkgeyBsZWFmU2l6ZSA9IDMwOyB9XG4gICAgdmFyIGluZGljZXMgPSB1dGlscy5yYW5nZShkYXRhLmxlbmd0aCk7XG4gICAgdmFyIHRyZWUgPSBtYWtlRXVjbGlkZWFuVHJlZShkYXRhLCBpbmRpY2VzLCBsZWFmU2l6ZSwgbiwgcmFuZG9tKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXMsIGxlYWZTaXplLCBxLCByYW5kb20pIHtcbiAgICBpZiAobGVhZlNpemUgPT09IHZvaWQgMCkgeyBsZWFmU2l6ZSA9IDMwOyB9XG4gICAgaWYgKGluZGljZXMubGVuZ3RoID4gbGVhZlNpemUpIHtcbiAgICAgICAgdmFyIHNwbGl0UmVzdWx0cyA9IGV1Y2xpZGVhblJhbmRvbVByb2plY3Rpb25TcGxpdChkYXRhLCBpbmRpY2VzLCByYW5kb20pO1xuICAgICAgICB2YXIgaW5kaWNlc0xlZnQgPSBzcGxpdFJlc3VsdHMuaW5kaWNlc0xlZnQsIGluZGljZXNSaWdodCA9IHNwbGl0UmVzdWx0cy5pbmRpY2VzUmlnaHQsIGh5cGVycGxhbmUgPSBzcGxpdFJlc3VsdHMuaHlwZXJwbGFuZSwgb2Zmc2V0ID0gc3BsaXRSZXN1bHRzLm9mZnNldDtcbiAgICAgICAgdmFyIGxlZnRDaGlsZCA9IG1ha2VFdWNsaWRlYW5UcmVlKGRhdGEsIGluZGljZXNMZWZ0LCBsZWFmU2l6ZSwgcSArIDEsIHJhbmRvbSk7XG4gICAgICAgIHZhciByaWdodENoaWxkID0gbWFrZUV1Y2xpZGVhblRyZWUoZGF0YSwgaW5kaWNlc1JpZ2h0LCBsZWFmU2l6ZSwgcSArIDEsIHJhbmRvbSk7XG4gICAgICAgIHZhciBub2RlID0geyBsZWZ0Q2hpbGQ6IGxlZnRDaGlsZCwgcmlnaHRDaGlsZDogcmlnaHRDaGlsZCwgaXNMZWFmOiBmYWxzZSwgaHlwZXJwbGFuZTogaHlwZXJwbGFuZSwgb2Zmc2V0OiBvZmZzZXQgfTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbm9kZSA9IHsgaW5kaWNlczogaW5kaWNlcywgaXNMZWFmOiB0cnVlIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGV1Y2xpZGVhblJhbmRvbVByb2plY3Rpb25TcGxpdChkYXRhLCBpbmRpY2VzLCByYW5kb20pIHtcbiAgICB2YXIgZGltID0gZGF0YVswXS5sZW5ndGg7XG4gICAgdmFyIGxlZnRJbmRleCA9IHV0aWxzLnRhdVJhbmRJbnQoaW5kaWNlcy5sZW5ndGgsIHJhbmRvbSk7XG4gICAgdmFyIHJpZ2h0SW5kZXggPSB1dGlscy50YXVSYW5kSW50KGluZGljZXMubGVuZ3RoLCByYW5kb20pO1xuICAgIHJpZ2h0SW5kZXggKz0gbGVmdEluZGV4ID09PSByaWdodEluZGV4ID8gMSA6IDA7XG4gICAgcmlnaHRJbmRleCA9IHJpZ2h0SW5kZXggJSBpbmRpY2VzLmxlbmd0aDtcbiAgICB2YXIgbGVmdCA9IGluZGljZXNbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHQgPSBpbmRpY2VzW3JpZ2h0SW5kZXhdO1xuICAgIHZhciBoeXBlcnBsYW5lT2Zmc2V0ID0gMDtcbiAgICB2YXIgaHlwZXJwbGFuZVZlY3RvciA9IHV0aWxzLnplcm9zKGRpbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoeXBlcnBsYW5lVmVjdG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGh5cGVycGxhbmVWZWN0b3JbaV0gPSBkYXRhW2xlZnRdW2ldIC0gZGF0YVtyaWdodF1baV07XG4gICAgICAgIGh5cGVycGxhbmVPZmZzZXQgLT1cbiAgICAgICAgICAgIChoeXBlcnBsYW5lVmVjdG9yW2ldICogKGRhdGFbbGVmdF1baV0gKyBkYXRhW3JpZ2h0XVtpXSkpIC8gMi4wO1xuICAgIH1cbiAgICB2YXIgbkxlZnQgPSAwO1xuICAgIHZhciBuUmlnaHQgPSAwO1xuICAgIHZhciBzaWRlID0gdXRpbHMuemVyb3MoaW5kaWNlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbWFyZ2luID0gaHlwZXJwbGFuZU9mZnNldDtcbiAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgbWFyZ2luICs9IGh5cGVycGxhbmVWZWN0b3JbZF0gKiBkYXRhW2luZGljZXNbaV1dW2RdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXJnaW4gPT09IDApIHtcbiAgICAgICAgICAgIHNpZGVbaV0gPSB1dGlscy50YXVSYW5kSW50KDIsIHJhbmRvbSk7XG4gICAgICAgICAgICBpZiAoc2lkZVtpXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBuUmlnaHQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXJnaW4gPiAwKSB7XG4gICAgICAgICAgICBzaWRlW2ldID0gMDtcbiAgICAgICAgICAgIG5MZWZ0ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzaWRlW2ldID0gMTtcbiAgICAgICAgICAgIG5SaWdodCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBpbmRpY2VzTGVmdCA9IHV0aWxzLnplcm9zKG5MZWZ0KTtcbiAgICB2YXIgaW5kaWNlc1JpZ2h0ID0gdXRpbHMuemVyb3MoblJpZ2h0KTtcbiAgICBuTGVmdCA9IDA7XG4gICAgblJpZ2h0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNpZGVbaV0gPT09IDApIHtcbiAgICAgICAgICAgIGluZGljZXNMZWZ0W25MZWZ0XSA9IGluZGljZXNbaV07XG4gICAgICAgICAgICBuTGVmdCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5kaWNlc1JpZ2h0W25SaWdodF0gPSBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgblJpZ2h0ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5kaWNlc0xlZnQ6IGluZGljZXNMZWZ0LFxuICAgICAgICBpbmRpY2VzUmlnaHQ6IGluZGljZXNSaWdodCxcbiAgICAgICAgaHlwZXJwbGFuZTogaHlwZXJwbGFuZVZlY3RvcixcbiAgICAgICAgb2Zmc2V0OiBoeXBlcnBsYW5lT2Zmc2V0LFxuICAgIH07XG59XG5mdW5jdGlvbiBmbGF0dGVuVHJlZSh0cmVlLCBsZWFmU2l6ZSkge1xuICAgIHZhciBuTm9kZXMgPSBudW1Ob2Rlcyh0cmVlKTtcbiAgICB2YXIgbkxlYXZlcyA9IG51bUxlYXZlcyh0cmVlKTtcbiAgICB2YXIgaHlwZXJwbGFuZXMgPSB1dGlsc1xuICAgICAgICAucmFuZ2Uobk5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxzLnplcm9zKHRyZWUuaHlwZXJwbGFuZSA/IHRyZWUuaHlwZXJwbGFuZS5sZW5ndGggOiAwKTsgfSk7XG4gICAgdmFyIG9mZnNldHMgPSB1dGlscy56ZXJvcyhuTm9kZXMpO1xuICAgIHZhciBjaGlsZHJlbiA9IHV0aWxzLnJhbmdlKG5Ob2RlcykubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIFstMSwgLTFdOyB9KTtcbiAgICB2YXIgaW5kaWNlcyA9IHV0aWxzXG4gICAgICAgIC5yYW5nZShuTGVhdmVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxzLnJhbmdlKGxlYWZTaXplKS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gLTE7IH0pOyB9KTtcbiAgICByZWN1cnNpdmVGbGF0dGVuKHRyZWUsIGh5cGVycGxhbmVzLCBvZmZzZXRzLCBjaGlsZHJlbiwgaW5kaWNlcywgMCwgMCk7XG4gICAgcmV0dXJuIG5ldyBGbGF0VHJlZShoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMpO1xufVxuZnVuY3Rpb24gcmVjdXJzaXZlRmxhdHRlbih0cmVlLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0sIGxlYWZOdW0pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRyZWUuaXNMZWFmKSB7XG4gICAgICAgIGNoaWxkcmVuW25vZGVOdW1dWzBdID0gLWxlYWZOdW07XG4gICAgICAgIChfYSA9IGluZGljZXNbbGVhZk51bV0pLnNwbGljZS5hcHBseShfYSwgX19zcHJlYWQoWzAsIHRyZWUuaW5kaWNlcy5sZW5ndGhdLCB0cmVlLmluZGljZXMpKTtcbiAgICAgICAgbGVhZk51bSArPSAxO1xuICAgICAgICByZXR1cm4geyBub2RlTnVtOiBub2RlTnVtLCBsZWFmTnVtOiBsZWFmTnVtIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBoeXBlcnBsYW5lc1tub2RlTnVtXSA9IHRyZWUuaHlwZXJwbGFuZTtcbiAgICAgICAgb2Zmc2V0c1tub2RlTnVtXSA9IHRyZWUub2Zmc2V0O1xuICAgICAgICBjaGlsZHJlbltub2RlTnVtXVswXSA9IG5vZGVOdW0gKyAxO1xuICAgICAgICB2YXIgb2xkTm9kZU51bSA9IG5vZGVOdW07XG4gICAgICAgIHZhciByZXMgPSByZWN1cnNpdmVGbGF0dGVuKHRyZWUubGVmdENoaWxkLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0gKyAxLCBsZWFmTnVtKTtcbiAgICAgICAgbm9kZU51bSA9IHJlcy5ub2RlTnVtO1xuICAgICAgICBsZWFmTnVtID0gcmVzLmxlYWZOdW07XG4gICAgICAgIGNoaWxkcmVuW29sZE5vZGVOdW1dWzFdID0gbm9kZU51bSArIDE7XG4gICAgICAgIHJlcyA9IHJlY3Vyc2l2ZUZsYXR0ZW4odHJlZS5yaWdodENoaWxkLCBoeXBlcnBsYW5lcywgb2Zmc2V0cywgY2hpbGRyZW4sIGluZGljZXMsIG5vZGVOdW0gKyAxLCBsZWFmTnVtKTtcbiAgICAgICAgcmV0dXJuIHsgbm9kZU51bTogcmVzLm5vZGVOdW0sIGxlYWZOdW06IHJlcy5sZWFmTnVtIH07XG4gICAgfVxufVxuZnVuY3Rpb24gbnVtTm9kZXModHJlZSkge1xuICAgIGlmICh0cmVlLmlzTGVhZikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxICsgbnVtTm9kZXModHJlZS5sZWZ0Q2hpbGQpICsgbnVtTm9kZXModHJlZS5yaWdodENoaWxkKTtcbiAgICB9XG59XG5mdW5jdGlvbiBudW1MZWF2ZXModHJlZSkge1xuICAgIGlmICh0cmVlLmlzTGVhZikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudW1MZWF2ZXModHJlZS5sZWZ0Q2hpbGQpICsgbnVtTGVhdmVzKHRyZWUucmlnaHRDaGlsZCk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZUxlYWZBcnJheShycEZvcmVzdCkge1xuICAgIHZhciBlXzEsIF9hO1xuICAgIGlmIChycEZvcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIHJwRm9yZXN0XzEgPSBfX3ZhbHVlcyhycEZvcmVzdCksIHJwRm9yZXN0XzFfMSA9IHJwRm9yZXN0XzEubmV4dCgpOyAhcnBGb3Jlc3RfMV8xLmRvbmU7IHJwRm9yZXN0XzFfMSA9IHJwRm9yZXN0XzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRyZWUgPSBycEZvcmVzdF8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2guYXBwbHkob3V0cHV0LCBfX3NwcmVhZCh0cmVlLmluZGljZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHJwRm9yZXN0XzFfMSAmJiAhcnBGb3Jlc3RfMV8xLmRvbmUgJiYgKF9hID0gcnBGb3Jlc3RfMS5yZXR1cm4pKSBfYS5jYWxsKHJwRm9yZXN0XzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW1stMV1dO1xuICAgIH1cbn1cbmV4cG9ydHMubWFrZUxlYWZBcnJheSA9IG1ha2VMZWFmQXJyYXk7XG5mdW5jdGlvbiBzZWxlY3RTaWRlKGh5cGVycGxhbmUsIG9mZnNldCwgcG9pbnQsIHJhbmRvbSkge1xuICAgIHZhciBtYXJnaW4gPSBvZmZzZXQ7XG4gICAgZm9yICh2YXIgZCA9IDA7IGQgPCBwb2ludC5sZW5ndGg7IGQrKykge1xuICAgICAgICBtYXJnaW4gKz0gaHlwZXJwbGFuZVtkXSAqIHBvaW50W2RdO1xuICAgIH1cbiAgICBpZiAobWFyZ2luID09PSAwKSB7XG4gICAgICAgIHZhciBzaWRlID0gdXRpbHMudGF1UmFuZEludCgyLCByYW5kb20pO1xuICAgICAgICByZXR1cm4gc2lkZTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWFyZ2luID4gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNlYXJjaEZsYXRUcmVlKHBvaW50LCB0cmVlLCByYW5kb20pIHtcbiAgICB2YXIgbm9kZSA9IDA7XG4gICAgd2hpbGUgKHRyZWUuY2hpbGRyZW5bbm9kZV1bMF0gPiAwKSB7XG4gICAgICAgIHZhciBzaWRlID0gc2VsZWN0U2lkZSh0cmVlLmh5cGVycGxhbmVzW25vZGVdLCB0cmVlLm9mZnNldHNbbm9kZV0sIHBvaW50LCByYW5kb20pO1xuICAgICAgICBpZiAoc2lkZSA9PT0gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHRyZWUuY2hpbGRyZW5bbm9kZV1bMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gdHJlZS5jaGlsZHJlbltub2RlXVsxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5kZXggPSAtMSAqIHRyZWUuY2hpbGRyZW5bbm9kZV1bMF07XG4gICAgcmV0dXJuIHRyZWUuaW5kaWNlc1tpbmRleF07XG59XG5leHBvcnRzLnNlYXJjaEZsYXRUcmVlID0gc2VhcmNoRmxhdFRyZWU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUocmVzdWx0LnZhbHVlKTsgfSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19yZWFkID0gKHRoaXMgJiYgdGhpcy5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWQgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGhlYXAgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vaGVhcFwiKSk7XG52YXIgbWF0cml4ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL21hdHJpeFwiKSk7XG52YXIgbm5EZXNjZW50ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL25uX2Rlc2NlbnRcIikpO1xudmFyIHRyZWUgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdHJlZVwiKSk7XG52YXIgdXRpbHMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIi4vdXRpbHNcIikpO1xudmFyIG1sX2xldmVuYmVyZ19tYXJxdWFyZHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibWwtbGV2ZW5iZXJnLW1hcnF1YXJkdFwiKSk7XG52YXIgU01PT1RIX0tfVE9MRVJBTkNFID0gMWUtNTtcbnZhciBNSU5fS19ESVNUX1NDQUxFID0gMWUtMztcbnZhciBVTUFQID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBVTUFQKHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zID09PSB2b2lkIDApIHsgcGFyYW1zID0ge307IH1cbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5sZWFybmluZ1JhdGUgPSAxLjA7XG4gICAgICAgIHRoaXMubG9jYWxDb25uZWN0aXZpdHkgPSAxLjA7XG4gICAgICAgIHRoaXMubWluRGlzdCA9IDAuMTtcbiAgICAgICAgdGhpcy5uQ29tcG9uZW50cyA9IDI7XG4gICAgICAgIHRoaXMubkVwb2NocyA9IDA7XG4gICAgICAgIHRoaXMubk5laWdoYm9ycyA9IDE1O1xuICAgICAgICB0aGlzLm5lZ2F0aXZlU2FtcGxlUmF0ZSA9IDU7XG4gICAgICAgIHRoaXMucmFuZG9tID0gTWF0aC5yYW5kb207XG4gICAgICAgIHRoaXMucmVwdWxzaW9uU3RyZW5ndGggPSAxLjA7XG4gICAgICAgIHRoaXMuc2V0T3BNaXhSYXRpbyA9IDEuMDtcbiAgICAgICAgdGhpcy5zcHJlYWQgPSAxLjA7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUXVldWVTaXplID0gNC4wO1xuICAgICAgICB0aGlzLnRhcmdldE1ldHJpYyA9IFwiY2F0ZWdvcmljYWxcIjtcbiAgICAgICAgdGhpcy50YXJnZXRXZWlnaHQgPSAwLjU7XG4gICAgICAgIHRoaXMudGFyZ2V0Tk5laWdoYm9ycyA9IHRoaXMubk5laWdoYm9ycztcbiAgICAgICAgdGhpcy5kaXN0YW5jZUZuID0gZXVjbGlkZWFuO1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ycEZvcmVzdCA9IFtdO1xuICAgICAgICB0aGlzLmVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlID0gbmV3IE9wdGltaXphdGlvblN0YXRlKCk7XG4gICAgICAgIHZhciBzZXRQYXJhbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIF90aGlzW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgICAgfTtcbiAgICAgICAgc2V0UGFyYW0oJ2Rpc3RhbmNlRm4nKTtcbiAgICAgICAgc2V0UGFyYW0oJ2xlYXJuaW5nUmF0ZScpO1xuICAgICAgICBzZXRQYXJhbSgnbG9jYWxDb25uZWN0aXZpdHknKTtcbiAgICAgICAgc2V0UGFyYW0oJ21pbkRpc3QnKTtcbiAgICAgICAgc2V0UGFyYW0oJ25Db21wb25lbnRzJyk7XG4gICAgICAgIHNldFBhcmFtKCduRXBvY2hzJyk7XG4gICAgICAgIHNldFBhcmFtKCduTmVpZ2hib3JzJyk7XG4gICAgICAgIHNldFBhcmFtKCduZWdhdGl2ZVNhbXBsZVJhdGUnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3JhbmRvbScpO1xuICAgICAgICBzZXRQYXJhbSgncmVwdWxzaW9uU3RyZW5ndGgnKTtcbiAgICAgICAgc2V0UGFyYW0oJ3NldE9wTWl4UmF0aW8nKTtcbiAgICAgICAgc2V0UGFyYW0oJ3NwcmVhZCcpO1xuICAgICAgICBzZXRQYXJhbSgndHJhbnNmb3JtUXVldWVTaXplJyk7XG4gICAgfVxuICAgIFVNQVAucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uIChYKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpdChYKTtcbiAgICAgICAgdGhpcy5vcHRpbWl6ZUxheW91dCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5maXRBc3luYyA9IGZ1bmN0aW9uIChYLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHZvaWQgMCkgeyBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07IH1cbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRml0KFgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCB0aGlzLm9wdGltaXplTGF5b3V0QXN5bmMoY2FsbGJhY2spXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0aGlzLmVtYmVkZGluZ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc2V0U3VwZXJ2aXNlZFByb2plY3Rpb24gPSBmdW5jdGlvbiAoWSwgcGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgeyBwYXJhbXMgPSB7fTsgfVxuICAgICAgICB0aGlzLlkgPSBZO1xuICAgICAgICB0aGlzLnRhcmdldE1ldHJpYyA9IHBhcmFtcy50YXJnZXRNZXRyaWMgfHwgdGhpcy50YXJnZXRNZXRyaWM7XG4gICAgICAgIHRoaXMudGFyZ2V0V2VpZ2h0ID0gcGFyYW1zLnRhcmdldFdlaWdodCB8fCB0aGlzLnRhcmdldFdlaWdodDtcbiAgICAgICAgdGhpcy50YXJnZXROTmVpZ2hib3JzID0gcGFyYW1zLnRhcmdldE5OZWlnaGJvcnMgfHwgdGhpcy50YXJnZXROTmVpZ2hib3JzO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc2V0UHJlY29tcHV0ZWRLTk4gPSBmdW5jdGlvbiAoa25uSW5kaWNlcywga25uRGlzdGFuY2VzKSB7XG4gICAgICAgIHRoaXMua25uSW5kaWNlcyA9IGtubkluZGljZXM7XG4gICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uRGlzdGFuY2VzO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuaW5pdGlhbGl6ZUZpdCA9IGZ1bmN0aW9uIChYKSB7XG4gICAgICAgIGlmIChYLmxlbmd0aCA8PSB0aGlzLm5OZWlnaGJvcnMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBlbm91Z2ggZGF0YSBwb2ludHMgKFwiICsgWC5sZW5ndGggKyBcIikgdG8gY3JlYXRlIG5OZWlnaGJvcnM6IFwiICsgdGhpcy5uTmVpZ2hib3JzICsgXCIuICBBZGQgbW9yZSBkYXRhIHBvaW50cyBvciBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLlggPT09IFggJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5YID0gWDtcbiAgICAgICAgaWYgKCF0aGlzLmtubkluZGljZXMgJiYgIXRoaXMua25uRGlzdGFuY2VzKSB7XG4gICAgICAgICAgICB2YXIga25uUmVzdWx0cyA9IHRoaXMubmVhcmVzdE5laWdoYm9ycyhYKTtcbiAgICAgICAgICAgIHRoaXMua25uSW5kaWNlcyA9IGtublJlc3VsdHMua25uSW5kaWNlcztcbiAgICAgICAgICAgIHRoaXMua25uRGlzdGFuY2VzID0ga25uUmVzdWx0cy5rbm5EaXN0YW5jZXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmFwaCA9IHRoaXMuZnV6enlTaW1wbGljaWFsU2V0KFgsIHRoaXMubk5laWdoYm9ycywgdGhpcy5zZXRPcE1peFJhdGlvKTtcbiAgICAgICAgdGhpcy5tYWtlU2VhcmNoRm5zKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JhcGggPSB0aGlzLm1ha2VTZWFyY2hHcmFwaChYKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbigpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmluaXRpYWxpemVTaW1wbGljaWFsU2V0RW1iZWRkaW5nKCksIGhlYWQgPSBfYS5oZWFkLCB0YWlsID0gX2EudGFpbCwgZXBvY2hzUGVyU2FtcGxlID0gX2EuZXBvY2hzUGVyU2FtcGxlO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLmhlYWQgPSBoZWFkO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLnRhaWwgPSB0YWlsO1xuICAgICAgICB0aGlzLm9wdGltaXphdGlvblN0YXRlLmVwb2Noc1BlclNhbXBsZSA9IGVwb2Noc1BlclNhbXBsZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW1pemF0aW9uKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TkVwb2NocygpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubWFrZVNlYXJjaEZucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gbm5EZXNjZW50Lm1ha2VJbml0aWFsaXphdGlvbnModGhpcy5kaXN0YW5jZUZuKSwgaW5pdEZyb21UcmVlID0gX2EuaW5pdEZyb21UcmVlLCBpbml0RnJvbVJhbmRvbSA9IF9hLmluaXRGcm9tUmFuZG9tO1xuICAgICAgICB0aGlzLmluaXRGcm9tVHJlZSA9IGluaXRGcm9tVHJlZTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVJhbmRvbSA9IGluaXRGcm9tUmFuZG9tO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IG5uRGVzY2VudC5tYWtlSW5pdGlhbGl6ZWROTlNlYXJjaCh0aGlzLmRpc3RhbmNlRm4pO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubWFrZVNlYXJjaEdyYXBoID0gZnVuY3Rpb24gKFgpIHtcbiAgICAgICAgdmFyIGtubkluZGljZXMgPSB0aGlzLmtubkluZGljZXM7XG4gICAgICAgIHZhciBrbm5EaXN0YW5jZXMgPSB0aGlzLmtubkRpc3RhbmNlcztcbiAgICAgICAgdmFyIGRpbXMgPSBbWC5sZW5ndGgsIFgubGVuZ3RoXTtcbiAgICAgICAgdmFyIHNlYXJjaEdyYXBoID0gbmV3IG1hdHJpeC5TcGFyc2VNYXRyaXgoW10sIFtdLCBbXSwgZGltcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga25uSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtubiA9IGtubkluZGljZXNbaV07XG4gICAgICAgICAgICB2YXIgZGlzdGFuY2VzID0ga25uRGlzdGFuY2VzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrbm4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbmVpZ2hib3IgPSBrbm5bal07XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gZGlzdGFuY2VzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoR3JhcGguc2V0KGksIG5laWdoYm9yLCBkaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFuc3Bvc2UgPSBtYXRyaXgudHJhbnNwb3NlKHNlYXJjaEdyYXBoKTtcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tYXhpbXVtKHNlYXJjaEdyYXBoLCB0cmFuc3Bvc2UpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKHRvVHJhbnNmb3JtKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByYXdEYXRhID0gdGhpcy5YO1xuICAgICAgICBpZiAocmF3RGF0YSA9PT0gdW5kZWZpbmVkIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRhdGEgaGFzIGJlZW4gZml0LicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuTmVpZ2hib3JzID0gTWF0aC5mbG9vcih0aGlzLm5OZWlnaGJvcnMgKiB0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZSk7XG4gICAgICAgIG5OZWlnaGJvcnMgPSBNYXRoLm1pbihyYXdEYXRhLmxlbmd0aCwgbk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBpbml0ID0gbm5EZXNjZW50LmluaXRpYWxpemVTZWFyY2godGhpcy5ycEZvcmVzdCwgcmF3RGF0YSwgdG9UcmFuc2Zvcm0sIG5OZWlnaGJvcnMsIHRoaXMuaW5pdEZyb21SYW5kb20sIHRoaXMuaW5pdEZyb21UcmVlLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlYXJjaChyYXdEYXRhLCB0aGlzLnNlYXJjaEdyYXBoLCBpbml0LCB0b1RyYW5zZm9ybSk7XG4gICAgICAgIHZhciBfYSA9IGhlYXAuZGVoZWFwU29ydChyZXN1bHQpLCBpbmRpY2VzID0gX2EuaW5kaWNlcywgZGlzdGFuY2VzID0gX2Eud2VpZ2h0cztcbiAgICAgICAgaW5kaWNlcyA9IGluZGljZXMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNsaWNlKDAsIF90aGlzLm5OZWlnaGJvcnMpOyB9KTtcbiAgICAgICAgZGlzdGFuY2VzID0gZGlzdGFuY2VzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5zbGljZSgwLCBfdGhpcy5uTmVpZ2hib3JzKTsgfSk7XG4gICAgICAgIHZhciBhZGp1c3RlZExvY2FsQ29ubmVjdGl2aXR5ID0gTWF0aC5tYXgoMCwgdGhpcy5sb2NhbENvbm5lY3Rpdml0eSAtIDEpO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLnNtb290aEtOTkRpc3RhbmNlKGRpc3RhbmNlcywgdGhpcy5uTmVpZ2hib3JzLCBhZGp1c3RlZExvY2FsQ29ubmVjdGl2aXR5KSwgc2lnbWFzID0gX2Iuc2lnbWFzLCByaG9zID0gX2IucmhvcztcbiAgICAgICAgdmFyIF9jID0gdGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocyhpbmRpY2VzLCBkaXN0YW5jZXMsIHNpZ21hcywgcmhvcyksIHJvd3MgPSBfYy5yb3dzLCBjb2xzID0gX2MuY29scywgdmFscyA9IF9jLnZhbHM7XG4gICAgICAgIHZhciBzaXplID0gW3RvVHJhbnNmb3JtLmxlbmd0aCwgcmF3RGF0YS5sZW5ndGhdO1xuICAgICAgICB2YXIgZ3JhcGggPSBuZXcgbWF0cml4LlNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBzaXplKTtcbiAgICAgICAgdmFyIG5vcm1lZCA9IG1hdHJpeC5ub3JtYWxpemUoZ3JhcGgsIFwibDFcIik7XG4gICAgICAgIHZhciBjc3JNYXRyaXggPSBtYXRyaXguZ2V0Q1NSKG5vcm1lZCk7XG4gICAgICAgIHZhciBuUG9pbnRzID0gdG9UcmFuc2Zvcm0ubGVuZ3RoO1xuICAgICAgICB2YXIgZUluZGljZXMgPSB1dGlscy5yZXNoYXBlMmQoY3NyTWF0cml4LmluZGljZXMsIG5Qb2ludHMsIHRoaXMubk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBlV2VpZ2h0cyA9IHV0aWxzLnJlc2hhcGUyZChjc3JNYXRyaXgudmFsdWVzLCBuUG9pbnRzLCB0aGlzLm5OZWlnaGJvcnMpO1xuICAgICAgICB2YXIgZW1iZWRkaW5nID0gaW5pdFRyYW5zZm9ybShlSW5kaWNlcywgZVdlaWdodHMsIHRoaXMuZW1iZWRkaW5nKTtcbiAgICAgICAgdmFyIG5FcG9jaHMgPSB0aGlzLm5FcG9jaHNcbiAgICAgICAgICAgID8gdGhpcy5uRXBvY2hzIC8gM1xuICAgICAgICAgICAgOiBncmFwaC5uUm93cyA8PSAxMDAwMFxuICAgICAgICAgICAgICAgID8gMTAwXG4gICAgICAgICAgICAgICAgOiAzMDtcbiAgICAgICAgdmFyIGdyYXBoTWF4ID0gZ3JhcGhcbiAgICAgICAgICAgIC5nZXRWYWx1ZXMoKVxuICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAobWF4LCB2YWwpIHsgcmV0dXJuICh2YWwgPiBtYXggPyB2YWwgOiBtYXgpOyB9LCAwKTtcbiAgICAgICAgZ3JhcGggPSBncmFwaC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPCBncmFwaE1heCAvIG5FcG9jaHMgPyAwIDogdmFsdWUpOyB9KTtcbiAgICAgICAgZ3JhcGggPSBtYXRyaXguZWxpbWluYXRlWmVyb3MoZ3JhcGgpO1xuICAgICAgICB2YXIgZXBvY2hzUGVyU2FtcGxlID0gdGhpcy5tYWtlRXBvY2hzUGVyU2FtcGxlKGdyYXBoLmdldFZhbHVlcygpLCBuRXBvY2hzKTtcbiAgICAgICAgdmFyIGhlYWQgPSBncmFwaC5nZXRSb3dzKCk7XG4gICAgICAgIHZhciB0YWlsID0gZ3JhcGguZ2V0Q29scygpO1xuICAgICAgICB0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7XG4gICAgICAgICAgICBoZWFkRW1iZWRkaW5nOiBlbWJlZGRpbmcsXG4gICAgICAgICAgICB0YWlsRW1iZWRkaW5nOiB0aGlzLmVtYmVkZGluZyxcbiAgICAgICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgICAgICB0YWlsOiB0YWlsLFxuICAgICAgICAgICAgY3VycmVudEVwb2NoOiAwLFxuICAgICAgICAgICAgbkVwb2NoczogbkVwb2NocyxcbiAgICAgICAgICAgIG5WZXJ0aWNlczogZ3JhcGguZ2V0RGltcygpWzFdLFxuICAgICAgICAgICAgZXBvY2hzUGVyU2FtcGxlOiBlcG9jaHNQZXJTYW1wbGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGltaXplTGF5b3V0KCk7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5wcm9jZXNzR3JhcGhGb3JTdXBlcnZpc2VkUHJvamVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgWSA9IF9hLlksIFggPSBfYS5YO1xuICAgICAgICBpZiAoWSkge1xuICAgICAgICAgICAgaWYgKFkubGVuZ3RoICE9PSBYLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGVuZ3RoIG9mIFggYW5kIHkgbXVzdCBiZSBlcXVhbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0TWV0cmljID09PSBcImNhdGVnb3JpY2FsXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbHQgPSB0aGlzLnRhcmdldFdlaWdodCA8IDEuMDtcbiAgICAgICAgICAgICAgICB2YXIgZmFyRGlzdCA9IGx0ID8gMi41ICogKDEuMCAvICgxLjAgLSB0aGlzLnRhcmdldFdlaWdodCkpIDogMS4wZTEyO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGggPSB0aGlzLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbih0aGlzLmdyYXBoLCBZLCBmYXJEaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRFcG9jaCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICBpZiAoY3VycmVudEVwb2NoIDwgdGhpcy5nZXRORXBvY2hzKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuZ2V0RW1iZWRkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWJlZGRpbmc7XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5uZWFyZXN0TmVpZ2hib3JzID0gZnVuY3Rpb24gKFgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgZGlzdGFuY2VGbiA9IF9hLmRpc3RhbmNlRm4sIG5OZWlnaGJvcnMgPSBfYS5uTmVpZ2hib3JzO1xuICAgICAgICB2YXIgbG9nMiA9IGZ1bmN0aW9uIChuKSB7IHJldHVybiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpOyB9O1xuICAgICAgICB2YXIgbWV0cmljTk5EZXNjZW50ID0gbm5EZXNjZW50Lm1ha2VOTkRlc2NlbnQoZGlzdGFuY2VGbiwgdGhpcy5yYW5kb20pO1xuICAgICAgICB2YXIgcm91bmQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDAuNSA/IDAgOiBNYXRoLnJvdW5kKG4pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgblRyZWVzID0gNSArIE1hdGguZmxvb3Iocm91bmQoTWF0aC5wb3coWC5sZW5ndGgsIDAuNSkgLyAyMC4wKSk7XG4gICAgICAgIHZhciBuSXRlcnMgPSBNYXRoLm1heCg1LCBNYXRoLmZsb29yKE1hdGgucm91bmQobG9nMihYLmxlbmd0aCkpKSk7XG4gICAgICAgIHRoaXMucnBGb3Jlc3QgPSB0cmVlLm1ha2VGb3Jlc3QoWCwgbk5laWdoYm9ycywgblRyZWVzLCB0aGlzLnJhbmRvbSk7XG4gICAgICAgIHZhciBsZWFmQXJyYXkgPSB0cmVlLm1ha2VMZWFmQXJyYXkodGhpcy5ycEZvcmVzdCk7XG4gICAgICAgIHZhciBfYiA9IG1ldHJpY05ORGVzY2VudChYLCBsZWFmQXJyYXksIG5OZWlnaGJvcnMsIG5JdGVycyksIGluZGljZXMgPSBfYi5pbmRpY2VzLCB3ZWlnaHRzID0gX2Iud2VpZ2h0cztcbiAgICAgICAgcmV0dXJuIHsga25uSW5kaWNlczogaW5kaWNlcywga25uRGlzdGFuY2VzOiB3ZWlnaHRzIH07XG4gICAgfTtcbiAgICBVTUFQLnByb3RvdHlwZS5mdXp6eVNpbXBsaWNpYWxTZXQgPSBmdW5jdGlvbiAoWCwgbk5laWdoYm9ycywgc2V0T3BNaXhSYXRpbykge1xuICAgICAgICBpZiAoc2V0T3BNaXhSYXRpbyA9PT0gdm9pZCAwKSB7IHNldE9wTWl4UmF0aW8gPSAxLjA7IH1cbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2IgPSBfYS5rbm5JbmRpY2VzLCBrbm5JbmRpY2VzID0gX2IgPT09IHZvaWQgMCA/IFtdIDogX2IsIF9jID0gX2Eua25uRGlzdGFuY2VzLCBrbm5EaXN0YW5jZXMgPSBfYyA9PT0gdm9pZCAwID8gW10gOiBfYywgbG9jYWxDb25uZWN0aXZpdHkgPSBfYS5sb2NhbENvbm5lY3Rpdml0eTtcbiAgICAgICAgdmFyIF9kID0gdGhpcy5zbW9vdGhLTk5EaXN0YW5jZShrbm5EaXN0YW5jZXMsIG5OZWlnaGJvcnMsIGxvY2FsQ29ubmVjdGl2aXR5KSwgc2lnbWFzID0gX2Quc2lnbWFzLCByaG9zID0gX2QucmhvcztcbiAgICAgICAgdmFyIF9lID0gdGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3Rocyhrbm5JbmRpY2VzLCBrbm5EaXN0YW5jZXMsIHNpZ21hcywgcmhvcyksIHJvd3MgPSBfZS5yb3dzLCBjb2xzID0gX2UuY29scywgdmFscyA9IF9lLnZhbHM7XG4gICAgICAgIHZhciBzaXplID0gW1gubGVuZ3RoLCBYLmxlbmd0aF07XG4gICAgICAgIHZhciBzcGFyc2VNYXRyaXggPSBuZXcgbWF0cml4LlNwYXJzZU1hdHJpeChyb3dzLCBjb2xzLCB2YWxzLCBzaXplKTtcbiAgICAgICAgdmFyIHRyYW5zcG9zZSA9IG1hdHJpeC50cmFuc3Bvc2Uoc3BhcnNlTWF0cml4KTtcbiAgICAgICAgdmFyIHByb2RNYXRyaXggPSBtYXRyaXgucGFpcndpc2VNdWx0aXBseShzcGFyc2VNYXRyaXgsIHRyYW5zcG9zZSk7XG4gICAgICAgIHZhciBhID0gbWF0cml4LnN1YnRyYWN0KG1hdHJpeC5hZGQoc3BhcnNlTWF0cml4LCB0cmFuc3Bvc2UpLCBwcm9kTWF0cml4KTtcbiAgICAgICAgdmFyIGIgPSBtYXRyaXgubXVsdGlwbHlTY2FsYXIoYSwgc2V0T3BNaXhSYXRpbyk7XG4gICAgICAgIHZhciBjID0gbWF0cml4Lm11bHRpcGx5U2NhbGFyKHByb2RNYXRyaXgsIDEuMCAtIHNldE9wTWl4UmF0aW8pO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbWF0cml4LmFkZChiLCBjKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmNhdGVnb3JpY2FsU2ltcGxpY2lhbFNldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChzaW1wbGljaWFsU2V0LCB0YXJnZXQsIGZhckRpc3QsIHVua25vd25EaXN0KSB7XG4gICAgICAgIGlmICh1bmtub3duRGlzdCA9PT0gdm9pZCAwKSB7IHVua25vd25EaXN0ID0gMS4wOyB9XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBmYXN0SW50ZXJzZWN0aW9uKHNpbXBsaWNpYWxTZXQsIHRhcmdldCwgdW5rbm93bkRpc3QsIGZhckRpc3QpO1xuICAgICAgICBpbnRlcnNlY3Rpb24gPSBtYXRyaXguZWxpbWluYXRlWmVyb3MoaW50ZXJzZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc2V0TG9jYWxDb25uZWN0aXZpdHkoaW50ZXJzZWN0aW9uKTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLnNtb290aEtOTkRpc3RhbmNlID0gZnVuY3Rpb24gKGRpc3RhbmNlcywgaywgbG9jYWxDb25uZWN0aXZpdHksIG5JdGVyLCBiYW5kd2lkdGgpIHtcbiAgICAgICAgaWYgKGxvY2FsQ29ubmVjdGl2aXR5ID09PSB2b2lkIDApIHsgbG9jYWxDb25uZWN0aXZpdHkgPSAxLjA7IH1cbiAgICAgICAgaWYgKG5JdGVyID09PSB2b2lkIDApIHsgbkl0ZXIgPSA2NDsgfVxuICAgICAgICBpZiAoYmFuZHdpZHRoID09PSB2b2lkIDApIHsgYmFuZHdpZHRoID0gMS4wOyB9XG4gICAgICAgIHZhciB0YXJnZXQgPSAoTWF0aC5sb2coaykgLyBNYXRoLmxvZygyKSkgKiBiYW5kd2lkdGg7XG4gICAgICAgIHZhciByaG8gPSB1dGlscy56ZXJvcyhkaXN0YW5jZXMubGVuZ3RoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHV0aWxzLnplcm9zKGRpc3RhbmNlcy5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxvID0gMC4wO1xuICAgICAgICAgICAgdmFyIGhpID0gSW5maW5pdHk7XG4gICAgICAgICAgICB2YXIgbWlkID0gMS4wO1xuICAgICAgICAgICAgdmFyIGl0aERpc3RhbmNlcyA9IGRpc3RhbmNlc1tpXTtcbiAgICAgICAgICAgIHZhciBub25aZXJvRGlzdHMgPSBpdGhEaXN0YW5jZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkID4gMC4wOyB9KTtcbiAgICAgICAgICAgIGlmIChub25aZXJvRGlzdHMubGVuZ3RoID49IGxvY2FsQ29ubmVjdGl2aXR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gTWF0aC5mbG9vcihsb2NhbENvbm5lY3Rpdml0eSk7XG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBsb2NhbENvbm5lY3Rpdml0eSAtIGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmhvW2ldID0gbm9uWmVyb0Rpc3RzW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uID4gU01PT1RIX0tfVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaG9baV0gKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uICogKG5vblplcm9EaXN0c1tpbmRleF0gLSBub25aZXJvRGlzdHNbaW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJob1tpXSA9IGludGVycG9sYXRpb24gKiBub25aZXJvRGlzdHNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9uWmVyb0Rpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByaG9baV0gPSB1dGlscy5tYXgobm9uWmVyb0Rpc3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbkl0ZXI7IG4rKykge1xuICAgICAgICAgICAgICAgIHZhciBwc3VtID0gMC4wO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgZGlzdGFuY2VzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGlzdGFuY2VzW2ldW2pdIC0gcmhvW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzdW0gKz0gTWF0aC5leHAoLShkIC8gbWlkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwc3VtICs9IDEuMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMocHN1bSAtIHRhcmdldCkgPCBTTU9PVEhfS19UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwc3VtID4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhpID0gbWlkO1xuICAgICAgICAgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsbyA9IG1pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhpID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlkICo9IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyLjA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBtaWQ7XG4gICAgICAgICAgICBpZiAocmhvW2ldID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1lYW5JdGhEaXN0YW5jZXMgPSB1dGlscy5tZWFuKGl0aERpc3RhbmNlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXSA8IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuSXRoRGlzdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IE1JTl9LX0RJU1RfU0NBTEUgKiBtZWFuSXRoRGlzdGFuY2VzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBtZWFuRGlzdGFuY2VzID0gdXRpbHMubWVhbihkaXN0YW5jZXMubWFwKHV0aWxzLm1lYW4pKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldIDwgTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5EaXN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gTUlOX0tfRElTVF9TQ0FMRSAqIG1lYW5EaXN0YW5jZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNpZ21hczogcmVzdWx0LCByaG9zOiByaG8gfTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmNvbXB1dGVNZW1iZXJzaGlwU3RyZW5ndGhzID0gZnVuY3Rpb24gKGtubkluZGljZXMsIGtubkRpc3RhbmNlcywgc2lnbWFzLCByaG9zKSB7XG4gICAgICAgIHZhciBuU2FtcGxlcyA9IGtubkluZGljZXMubGVuZ3RoO1xuICAgICAgICB2YXIgbk5laWdoYm9ycyA9IGtubkluZGljZXNbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcm93cyA9IHV0aWxzLnplcm9zKG5TYW1wbGVzICogbk5laWdoYm9ycyk7XG4gICAgICAgIHZhciBjb2xzID0gdXRpbHMuemVyb3MoblNhbXBsZXMgKiBuTmVpZ2hib3JzKTtcbiAgICAgICAgdmFyIHZhbHMgPSB1dGlscy56ZXJvcyhuU2FtcGxlcyAqIG5OZWlnaGJvcnMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5TYW1wbGVzOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbk5laWdoYm9yczsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGtubkluZGljZXNbaV1bal0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa25uSW5kaWNlc1tpXVtqXSA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSAwLjA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtubkRpc3RhbmNlc1tpXVtqXSAtIHJob3NbaV0gPD0gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IDEuMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IE1hdGguZXhwKC0oKGtubkRpc3RhbmNlc1tpXVtqXSAtIHJob3NbaV0pIC8gc2lnbWFzW2ldKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd3NbaSAqIG5OZWlnaGJvcnMgKyBqXSA9IGk7XG4gICAgICAgICAgICAgICAgY29sc1tpICogbk5laWdoYm9ycyArIGpdID0ga25uSW5kaWNlc1tpXVtqXTtcbiAgICAgICAgICAgICAgICB2YWxzW2kgKiBuTmVpZ2hib3JzICsgal0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcm93czogcm93cywgY29sczogY29scywgdmFsczogdmFscyB9O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuaW5pdGlhbGl6ZVNpbXBsaWNpYWxTZXRFbWJlZGRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBuRXBvY2hzID0gdGhpcy5nZXRORXBvY2hzKCk7XG4gICAgICAgIHZhciBuQ29tcG9uZW50cyA9IHRoaXMubkNvbXBvbmVudHM7XG4gICAgICAgIHZhciBncmFwaFZhbHVlcyA9IHRoaXMuZ3JhcGguZ2V0VmFsdWVzKCk7XG4gICAgICAgIHZhciBncmFwaE1heCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdyYXBoVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGdyYXBoTWF4IDwgZ3JhcGhWYWx1ZXNbaV0pIHtcbiAgICAgICAgICAgICAgICBncmFwaE1heCA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBncmFwaCA9IHRoaXMuZ3JhcGgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgZ3JhcGhNYXggLyBuRXBvY2hzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVtYmVkZGluZyA9IHV0aWxzLnplcm9zKGdyYXBoLm5Sb3dzKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnplcm9zKG5Db21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1dGlscy50YXVSYW5kKF90aGlzLnJhbmRvbSkgKiAyMCArIC0xMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHdlaWdodHMgPSBbXTtcbiAgICAgICAgdmFyIGhlYWQgPSBbXTtcbiAgICAgICAgdmFyIHRhaWwgPSBbXTtcbiAgICAgICAgdmFyIHJvd0NvbFZhbHVlcyA9IGdyYXBoLmdldEFsbCgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd0NvbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gcm93Q29sVmFsdWVzW2ldO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0cy5wdXNoKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0YWlsLnB1c2goZW50cnkucm93KTtcbiAgICAgICAgICAgICAgICBoZWFkLnB1c2goZW50cnkuY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZXBvY2hzUGVyU2FtcGxlID0gdGhpcy5tYWtlRXBvY2hzUGVyU2FtcGxlKHdlaWdodHMsIG5FcG9jaHMpO1xuICAgICAgICByZXR1cm4geyBoZWFkOiBoZWFkLCB0YWlsOiB0YWlsLCBlcG9jaHNQZXJTYW1wbGU6IGVwb2Noc1BlclNhbXBsZSB9O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUubWFrZUVwb2Noc1BlclNhbXBsZSA9IGZ1bmN0aW9uICh3ZWlnaHRzLCBuRXBvY2hzKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB1dGlscy5maWxsZWQod2VpZ2h0cy5sZW5ndGgsIC0xLjApO1xuICAgICAgICB2YXIgbWF4ID0gdXRpbHMubWF4KHdlaWdodHMpO1xuICAgICAgICB2YXIgblNhbXBsZXMgPSB3ZWlnaHRzLm1hcChmdW5jdGlvbiAodykgeyByZXR1cm4gKHcgLyBtYXgpICogbkVwb2NoczsgfSk7XG4gICAgICAgIG5TYW1wbGVzLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgICAgICAgIGlmIChuID4gMClcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBuRXBvY2hzIC8gblNhbXBsZXNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgc3RhdGUpO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlcHVsc2lvblN0cmVuZ3RoID0gX2EucmVwdWxzaW9uU3RyZW5ndGgsIGxlYXJuaW5nUmF0ZSA9IF9hLmxlYXJuaW5nUmF0ZSwgbmVnYXRpdmVTYW1wbGVSYXRlID0gX2EubmVnYXRpdmVTYW1wbGVSYXRlO1xuICAgICAgICB2YXIgX2IgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLCBlcG9jaHNQZXJTYW1wbGUgPSBfYi5lcG9jaHNQZXJTYW1wbGUsIGhlYWRFbWJlZGRpbmcgPSBfYi5oZWFkRW1iZWRkaW5nLCB0YWlsRW1iZWRkaW5nID0gX2IudGFpbEVtYmVkZGluZztcbiAgICAgICAgdmFyIGRpbSA9IGhlYWRFbWJlZGRpbmdbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgbW92ZU90aGVyID0gaGVhZEVtYmVkZGluZy5sZW5ndGggPT09IHRhaWxFbWJlZGRpbmcubGVuZ3RoO1xuICAgICAgICB2YXIgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUgPSBlcG9jaHNQZXJTYW1wbGUubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlIC8gbmVnYXRpdmVTYW1wbGVSYXRlOyB9KTtcbiAgICAgICAgdmFyIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUgPSBfX3NwcmVhZChlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSk7XG4gICAgICAgIHZhciBlcG9jaE9mTmV4dFNhbXBsZSA9IF9fc3ByZWFkKGVwb2Noc1BlclNhbXBsZSk7XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0U2FtcGxlOiBlcG9jaE9mTmV4dFNhbXBsZSxcbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGU6IGVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUsXG4gICAgICAgICAgICBlcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZTogZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUsXG4gICAgICAgICAgICBtb3ZlT3RoZXI6IG1vdmVPdGhlcixcbiAgICAgICAgICAgIGluaXRpYWxBbHBoYTogbGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgYWxwaGE6IGxlYXJuaW5nUmF0ZSxcbiAgICAgICAgICAgIGdhbW1hOiByZXB1bHNpb25TdHJlbmd0aCxcbiAgICAgICAgICAgIGRpbTogZGltLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmluaXRpYWxpemVPcHRpbWl6YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoZWFkRW1iZWRkaW5nID0gdGhpcy5lbWJlZGRpbmc7XG4gICAgICAgIHZhciB0YWlsRW1iZWRkaW5nID0gdGhpcy5lbWJlZGRpbmc7XG4gICAgICAgIHZhciBfYSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIGhlYWQgPSBfYS5oZWFkLCB0YWlsID0gX2EudGFpbCwgZXBvY2hzUGVyU2FtcGxlID0gX2EuZXBvY2hzUGVyU2FtcGxlO1xuICAgICAgICB2YXIgbkVwb2NocyA9IHRoaXMuZ2V0TkVwb2NocygpO1xuICAgICAgICB2YXIgblZlcnRpY2VzID0gdGhpcy5ncmFwaC5uQ29scztcbiAgICAgICAgdmFyIF9iID0gZmluZEFCUGFyYW1zKHRoaXMuc3ByZWFkLCB0aGlzLm1pbkRpc3QpLCBhID0gX2IuYSwgYiA9IF9iLmI7XG4gICAgICAgIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIGhlYWRFbWJlZGRpbmc6IGhlYWRFbWJlZGRpbmcsXG4gICAgICAgICAgICB0YWlsRW1iZWRkaW5nOiB0YWlsRW1iZWRkaW5nLFxuICAgICAgICAgICAgaGVhZDogaGVhZCxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICBlcG9jaHNQZXJTYW1wbGU6IGVwb2Noc1BlclNhbXBsZSxcbiAgICAgICAgICAgIGE6IGEsXG4gICAgICAgICAgICBiOiBiLFxuICAgICAgICAgICAgbkVwb2NoczogbkVwb2NocyxcbiAgICAgICAgICAgIG5WZXJ0aWNlczogblZlcnRpY2VzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm9wdGltaXplTGF5b3V0U3RlcCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHZhciBvcHRpbWl6YXRpb25TdGF0ZSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGU7XG4gICAgICAgIHZhciBoZWFkID0gb3B0aW1pemF0aW9uU3RhdGUuaGVhZCwgdGFpbCA9IG9wdGltaXphdGlvblN0YXRlLnRhaWwsIGhlYWRFbWJlZGRpbmcgPSBvcHRpbWl6YXRpb25TdGF0ZS5oZWFkRW1iZWRkaW5nLCB0YWlsRW1iZWRkaW5nID0gb3B0aW1pemF0aW9uU3RhdGUudGFpbEVtYmVkZGluZywgZXBvY2hzUGVyU2FtcGxlID0gb3B0aW1pemF0aW9uU3RhdGUuZXBvY2hzUGVyU2FtcGxlLCBlcG9jaE9mTmV4dFNhbXBsZSA9IG9wdGltaXphdGlvblN0YXRlLmVwb2NoT2ZOZXh0U2FtcGxlLCBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlID0gb3B0aW1pemF0aW9uU3RhdGUuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSwgZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGUgPSBvcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJOZWdhdGl2ZVNhbXBsZSwgbW92ZU90aGVyID0gb3B0aW1pemF0aW9uU3RhdGUubW92ZU90aGVyLCBpbml0aWFsQWxwaGEgPSBvcHRpbWl6YXRpb25TdGF0ZS5pbml0aWFsQWxwaGEsIGFscGhhID0gb3B0aW1pemF0aW9uU3RhdGUuYWxwaGEsIGdhbW1hID0gb3B0aW1pemF0aW9uU3RhdGUuZ2FtbWEsIGEgPSBvcHRpbWl6YXRpb25TdGF0ZS5hLCBiID0gb3B0aW1pemF0aW9uU3RhdGUuYiwgZGltID0gb3B0aW1pemF0aW9uU3RhdGUuZGltLCBuRXBvY2hzID0gb3B0aW1pemF0aW9uU3RhdGUubkVwb2NocywgblZlcnRpY2VzID0gb3B0aW1pemF0aW9uU3RhdGUublZlcnRpY2VzO1xuICAgICAgICB2YXIgY2xpcFZhbHVlID0gNC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVwb2Noc1BlclNhbXBsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGVwb2NoT2ZOZXh0U2FtcGxlW2ldID4gbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGogPSBoZWFkW2ldO1xuICAgICAgICAgICAgdmFyIGsgPSB0YWlsW2ldO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBoZWFkRW1iZWRkaW5nW2pdO1xuICAgICAgICAgICAgdmFyIG90aGVyID0gdGFpbEVtYmVkZGluZ1trXTtcbiAgICAgICAgICAgIHZhciBkaXN0U3F1YXJlZCA9IHJEaXN0KGN1cnJlbnQsIG90aGVyKTtcbiAgICAgICAgICAgIHZhciBncmFkQ29lZmYgPSAwO1xuICAgICAgICAgICAgaWYgKGRpc3RTcXVhcmVkID4gMCkge1xuICAgICAgICAgICAgICAgIGdyYWRDb2VmZiA9IC0yLjAgKiBhICogYiAqIE1hdGgucG93KGRpc3RTcXVhcmVkLCBiIC0gMS4wKTtcbiAgICAgICAgICAgICAgICBncmFkQ29lZmYgLz0gYSAqIE1hdGgucG93KGRpc3RTcXVhcmVkLCBiKSArIDEuMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhZEQgPSBjbGlwKGdyYWRDb2VmZiAqIChjdXJyZW50W2RdIC0gb3RoZXJbZF0pLCBjbGlwVmFsdWUpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRbZF0gKz0gZ3JhZEQgKiBhbHBoYTtcbiAgICAgICAgICAgICAgICBpZiAobW92ZU90aGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG90aGVyW2RdICs9IC1ncmFkRCAqIGFscGhhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVwb2NoT2ZOZXh0U2FtcGxlW2ldICs9IGVwb2Noc1BlclNhbXBsZVtpXTtcbiAgICAgICAgICAgIHZhciBuTmVnU2FtcGxlcyA9IE1hdGguZmxvb3IoKG4gLSBlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlW2ldKSAvIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlW2ldKTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgbk5lZ1NhbXBsZXM7IHArKykge1xuICAgICAgICAgICAgICAgIHZhciBrXzEgPSB1dGlscy50YXVSYW5kSW50KG5WZXJ0aWNlcywgdGhpcy5yYW5kb20pO1xuICAgICAgICAgICAgICAgIHZhciBvdGhlcl8xID0gdGFpbEVtYmVkZGluZ1trXzFdO1xuICAgICAgICAgICAgICAgIHZhciBkaXN0U3F1YXJlZF8xID0gckRpc3QoY3VycmVudCwgb3RoZXJfMSk7XG4gICAgICAgICAgICAgICAgdmFyIGdyYWRDb2VmZl8xID0gMC4wO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0U3F1YXJlZF8xID4gMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYWRDb2VmZl8xID0gMi4wICogZ2FtbWEgKiBiO1xuICAgICAgICAgICAgICAgICAgICBncmFkQ29lZmZfMSAvPVxuICAgICAgICAgICAgICAgICAgICAgICAgKDAuMDAxICsgZGlzdFNxdWFyZWRfMSkgKiAoYSAqIE1hdGgucG93KGRpc3RTcXVhcmVkXzEsIGIpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGogPT09IGtfMSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhZEQgPSA0LjA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncmFkQ29lZmZfMSA+IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZEQgPSBjbGlwKGdyYWRDb2VmZl8xICogKGN1cnJlbnRbZF0gLSBvdGhlcl8xW2RdKSwgY2xpcFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2RdICs9IGdyYWREICogYWxwaGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZVtpXSArPSBuTmVnU2FtcGxlcyAqIGVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlW2ldO1xuICAgICAgICB9XG4gICAgICAgIG9wdGltaXphdGlvblN0YXRlLmFscGhhID0gaW5pdGlhbEFscGhhICogKDEuMCAtIG4gLyBuRXBvY2hzKTtcbiAgICAgICAgb3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoICs9IDE7XG4gICAgICAgIHJldHVybiBoZWFkRW1iZWRkaW5nO1xuICAgIH07XG4gICAgVU1BUC5wcm90b3R5cGUub3B0aW1pemVMYXlvdXRBc3luYyA9IGZ1bmN0aW9uIChlcG9jaENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChlcG9jaENhbGxiYWNrID09PSB2b2lkIDApIHsgZXBvY2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07IH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdGVwID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgbkVwb2NocywgY3VycmVudEVwb2NoLCBlcG9jaENvbXBsZXRlZCwgc2hvdWxkU3RvcCwgaXNGaW5pc2hlZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUsIG5FcG9jaHMgPSBfYS5uRXBvY2hzLCBjdXJyZW50RXBvY2ggPSBfYS5jdXJyZW50RXBvY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtYmVkZGluZyA9IHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcG9jaENvbXBsZXRlZCA9IHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU3RvcCA9IGVwb2NoQ2FsbGJhY2soZXBvY2hDb21wbGV0ZWQpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRmluaXNoZWQgPSBlcG9jaENvbXBsZXRlZCA9PT0gbkVwb2NocztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkU3RvcCAmJiAhaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RlcCgpOyB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiwgcmVzb2x2ZShpc0ZpbmlzaGVkKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyB9O1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBzdGVwKCk7IH0sIDApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLm9wdGltaXplTGF5b3V0ID0gZnVuY3Rpb24gKGVwb2NoQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGVwb2NoQ2FsbGJhY2sgPT09IHZvaWQgMCkgeyBlcG9jaENhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsgfVxuICAgICAgICB2YXIgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZW1iZWRkaW5nID0gW107XG4gICAgICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcy5vcHRpbWl6YXRpb25TdGF0ZSwgbkVwb2NocyA9IF9hLm5FcG9jaHMsIGN1cnJlbnRFcG9jaCA9IF9hLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgIGVtYmVkZGluZyA9IHRoaXMub3B0aW1pemVMYXlvdXRTdGVwKGN1cnJlbnRFcG9jaCk7XG4gICAgICAgICAgICB2YXIgZXBvY2hDb21wbGV0ZWQgPSB0aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaDtcbiAgICAgICAgICAgIHZhciBzaG91bGRTdG9wID0gZXBvY2hDYWxsYmFjayhlcG9jaENvbXBsZXRlZCkgPT09IGZhbHNlO1xuICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGVwb2NoQ29tcGxldGVkID09PSBuRXBvY2hzIHx8IHNob3VsZFN0b3A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVtYmVkZGluZztcbiAgICB9O1xuICAgIFVNQVAucHJvdG90eXBlLmdldE5FcG9jaHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBncmFwaCA9IHRoaXMuZ3JhcGg7XG4gICAgICAgIGlmICh0aGlzLm5FcG9jaHMgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uRXBvY2hzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW5ndGggPSBncmFwaC5uUm93cztcbiAgICAgICAgaWYgKGxlbmd0aCA8PSAyNTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gNTAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbmd0aCA8PSA1MDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gNDAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbmd0aCA8PSA3NTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMzAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFVNQVA7XG59KCkpO1xuZXhwb3J0cy5VTUFQID0gVU1BUDtcbmZ1bmN0aW9uIGV1Y2xpZGVhbih4LCB5KSB7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdygoeFtpXSAtIHlbaV0pLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChyZXN1bHQpO1xufVxuZXhwb3J0cy5ldWNsaWRlYW4gPSBldWNsaWRlYW47XG5mdW5jdGlvbiBjb3NpbmUoeCwgeSkge1xuICAgIHZhciByZXN1bHQgPSAwLjA7XG4gICAgdmFyIG5vcm1YID0gMC4wO1xuICAgIHZhciBub3JtWSA9IDAuMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9IHhbaV0gKiB5W2ldO1xuICAgICAgICBub3JtWCArPSBNYXRoLnBvdyh4W2ldLCAyKTtcbiAgICAgICAgbm9ybVkgKz0gTWF0aC5wb3coeVtpXSwgMik7XG4gICAgfVxuICAgIGlmIChub3JtWCA9PT0gMCAmJiBub3JtWSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9ybVggPT09IDAgfHwgbm9ybVkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAxLjAgLSByZXN1bHQgLyBNYXRoLnNxcnQobm9ybVggKiBub3JtWSk7XG4gICAgfVxufVxuZXhwb3J0cy5jb3NpbmUgPSBjb3NpbmU7XG52YXIgT3B0aW1pemF0aW9uU3RhdGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9wdGltaXphdGlvblN0YXRlKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRFcG9jaCA9IDA7XG4gICAgICAgIHRoaXMuaGVhZEVtYmVkZGluZyA9IFtdO1xuICAgICAgICB0aGlzLnRhaWxFbWJlZGRpbmcgPSBbXTtcbiAgICAgICAgdGhpcy5oZWFkID0gW107XG4gICAgICAgIHRoaXMudGFpbCA9IFtdO1xuICAgICAgICB0aGlzLmVwb2Noc1BlclNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2NoT2ZOZXh0U2FtcGxlID0gW107XG4gICAgICAgIHRoaXMuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSA9IFtdO1xuICAgICAgICB0aGlzLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlID0gW107XG4gICAgICAgIHRoaXMubW92ZU90aGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0aWFsQWxwaGEgPSAxLjA7XG4gICAgICAgIHRoaXMuYWxwaGEgPSAxLjA7XG4gICAgICAgIHRoaXMuZ2FtbWEgPSAxLjA7XG4gICAgICAgIHRoaXMuYSA9IDEuNTc2OTQzNDYwMzExMzA3NztcbiAgICAgICAgdGhpcy5iID0gMC44OTUwNjA4Nzc5MTA5NzMzO1xuICAgICAgICB0aGlzLmRpbSA9IDI7XG4gICAgICAgIHRoaXMubkVwb2NocyA9IDUwMDtcbiAgICAgICAgdGhpcy5uVmVydGljZXMgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gT3B0aW1pemF0aW9uU3RhdGU7XG59KCkpO1xuZnVuY3Rpb24gY2xpcCh4LCBjbGlwVmFsdWUpIHtcbiAgICBpZiAoeCA+IGNsaXBWYWx1ZSlcbiAgICAgICAgcmV0dXJuIGNsaXBWYWx1ZTtcbiAgICBlbHNlIGlmICh4IDwgLWNsaXBWYWx1ZSlcbiAgICAgICAgcmV0dXJuIC1jbGlwVmFsdWU7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIHJEaXN0KHgsIHkpIHtcbiAgICB2YXIgcmVzdWx0ID0gMC4wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgKz0gTWF0aC5wb3coeFtpXSAtIHlbaV0sIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZmluZEFCUGFyYW1zKHNwcmVhZCwgbWluRGlzdCkge1xuICAgIHZhciBjdXJ2ZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBhID0gX2JbMF0sIGIgPSBfYlsxXTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gMS4wIC8gKDEuMCArIGEgKiBNYXRoLnBvdyh4LCAoMiAqIGIpKSk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgeHYgPSB1dGlsc1xuICAgICAgICAubGluZWFyKDAsIHNwcmVhZCAqIDMsIDMwMClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiAodmFsIDwgbWluRGlzdCA/IDEuMCA6IHZhbCk7IH0pO1xuICAgIHZhciB5diA9IHV0aWxzLnplcm9zKHh2Lmxlbmd0aCkubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgIHZhciBndGUgPSB4dltpbmRleF0gPj0gbWluRGlzdDtcbiAgICAgICAgcmV0dXJuIGd0ZSA/IE1hdGguZXhwKC0oeHZbaW5kZXhdIC0gbWluRGlzdCkgLyBzcHJlYWQpIDogdmFsO1xuICAgIH0pO1xuICAgIHZhciBpbml0aWFsVmFsdWVzID0gWzAuNSwgMC41XTtcbiAgICB2YXIgZGF0YSA9IHsgeDogeHYsIHk6IHl2IH07XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGRhbXBpbmc6IDEuNSxcbiAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgZ3JhZGllbnREaWZmZXJlbmNlOiAxMGUtMixcbiAgICAgICAgbWF4SXRlcmF0aW9uczogMTAwLFxuICAgICAgICBlcnJvclRvbGVyYW5jZTogMTBlLTMsXG4gICAgfTtcbiAgICB2YXIgcGFyYW1ldGVyVmFsdWVzID0gbWxfbGV2ZW5iZXJnX21hcnF1YXJkdF8xLmRlZmF1bHQoZGF0YSwgY3VydmUsIG9wdGlvbnMpLnBhcmFtZXRlclZhbHVlcztcbiAgICB2YXIgX2EgPSBfX3JlYWQocGFyYW1ldGVyVmFsdWVzLCAyKSwgYSA9IF9hWzBdLCBiID0gX2FbMV07XG4gICAgcmV0dXJuIHsgYTogYSwgYjogYiB9O1xufVxuZXhwb3J0cy5maW5kQUJQYXJhbXMgPSBmaW5kQUJQYXJhbXM7XG5mdW5jdGlvbiBmYXN0SW50ZXJzZWN0aW9uKGdyYXBoLCB0YXJnZXQsIHVua25vd25EaXN0LCBmYXJEaXN0KSB7XG4gICAgaWYgKHVua25vd25EaXN0ID09PSB2b2lkIDApIHsgdW5rbm93bkRpc3QgPSAxLjA7IH1cbiAgICBpZiAoZmFyRGlzdCA9PT0gdm9pZCAwKSB7IGZhckRpc3QgPSA1LjA7IH1cbiAgICByZXR1cm4gZ3JhcGgubWFwKGZ1bmN0aW9uICh2YWx1ZSwgcm93LCBjb2wpIHtcbiAgICAgICAgaWYgKHRhcmdldFtyb3ddID09PSAtMSB8fCB0YXJnZXRbY29sXSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAqIE1hdGguZXhwKC11bmtub3duRGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0W3Jvd10gIT09IHRhcmdldFtjb2xdKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKiBNYXRoLmV4cCgtZmFyRGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuZmFzdEludGVyc2VjdGlvbiA9IGZhc3RJbnRlcnNlY3Rpb247XG5mdW5jdGlvbiByZXNldExvY2FsQ29ubmVjdGl2aXR5KHNpbXBsaWNpYWxTZXQpIHtcbiAgICBzaW1wbGljaWFsU2V0ID0gbWF0cml4Lm5vcm1hbGl6ZShzaW1wbGljaWFsU2V0LCBcIm1heFwiKTtcbiAgICB2YXIgdHJhbnNwb3NlID0gbWF0cml4LnRyYW5zcG9zZShzaW1wbGljaWFsU2V0KTtcbiAgICB2YXIgcHJvZE1hdHJpeCA9IG1hdHJpeC5wYWlyd2lzZU11bHRpcGx5KHRyYW5zcG9zZSwgc2ltcGxpY2lhbFNldCk7XG4gICAgc2ltcGxpY2lhbFNldCA9IG1hdHJpeC5hZGQoc2ltcGxpY2lhbFNldCwgbWF0cml4LnN1YnRyYWN0KHRyYW5zcG9zZSwgcHJvZE1hdHJpeCkpO1xuICAgIHJldHVybiBtYXRyaXguZWxpbWluYXRlWmVyb3Moc2ltcGxpY2lhbFNldCk7XG59XG5leHBvcnRzLnJlc2V0TG9jYWxDb25uZWN0aXZpdHkgPSByZXNldExvY2FsQ29ubmVjdGl2aXR5O1xuZnVuY3Rpb24gaW5pdFRyYW5zZm9ybShpbmRpY2VzLCB3ZWlnaHRzLCBlbWJlZGRpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gdXRpbHNcbiAgICAgICAgLnplcm9zKGluZGljZXMubGVuZ3RoKVxuICAgICAgICAubWFwKGZ1bmN0aW9uICh6KSB7IHJldHVybiB1dGlscy56ZXJvcyhlbWJlZGRpbmdbMF0ubGVuZ3RoKTsgfSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlc1swXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBlbWJlZGRpbmdbMF0ubGVuZ3RoOyBkKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYSA9IGluZGljZXNbaV1bal07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldW2RdICs9IHdlaWdodHNbaV1bal0gKiBlbWJlZGRpbmdbYV1bZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMuaW5pdFRyYW5zZm9ybSA9IGluaXRUcmFuc2Zvcm07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX3ZhbHVlcyA9ICh0aGlzICYmIHRoaXMuX192YWx1ZXMpIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiB0YXVSYW5kSW50KG4sIHJhbmRvbSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmRvbSgpICogbik7XG59XG5leHBvcnRzLnRhdVJhbmRJbnQgPSB0YXVSYW5kSW50O1xuZnVuY3Rpb24gdGF1UmFuZChyYW5kb20pIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG59XG5leHBvcnRzLnRhdVJhbmQgPSB0YXVSYW5kO1xuZnVuY3Rpb24gbm9ybSh2ZWMpIHtcbiAgICB2YXIgZV8xLCBfYTtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciB2ZWNfMSA9IF9fdmFsdWVzKHZlYyksIHZlY18xXzEgPSB2ZWNfMS5uZXh0KCk7ICF2ZWNfMV8xLmRvbmU7IHZlY18xXzEgPSB2ZWNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdmVjXzFfMS52YWx1ZTtcbiAgICAgICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdyhpdGVtLCAyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHZlY18xXzEgJiYgIXZlY18xXzEuZG9uZSAmJiAoX2EgPSB2ZWNfMS5yZXR1cm4pKSBfYS5jYWxsKHZlY18xKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnNxcnQocmVzdWx0KTtcbn1cbmV4cG9ydHMubm9ybSA9IG5vcm07XG5mdW5jdGlvbiBlbXB0eShuKSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5leHBvcnRzLmVtcHR5ID0gZW1wdHk7XG5mdW5jdGlvbiByYW5nZShuKSB7XG4gICAgcmV0dXJuIGVtcHR5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkgeyByZXR1cm4gaTsgfSk7XG59XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG5mdW5jdGlvbiBmaWxsZWQobiwgdikge1xuICAgIHJldHVybiBlbXB0eShuKS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdjsgfSk7XG59XG5leHBvcnRzLmZpbGxlZCA9IGZpbGxlZDtcbmZ1bmN0aW9uIHplcm9zKG4pIHtcbiAgICByZXR1cm4gZmlsbGVkKG4sIDApO1xufVxuZXhwb3J0cy56ZXJvcyA9IHplcm9zO1xuZnVuY3Rpb24gb25lcyhuKSB7XG4gICAgcmV0dXJuIGZpbGxlZChuLCAxKTtcbn1cbmV4cG9ydHMub25lcyA9IG9uZXM7XG5mdW5jdGlvbiBsaW5lYXIoYSwgYiwgbGVuKSB7XG4gICAgcmV0dXJuIGVtcHR5KGxlbikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICAgIHJldHVybiBhICsgaSAqICgoYiAtIGEpIC8gKGxlbiAtIDEpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMubGluZWFyID0gbGluZWFyO1xuZnVuY3Rpb24gc3VtKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0LnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2YWwpIHsgcmV0dXJuIHN1bSArIHZhbDsgfSk7XG59XG5leHBvcnRzLnN1bSA9IHN1bTtcbmZ1bmN0aW9uIG1lYW4oaW5wdXQpIHtcbiAgICByZXR1cm4gc3VtKGlucHV0KSAvIGlucHV0Lmxlbmd0aDtcbn1cbmV4cG9ydHMubWVhbiA9IG1lYW47XG5mdW5jdGlvbiBtYXgoaW5wdXQpIHtcbiAgICB2YXIgbWF4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1heCA9IGlucHV0W2ldID4gbWF4ID8gaW5wdXRbaV0gOiBtYXg7XG4gICAgfVxuICAgIHJldHVybiBtYXg7XG59XG5leHBvcnRzLm1heCA9IG1heDtcbmZ1bmN0aW9uIG1heDJkKGlucHV0KSB7XG4gICAgdmFyIG1heCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGlucHV0W2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBtYXggPSBpbnB1dFtpXVtqXSA+IG1heCA/IGlucHV0W2ldW2pdIDogbWF4O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXg7XG59XG5leHBvcnRzLm1heDJkID0gbWF4MmQ7XG5mdW5jdGlvbiByZWplY3Rpb25TYW1wbGUoblNhbXBsZXMsIHBvb2xTaXplLCByYW5kb20pIHtcbiAgICB2YXIgcmVzdWx0ID0gemVyb3MoblNhbXBsZXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblNhbXBsZXM7IGkrKykge1xuICAgICAgICB2YXIgcmVqZWN0U2FtcGxlID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKHJlamVjdFNhbXBsZSkge1xuICAgICAgICAgICAgdmFyIGogPSB0YXVSYW5kSW50KHBvb2xTaXplLCByYW5kb20pO1xuICAgICAgICAgICAgdmFyIGJyb2tlbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBpOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gcmVzdWx0W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYnJva2VuKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0U2FtcGxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnJlamVjdGlvblNhbXBsZSA9IHJlamVjdGlvblNhbXBsZTtcbmZ1bmN0aW9uIHJlc2hhcGUyZCh4LCBhLCBiKSB7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKHgubGVuZ3RoICE9PSBhICogYikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGRpbWVuc2lvbnMgbXVzdCBtYXRjaCBpbnB1dCBsZW5ndGguJyk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTsgaSsrKSB7XG4gICAgICAgIHZhciBjb2wgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiOyBqKyspIHtcbiAgICAgICAgICAgIGNvbC5wdXNoKHhbaW5kZXhdKTtcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcm93cy5wdXNoKGNvbCk7XG4gICAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xufVxuZXhwb3J0cy5yZXNoYXBlMmQgPSByZXNoYXBlMmQ7XG4iXSwibmFtZXMiOlsibGV2ZW5iZXJnTWFycXVhcmR0IiwiZGF0YSIsInBhcmFtZXRlcml6ZWRGdW5jdGlvbiIsIm9wdGlvbnMiLCJtYXhJdGVyYXRpb25zIiwiZ3JhZGllbnREaWZmZXJlbmNlIiwiZGFtcGluZyIsImVycm9yVG9sZXJhbmNlIiwibWluVmFsdWVzIiwibWF4VmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIkVycm9yIiwieCIsInkiLCJsZW5ndGgiLCJwYXJhbWV0ZXJzIiwiQXJyYXkiLCJmaWxsIiwicGFyTGVuIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIk1JTl9TQUZFX0lOVEVHRVIiLCJpdGVyYXRpb24iLCJlcnJvciIsImNvbnZlcmdlZCIsImsiLCJNYXRoIiwibWluIiwibWF4IiwiaXNOYU4iLCJwYXJhbWV0ZXJWYWx1ZXMiLCJwYXJhbWV0ZXJFcnJvciIsIml0ZXJhdGlvbnMiLCJfX2ltcG9ydFN0YXIiLCJ0aGlzIiwibW9kIiwiX19lc01vZHVsZSIsInJlc3VsdCIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwidXRpbHMiLCJtYWtlSGVhcCIsIm5Qb2ludHMiLCJzaXplIiwibWFrZUFycmF5cyIsImZpbGxWYWx1ZSIsImVtcHR5IiwibWFwIiwiZmlsbGVkIiwiaGVhcCIsInB1c2giLCJJbmZpbml0eSIsImhlYXBQdXNoIiwicm93Iiwid2VpZ2h0IiwiaW5kZXgiLCJmbGFnIiwiZmxvb3IiLCJpbmRpY2VzIiwid2VpZ2h0cyIsImkiLCJ1bmNoZWNrZWRIZWFwUHVzaCIsImlzTmV3IiwiaVN3YXAiLCJpYzEiLCJpYzIiLCJoZWFwU2hhcGUyIiwic2lmdERvd24iLCJoZWFwMSIsImhlYXAyIiwiY2VpbGluZyIsImVsdCIsImxlZnRDaGlsZCIsInJpZ2h0Q2hpbGQiLCJzd2FwIiwidGVtcDEiLCJ0ZW1wMiIsInJlamVjdGlvblNhbXBsZSIsIm5TYW1wbGVzIiwicG9vbFNpemUiLCJyYW5kb20iLCJ6ZXJvcyIsInJlamVjdFNhbXBsZSIsImoiLCJ0YXVSYW5kSW50IiwiYnJva2VuIiwiYnVpbGRDYW5kaWRhdGVzIiwiY3VycmVudEdyYXBoIiwiblZlcnRpY2VzIiwibk5laWdoYm9ycyIsIm1heENhbmRpZGF0ZXMiLCJjYW5kaWRhdGVOZWlnaGJvcnMiLCJpZHgiLCJpc24iLCJkIiwidGF1UmFuZCIsImRlaGVhcFNvcnQiLCJpbmRIZWFwIiwiZGlzdEhlYXAiLCJpbmRIZWFwSW5kZXgiLCJkaXN0SGVhcEluZGV4Iiwic21hbGxlc3RGbGFnZ2VkIiwiaW5kIiwiZGlzdCIsIm1pbkRpc3QiLCJyZXN1bHRJbmRleCIsInVtYXBfMSIsIlVNQVAiLCJfYSIsIl9fcmVhZCIsIm8iLCJuIiwibSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiciIsImUiLCJhciIsIm5leHQiLCJkb25lIiwiX192YWx1ZXMiLCJTcGFyc2VNYXRyaXgiLCJyb3dzIiwiY29scyIsInZhbHVlcyIsImRpbXMiLCJlbnRyaWVzIiwiTWFwIiwiblJvd3MiLCJuQ29scyIsImNvbCIsImNoZWNrRGltcyIsImtleSIsIm1ha2VLZXkiLCJzZXQiLCJwcm90b3R5cGUiLCJoYXMiLCJnZXQiLCJkZWZhdWx0VmFsdWUiLCJnZXRBbGwiLCJvcmRlcmVkIiwicm93Q29sVmFsdWVzIiwiZm9yRWFjaCIsInNvcnQiLCJhIiwiYiIsImdldERpbXMiLCJnZXRSb3dzIiwiZnJvbSIsIl9iIiwiZ2V0Q29scyIsImdldFZhbHVlcyIsImZuIiwidmFscyIsInRvQXJyYXkiLCJfdGhpcyIsIm91dHB1dCIsInRyYW5zcG9zZSIsIm1hdHJpeCIsImlkZW50aXR5IiwicGFpcndpc2VNdWx0aXBseSIsImVsZW1lbnRXaXNlIiwiYWRkIiwic3VidHJhY3QiLCJtYXhpbXVtIiwibXVsdGlwbHlTY2FsYXIiLCJzY2FsYXIiLCJlbGltaW5hdGVaZXJvcyIsInplcm9JbmRpY2VzIiwiU2V0IiwicmVtb3ZlQnlaZXJvSW5kZXgiLCJfIiwibmV4dFZhbHVlcyIsImZpbHRlciIsIm5leHRSb3dzIiwibmV4dENvbHMiLCJub3JtYWxpemUiLCJub3JtVHlwZSIsImVfMSIsIm5vcm1GbiIsIm5vcm1GbnMiLCJjb2xzQnlSb3ciLCJuZXh0TWF0cml4IiwiX2xvb3BfMSIsIm5vcm0iLCJrZXlzIiwiX2MiLCJlXzFfMSIsInJldHVybiIsInhzIiwic3VtIiwicG93Iiwic3FydCIsIm9wIiwidmlzaXRlZCIsIm9wZXJhdGUiLCJuZXh0VmFsdWUiLCJ2YWx1ZXNBIiwicm93c0EiLCJjb2xzQSIsInZhbHVlc0IiLCJyb3dzQiIsImNvbHNCIiwiZ2V0Q1NSIiwiaW5kcHRyIiwiY3VycmVudFJvdyIsInRyZWUiLCJtYWtlTk5EZXNjZW50IiwiZGlzdGFuY2VGbiIsImxlYWZBcnJheSIsIm5JdGVycyIsImRlbHRhIiwicmhvIiwicnBUcmVlSW5pdCIsImMiLCJwIiwicSIsImNqIiwiY2siLCJtYWtlSW5pdGlhbGl6YXRpb25zIiwiaW5pdEZyb21SYW5kb20iLCJxdWVyeVBvaW50cyIsIl9oZWFwIiwiaW5pdEZyb21UcmVlIiwiX3RyZWUiLCJzZWFyY2hGbGF0VHJlZSIsIm1ha2VJbml0aWFsaXplZE5OU2VhcmNoIiwiZ3JhcGgiLCJpbml0aWFsaXphdGlvbiIsInRyaWVkIiwidmVydGV4IiwiY2FuZGlkYXRlcyIsInNsaWNlIiwiY2FuZGlkYXRlc18xIiwiY2FuZGlkYXRlc18xXzEiLCJjYW5kaWRhdGUiLCJpbml0aWFsaXplU2VhcmNoIiwiZm9yZXN0IiwiZV8yIiwicmVzdWx0cyIsImZvcmVzdF8xIiwiZm9yZXN0XzFfMSIsImVfMl8xIiwiX19zcHJlYWQiLCJhcmd1bWVudHMiLCJjb25jYXQiLCJGbGF0VHJlZSIsImh5cGVycGxhbmVzIiwib2Zmc2V0cyIsImNoaWxkcmVuIiwibWFrZUV1Y2xpZGVhblRyZWUiLCJsZWFmU2l6ZSIsInNwbGl0UmVzdWx0cyIsImRpbSIsImxlZnRJbmRleCIsInJpZ2h0SW5kZXgiLCJsZWZ0IiwicmlnaHQiLCJoeXBlcnBsYW5lT2Zmc2V0IiwiaHlwZXJwbGFuZVZlY3RvciIsIm5MZWZ0IiwiblJpZ2h0Iiwic2lkZSIsIm1hcmdpbiIsImluZGljZXNMZWZ0IiwiaW5kaWNlc1JpZ2h0IiwiaHlwZXJwbGFuZSIsIm9mZnNldCIsImV1Y2xpZGVhblJhbmRvbVByb2plY3Rpb25TcGxpdCIsImlzTGVhZiIsInJlY3Vyc2l2ZUZsYXR0ZW4iLCJub2RlTnVtIiwibGVhZk51bSIsInNwbGljZSIsImFwcGx5Iiwib2xkTm9kZU51bSIsInJlcyIsIm51bU5vZGVzIiwibnVtTGVhdmVzIiwic2VsZWN0U2lkZSIsInBvaW50IiwibWFrZUZvcmVzdCIsIm5UcmVlcyIsInJhbmdlIiwibWFrZVRyZWUiLCJuTm9kZXMiLCJuTGVhdmVzIiwiZmxhdHRlblRyZWUiLCJtYWtlTGVhZkFycmF5IiwicnBGb3Jlc3QiLCJycEZvcmVzdF8xIiwicnBGb3Jlc3RfMV8xIiwibm9kZSIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsInJlamVjdGVkIiwidGhlbiIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ0IiwiZyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwidiIsIlR5cGVFcnJvciIsInBvcCIsIl9faW1wb3J0RGVmYXVsdCIsIm5uRGVzY2VudCIsIm1sX2xldmVuYmVyZ19tYXJxdWFyZHRfMSIsIlNNT09USF9LX1RPTEVSQU5DRSIsIk1JTl9LX0RJU1RfU0NBTEUiLCJwYXJhbXMiLCJsZWFybmluZ1JhdGUiLCJsb2NhbENvbm5lY3Rpdml0eSIsIm5Db21wb25lbnRzIiwibkVwb2NocyIsIm5lZ2F0aXZlU2FtcGxlUmF0ZSIsInJlcHVsc2lvblN0cmVuZ3RoIiwic2V0T3BNaXhSYXRpbyIsInNwcmVhZCIsInRyYW5zZm9ybVF1ZXVlU2l6ZSIsInRhcmdldE1ldHJpYyIsInRhcmdldFdlaWdodCIsInRhcmdldE5OZWlnaGJvcnMiLCJldWNsaWRlYW4iLCJpc0luaXRpYWxpemVkIiwiZW1iZWRkaW5nIiwib3B0aW1pemF0aW9uU3RhdGUiLCJPcHRpbWl6YXRpb25TdGF0ZSIsInNldFBhcmFtIiwidW5kZWZpbmVkIiwiZml0IiwiWCIsImluaXRpYWxpemVGaXQiLCJvcHRpbWl6ZUxheW91dCIsImZpdEFzeW5jIiwiY2FsbGJhY2siLCJvcHRpbWl6ZUxheW91dEFzeW5jIiwic2V0U3VwZXJ2aXNlZFByb2plY3Rpb24iLCJZIiwic2V0UHJlY29tcHV0ZWRLTk4iLCJrbm5JbmRpY2VzIiwia25uRGlzdGFuY2VzIiwiZ2V0TkVwb2NocyIsImtublJlc3VsdHMiLCJuZWFyZXN0TmVpZ2hib3JzIiwiZnV6enlTaW1wbGljaWFsU2V0IiwibWFrZVNlYXJjaEZucyIsInNlYXJjaEdyYXBoIiwibWFrZVNlYXJjaEdyYXBoIiwicHJvY2Vzc0dyYXBoRm9yU3VwZXJ2aXNlZFByb2plY3Rpb24iLCJpbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZyIsImhlYWQiLCJ0YWlsIiwiZXBvY2hzUGVyU2FtcGxlIiwiaW5pdGlhbGl6ZU9wdGltaXphdGlvbiIsInByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wIiwic2VhcmNoIiwia25uIiwiZGlzdGFuY2VzIiwibmVpZ2hib3IiLCJkaXN0YW5jZSIsInRyYW5zZm9ybSIsInRvVHJhbnNmb3JtIiwicmF3RGF0YSIsImluaXQiLCJhZGp1c3RlZExvY2FsQ29ubmVjdGl2aXR5Iiwic21vb3RoS05ORGlzdGFuY2UiLCJzaWdtYXMiLCJyaG9zIiwiY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMiLCJub3JtZWQiLCJjc3JNYXRyaXgiLCJpbml0VHJhbnNmb3JtIiwicmVzaGFwZTJkIiwiZ3JhcGhNYXgiLCJyZWR1Y2UiLCJ2YWwiLCJtYWtlRXBvY2hzUGVyU2FtcGxlIiwiYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzIiwiaGVhZEVtYmVkZGluZyIsInRhaWxFbWJlZGRpbmciLCJjdXJyZW50RXBvY2giLCJmYXJEaXN0IiwiY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uIiwib3B0aW1pemVMYXlvdXRTdGVwIiwiZ2V0RW1iZWRkaW5nIiwibWV0cmljTk5EZXNjZW50Iiwicm91bmQiLCJsb2ciLCJsb2cyIiwiX2QiLCJfZSIsInNwYXJzZU1hdHJpeCIsInByb2RNYXRyaXgiLCJzaW1wbGljaWFsU2V0IiwidGFyZ2V0IiwidW5rbm93bkRpc3QiLCJpbnRlcnNlY3Rpb24iLCJmYXN0SW50ZXJzZWN0aW9uIiwicmVzZXRMb2NhbENvbm5lY3Rpdml0eSIsIm5JdGVyIiwiYmFuZHdpZHRoIiwibG8iLCJoaSIsIm1pZCIsIml0aERpc3RhbmNlcyIsIm5vblplcm9EaXN0cyIsImludGVycG9sYXRpb24iLCJwc3VtIiwiZXhwIiwiYWJzIiwibWVhbkl0aERpc3RhbmNlcyIsIm1lYW4iLCJtZWFuRGlzdGFuY2VzIiwiZ3JhcGhWYWx1ZXMiLCJlbnRyeSIsInciLCJzdGF0ZSIsImFzc2lnbiIsIm1vdmVPdGhlciIsImVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlIiwiZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZSIsImVwb2NoT2ZOZXh0U2FtcGxlIiwiaW5pdGlhbEFscGhhIiwiYWxwaGEiLCJnYW1tYSIsImZpbmRBQlBhcmFtcyIsImN1cnJlbnQiLCJvdGhlciIsImRpc3RTcXVhcmVkIiwickRpc3QiLCJncmFkQ29lZmYiLCJncmFkRCIsImNsaXAiLCJuTmVnU2FtcGxlcyIsImtfMSIsIm90aGVyXzEiLCJkaXN0U3F1YXJlZF8xIiwiZ3JhZENvZWZmXzEiLCJlcG9jaENhbGxiYWNrIiwiZXBvY2hDb21wbGV0ZWQiLCJzaG91bGRTdG9wIiwiaXNGaW5pc2hlZCIsInNldFRpbWVvdXQiLCJlcnIiLCJjb3NpbmUiLCJub3JtWCIsIm5vcm1ZIiwiY2xpcFZhbHVlIiwieHYiLCJsaW5lYXIiLCJ5diIsImRlZmF1bHQiLCJ6IiwiaW5wdXQiLCJ2ZWMiLCJ2ZWNfMSIsInZlY18xXzEiLCJpdGVtIiwib25lcyIsImxlbiIsIm1heDJkIl0sInNvdXJjZVJvb3QiOiIifQ==
|