From 81efa40cc96357ad2d15b8a3cee67168fd55d8d5 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:19:26 +0300 Subject: [PATCH 01/10] Changing packaging for node. --- .gitignore | 4 +++- .npmignore | 7 +++++++ README.md | 2 ++ dist/tsm.js | 41 +++++++++++++++++++++++++++++++++++++++-- package.json | 15 ++++++--------- webpack.config.js | 23 ----------------------- 6 files changed, 57 insertions(+), 35 deletions(-) create mode 100644 .npmignore delete mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore index d133fc1..74b878d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .vscode/ node_modules/ -package-lock.json \ No newline at end of file +package-lock.json +.idea +dist \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..bca697c --- /dev/null +++ b/.npmignore @@ -0,0 +1,7 @@ +.idea +.gitignore +tsm.iml +tsconfig.json +node_modules +src +test diff --git a/README.md b/README.md index c38831f..8073570 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ tsm: A Typescript vector and matrix math library ================================================= +This is node packaged version of the library. + tsm is a a collection of vector, matrix and quaternion classes written in Typescript. The library's design is influenced by both [gl-matrix](https://github.com/toji/gl-matrix) and [glm](https://github.com/g-truc/glm). diff --git a/dist/tsm.js b/dist/tsm.js index b0b0e96..e3258dc 100644 --- a/dist/tsm.js +++ b/dist/tsm.js @@ -1,2 +1,39 @@ -var tsm=function(t){var e={};function s(i){if(e[i])return e[i].exports;var u=e[i]={i:i,l:!1,exports:{}};return t[i].call(u.exports,u,u.exports,s),u.l=!0,u.exports}return s.m=t,s.c=e,s.d=function(t,e,i){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},s.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.t=function(t,e){if(1&e&&(t=s(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var u in t)s.d(i,u,function(e){return t[e]}.bind(null,u));return i},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,"a",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p="",s(s.s=7)}([function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.epsilon=1e-6},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(3),u=s(0),a=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(3),t&&(this.xyz=t)}return Object.defineProperty(t.prototype,"x",{get:function(){return this.values[0]},set:function(t){this.values[0]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"y",{get:function(){return this.values[1]},set:function(t){this.values[1]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"z",{get:function(){return this.values[2]},set:function(t){this.values[2]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xy",{get:function(){return[this.values[0],this.values[1]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xyz",{get:function(){return[this.values[0],this.values[1],this.values[2]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]},enumerable:!0,configurable:!0}),t.prototype.at=function(t){return this.values[t]},t.prototype.reset=function(){this.x=0,this.y=0,this.z=0},t.prototype.copy=function(e){return void 0===e&&(e=null),e||(e=new t),e.x=this.x,e.y=this.y,e.z=this.z,e},t.prototype.negate=function(t){return void 0===t&&(t=null),t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t},t.prototype.equals=function(t,e){return void 0===e&&(e=u.epsilon),!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&!(Math.abs(this.z-t.z)>e))},t.prototype.length=function(){return Math.sqrt(this.squaredLength())},t.prototype.squaredLength=function(){var t=this.x,e=this.y,s=this.z;return t*t+e*e+s*s},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this},t.prototype.subtract=function(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this},t.prototype.multiply=function(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this},t.prototype.divide=function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},t.prototype.scale=function(t,e){return void 0===e&&(e=null),e||(e=this),e.x*=t,e.y*=t,e.z*=t,e},t.prototype.normalize=function(t){void 0===t&&(t=null),t||(t=this);var e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t.z=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t)},t.prototype.multiplyByMat3=function(t,e){return void 0===e&&(e=null),e||(e=this),t.multiplyVec3(this,e)},t.prototype.multiplyByQuat=function(t,e){return void 0===e&&(e=null),e||(e=this),t.multiplyVec3(this,e)},t.cross=function(e,s,i){void 0===i&&(i=null),i||(i=new t);var u=e.x,a=e.y,n=e.z,r=s.x,l=s.y,h=s.z;return i.x=a*h-n*l,i.y=n*r-u*h,i.z=u*l-a*r,i},t.dot=function(t,e){var s=t.x,i=t.y,u=t.z;return s*e.x+i*e.y+u*e.z},t.distance=function(t,e){e.x,t.x,e.y,t.y,e.z,t.z;return Math.sqrt(this.squaredDistance(t,e))},t.squaredDistance=function(t,e){var s=e.x-t.x,i=e.y-t.y,u=e.z-t.z;return s*s+i*i+u*u},t.direction=function(e,s,i){void 0===i&&(i=null),i||(i=new t);var u=e.x-s.x,a=e.y-s.y,n=e.z-s.z,r=Math.sqrt(u*u+a*a+n*n);return 0===r?(i.x=0,i.y=0,i.z=0,i):(r=1/r,i.x=u*r,i.y=a*r,i.z=n*r,i)},t.mix=function(e,s,i,u){return void 0===u&&(u=null),u||(u=new t),u.x=e.x+i*(s.x-e.x),u.y=e.y+i*(s.y-e.y),u.z=e.z+i*(s.z-e.z),u},t.sum=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x+s.x,i.y=e.y+s.y,i.z=e.z+s.z,i},t.difference=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x-s.x,i.y=e.y-s.y,i.z=e.z-s.z,i},t.product=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x*s.x,i.y=e.y*s.y,i.z=e.z*s.z,i},t.quotient=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x/s.x,i.y=e.y/s.y,i.z=e.z/s.z,i},t.prototype.toQuat=function(e){void 0===e&&(e=null),e||(e=new i.default);var s=new t,u=new t;return s.x=Math.cos(.5*this.x),u.x=Math.sin(.5*this.x),s.y=Math.cos(.5*this.y),u.y=Math.sin(.5*this.y),s.z=Math.cos(.5*this.z),u.z=Math.sin(.5*this.z),e.x=u.x*s.y*s.z-s.x*u.y*u.z,e.y=s.x*u.y*s.z+u.x*s.y*u.z,e.z=s.x*s.y*u.z-u.x*u.y*s.z,e.w=s.x*s.y*s.z+u.x*u.y*u.z,e},t.zero=new t([0,0,0]),t.up=new t([0,1,0]),t.right=new t([1,0,0]),t.forward=new t([0,0,1]),t}();e.default=a},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(1),u=s(0),a=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(2),t&&(this.xy=t)}return Object.defineProperty(t.prototype,"x",{get:function(){return this.values[0]},set:function(t){this.values[0]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"y",{get:function(){return this.values[1]},set:function(t){this.values[1]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xy",{get:function(){return[this.values[0],this.values[1]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1]},enumerable:!0,configurable:!0}),t.prototype.at=function(t){return this.values[t]},t.prototype.reset=function(){this.x=0,this.y=0},t.prototype.copy=function(e){return void 0===e&&(e=null),e||(e=new t),e.x=this.x,e.y=this.y,e},t.prototype.negate=function(t){return void 0===t&&(t=null),t||(t=this),t.x=-this.x,t.y=-this.y,t},t.prototype.equals=function(t,e){return void 0===e&&(e=u.epsilon),!(Math.abs(this.x-t.x)>e)&&!(Math.abs(this.y-t.y)>e)},t.prototype.length=function(){return Math.sqrt(this.squaredLength())},t.prototype.squaredLength=function(){var t=this.x,e=this.y;return t*t+e*e},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.subtract=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.multiply=function(t){return this.x*=t.x,this.y*=t.y,this},t.prototype.divide=function(t){return this.x/=t.x,this.y/=t.y,this},t.prototype.scale=function(t,e){return void 0===e&&(e=null),e||(e=this),e.x*=t,e.y*=t,e},t.prototype.normalize=function(t){void 0===t&&(t=null),t||(t=this);var e=this.length();return 1===e?this:0===e?(t.x=0,t.y=0,t):(e=1/e,t.x*=e,t.y*=e,t)},t.prototype.multiplyMat2=function(t,e){return void 0===e&&(e=null),e||(e=this),t.multiplyVec2(this,e)},t.prototype.multiplyMat3=function(t,e){return void 0===e&&(e=null),e||(e=this),t.multiplyVec2(this,e)},t.cross=function(t,e,s){void 0===s&&(s=null),s||(s=new i.default);var u=t.x,a=t.y,n=e.x,r=u*e.y-a*n;return s.x=0,s.y=0,s.z=r,s},t.dot=function(t,e){return t.x*e.x+t.y*e.y},t.distance=function(t,e){return Math.sqrt(this.squaredDistance(t,e))},t.squaredDistance=function(t,e){var s=e.x-t.x,i=e.y-t.y;return s*s+i*i},t.direction=function(e,s,i){void 0===i&&(i=null),i||(i=new t);var u=e.x-s.x,a=e.y-s.y,n=Math.sqrt(u*u+a*a);return 0===n?(i.x=0,i.y=0,i):(n=1/n,i.x=u*n,i.y=a*n,i)},t.mix=function(e,s,i,u){void 0===u&&(u=null),u||(u=new t);var a=e.x,n=e.y,r=s.x,l=s.y;return u.x=a+i*(r-a),u.y=n+i*(l-n),u},t.sum=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x+s.x,i.y=e.y+s.y,i},t.difference=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x-s.x,i.y=e.y-s.y,i},t.product=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x*s.x,i.y=e.y*s.y,i},t.quotient=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x/s.x,i.y=e.y/s.y,i},t.zero=new t([0,0]),t}();e.default=a},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(1),u=s(4),a=s(5),n=s(0),r=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(4),t&&(this.xyzw=t)}return Object.defineProperty(t.prototype,"x",{get:function(){return this.values[0]},set:function(t){this.values[0]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"y",{get:function(){return this.values[1]},set:function(t){this.values[1]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"z",{get:function(){return this.values[2]},set:function(t){this.values[2]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"w",{get:function(){return this.values[3]},set:function(t){this.values[3]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xy",{get:function(){return[this.values[0],this.values[1]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xyz",{get:function(){return[this.values[0],this.values[1],this.values[2]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xyzw",{get:function(){return[this.values[0],this.values[1],this.values[2],this.values[3]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]},enumerable:!0,configurable:!0}),t.prototype.at=function(t){return this.values[t]},t.prototype.reset=function(){for(var t=0;t<4;t++)this.values[t]=0},t.prototype.copy=function(e){void 0===e&&(e=null),e||(e=new t);for(var s=0;s<4;s++)e.values[s]=this.values[s];return e},t.prototype.roll=function(){var t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(t*e+i*s),i*i+t*t-e*e-s*s)},t.prototype.pitch=function(){var t=this.x,e=this.y,s=this.z,i=this.w;return Math.atan2(2*(e*s+i*t),i*i-t*t-e*e+s*s)},t.prototype.yaw=function(){return Math.asin(2*(this.x*this.z-this.w*this.y))},t.prototype.equals=function(t,e){void 0===e&&(e=n.epsilon);for(var s=0;s<4;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0},t.prototype.setIdentity=function(){return this.x=0,this.y=0,this.z=0,this.w=1,this},t.prototype.calculateW=function(){var t=this.x,e=this.y,s=this.z;return this.w=-Math.sqrt(Math.abs(1-t*t-e*e-s*s)),this},t.dot=function(t,e){return t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w},t.prototype.inverse=function(){var e=t.dot(this,this);if(!e)return this.xyzw=[0,0,0,0],this;var s=e?1/e:0;return this.x*=-s,this.y*=-s,this.z*=-s,this.w*=s,this},t.prototype.conjugate=function(){return this.values[0]*=-1,this.values[1]*=-1,this.values[2]*=-1,this},t.prototype.length=function(){var t=this.x,e=this.y,s=this.z,i=this.w;return Math.sqrt(t*t+e*e+s*s+i*i)},t.prototype.normalize=function(t){void 0===t&&(t=null),t||(t=this);var e=this.x,s=this.y,i=this.z,u=this.w,a=Math.sqrt(e*e+s*s+i*i+u*u);return a?(a=1/a,t.x=e*a,t.y=s*a,t.z=i*a,t.w=u*a,t):(t.x=0,t.y=0,t.z=0,t.w=0,t)},t.prototype.add=function(t){for(var e=0;e<4;e++)this.values[e]+=t.at(e);return this},t.prototype.multiply=function(t){var e=this.values[0],s=this.values[1],i=this.values[2],u=this.values[3],a=t.x,n=t.y,r=t.z,l=t.w;return this.x=e*l+u*a+s*r-i*n,this.y=s*l+u*n+i*a-e*r,this.z=i*l+u*r+e*n-s*a,this.w=u*l-e*a-s*n-i*r,this},t.prototype.multiplyVec3=function(t,e){void 0===e&&(e=null),e||(e=new i.default);var s=t.x,u=t.y,a=t.z,n=this.x,r=this.y,l=this.z,h=this.w,o=h*s+r*a-l*u,v=h*u+l*s-n*a,y=h*a+n*u-r*s,c=-n*s-r*u-l*a;return e.x=o*h+c*-n+v*-l-y*-r,e.y=v*h+c*-r+y*-n-o*-l,e.z=y*h+c*-l+o*-r-v*-n,e},t.prototype.toMat3=function(t){void 0===t&&(t=null),t||(t=new u.default);var e=this.x,s=this.y,i=this.z,a=this.w,n=e+e,r=s+s,l=i+i,h=e*n,o=e*r,v=e*l,y=s*r,c=s*l,f=i*l,p=a*n,d=a*r,x=a*l;return t.init([1-(y+f),o+x,v-d,o-x,1-(h+f),c+p,v+d,c-p,1-(h+y)]),t},t.prototype.toMat4=function(t){void 0===t&&(t=null),t||(t=new a.default);var e=this.x,s=this.y,i=this.z,u=this.w,n=e+e,r=s+s,l=i+i,h=e*n,o=e*r,v=e*l,y=s*r,c=s*l,f=i*l,p=u*n,d=u*r,x=u*l;return t.init([1-(y+f),o+x,v-d,0,o-x,1-(h+f),c+p,0,v+d,c-p,1-(h+y),0,0,0,0,1]),t},t.sum=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x+s.x,i.y=e.y+s.y,i.z=e.z+s.z,i.w=e.w+s.w,i},t.product=function(e,s,i){void 0===i&&(i=null),i||(i=new t);var u=e.x,a=e.y,n=e.z,r=e.w,l=s.x,h=s.y,o=s.z,v=s.w;return i.x=u*v+r*l+a*o-n*h,i.y=a*v+r*h+n*l-u*o,i.z=n*v+r*o+u*h-a*l,i.w=r*v-u*l-a*h-n*o,i},t.cross=function(e,s,i){void 0===i&&(i=null),i||(i=new t);var u=e.x,a=e.y,n=e.z,r=e.w,l=s.x,h=s.y,o=s.z,v=s.w;return i.x=r*o+n*v+u*h-a*l,i.y=r*v-u*l-a*h-n*o,i.z=r*l+u*v+a*o-n*h,i.w=r*h+a*v+n*l-u*o,i},t.shortMix=function(e,s,i,u){if(void 0===u&&(u=null),u||(u=new t),i<=0)return u.xyzw=e.xyzw,u;if(i>=1)return u.xyzw=s.xyzw,u;var a,n,r=t.dot(e,s),l=s.copy();if(r<0&&(l.inverse(),r=-r),r>.9999)a=1-i,n=0+i;else{var h=Math.sqrt(1-r*r),o=Math.atan2(h,r),v=1/h;a=Math.sin((1-i)*o)*v,n=Math.sin((0+i)*o)*v}return u.x=a*e.x+n*l.x,u.y=a*e.y+n*l.y,u.z=a*e.z+n*l.z,u.w=a*e.w+n*l.w,u},t.mix=function(e,s,i,u){void 0===u&&(u=null),u||(u=new t);var a=e.x*s.x+e.y*s.y+e.z*s.z+e.w*s.w;if(Math.abs(a)>=1)return u.xyzw=e.xyzw,u;var n=Math.acos(a),r=Math.sqrt(1-a*a);if(Math.abs(r)<.001)return u.x=.5*e.x+.5*s.x,u.y=.5*e.y+.5*s.y,u.z=.5*e.z+.5*s.z,u.w=.5*e.w+.5*s.w,u;var l=Math.sin((1-i)*n)/r,h=Math.sin(i*n)/r;return u.x=e.x*l+s.x*h,u.y=e.y*l+s.y*h,u.z=e.z*l+s.z*h,u.w=e.w*l+s.w*h,u},t.fromAxis=function(e,s,i){void 0===i&&(i=null),i||(i=new t),s*=.5;var u=Math.sin(s);return i.x=e.x*u,i.y=e.y*u,i.z=e.z*u,i.w=Math.cos(s),i},t.identity=(new t).setIdentity(),t}();e.default=r},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(2),u=s(1),a=s(5),n=s(3),r=s(0),l=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(9),t&&this.init(t)}return t.prototype.at=function(t){return this.values[t]},t.prototype.init=function(t){for(var e=0;e<9;e++)this.values[e]=t[e];return this},t.prototype.reset=function(){for(var t=0;t<9;t++)this.values[t]=0},t.prototype.copy=function(e){void 0===e&&(e=null),e||(e=new t);for(var s=0;s<9;s++)e.values[s]=this.values[s];return e},t.prototype.all=function(){for(var t=[],e=0;e<9;e++)t[e]=this.values[e];return t},t.prototype.row=function(t){return[this.values[3*t+0],this.values[3*t+1],this.values[3*t+2]]},t.prototype.col=function(t){return[this.values[t],this.values[t+3],this.values[t+6]]},t.prototype.equals=function(t,e){void 0===e&&(e=r.epsilon);for(var s=0;s<9;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0},t.prototype.determinant=function(){var t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],u=this.values[4],a=this.values[5],n=this.values[6],r=this.values[7],l=this.values[8];return t*(l*u-a*r)+e*(-l*i+a*n)+s*(r*i-u*n)},t.prototype.setIdentity=function(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=1,this.values[5]=0,this.values[6]=0,this.values[7]=0,this.values[8]=1,this},t.prototype.transpose=function(){var t=this.values[1],e=this.values[2],s=this.values[5];return this.values[1]=this.values[3],this.values[2]=this.values[6],this.values[3]=t,this.values[5]=this.values[7],this.values[6]=e,this.values[7]=s,this},t.prototype.inverse=function(){var t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],u=this.values[4],a=this.values[5],n=this.values[6],r=this.values[7],l=this.values[8],h=l*u-a*r,o=-l*i+a*n,v=r*i-u*n,y=t*h+e*o+s*v;return y?(y=1/y,this.values[0]=h*y,this.values[1]=(-l*e+s*r)*y,this.values[2]=(a*e-s*u)*y,this.values[3]=o*y,this.values[4]=(l*t-s*n)*y,this.values[5]=(-a*t+s*i)*y,this.values[6]=v*y,this.values[7]=(-r*t+e*n)*y,this.values[8]=(u*t-e*i)*y,this):null},t.prototype.multiply=function(t){var e=this.values[0],s=this.values[1],i=this.values[2],u=this.values[3],a=this.values[4],n=this.values[5],r=this.values[6],l=this.values[7],h=this.values[8],o=t.at(0),v=t.at(1),y=t.at(2),c=t.at(3),f=t.at(4),p=t.at(5),d=t.at(6),x=t.at(7),z=t.at(8);return this.values[0]=o*e+v*u+y*r,this.values[1]=o*s+v*a+y*l,this.values[2]=o*i+v*n+y*h,this.values[3]=c*e+f*u+p*r,this.values[4]=c*s+f*a+p*l,this.values[5]=c*i+f*n+p*h,this.values[6]=d*e+x*u+z*r,this.values[7]=d*s+x*a+z*l,this.values[8]=d*i+x*n+z*h,this},t.prototype.multiplyVec2=function(t,e){void 0===e&&(e=null);var s=t.x,u=t.y;return e?(e.xy=[s*this.values[0]+u*this.values[3]+this.values[6],s*this.values[1]+u*this.values[4]+this.values[7]],e):new i.default([s*this.values[0]+u*this.values[3]+this.values[6],s*this.values[1]+u*this.values[4]+this.values[7]])},t.prototype.multiplyVec3=function(t,e){void 0===e&&(e=null);var s=t.x,i=t.y,a=t.z;return e?(e.xyz=[s*this.values[0]+i*this.values[3]+a*this.values[6],s*this.values[1]+i*this.values[4]+a*this.values[7],s*this.values[2]+i*this.values[5]+a*this.values[8]],e):new u.default([s*this.values[0]+i*this.values[3]+a*this.values[6],s*this.values[1]+i*this.values[4]+a*this.values[7],s*this.values[2]+i*this.values[5]+a*this.values[8]])},t.prototype.toMat4=function(t){return void 0===t&&(t=null),t?(t.init([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1]),t):new a.default([this.values[0],this.values[1],this.values[2],0,this.values[3],this.values[4],this.values[5],0,this.values[6],this.values[7],this.values[8],0,0,0,0,1])},t.prototype.toQuat=function(){var t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],u=this.values[4],a=this.values[5],r=this.values[6],l=this.values[7],h=this.values[8],o=t-u-h,v=u-t-h,y=h-t-u,c=0,f=t+u+h;o>f&&(f=o,c=1),v>f&&(f=v,c=2),y>f&&(f=y,c=3);var p=.5*Math.sqrt(f+1),d=.25/p,x=new n.default;switch(c){case 0:x.w=p,x.x=(a-l)*d,x.y=(r-s)*d,x.z=(e-i)*d;break;case 1:x.w=(a-l)*d,x.x=p,x.y=(e+i)*d,x.z=(r+s)*d;break;case 2:x.w=(r-s)*d,x.x=(e+i)*d,x.y=p,x.z=(a+l)*d;break;case 3:x.w=(e-i)*d,x.x=(r+s)*d,x.y=(a+l)*d,x.z=p}return x},t.prototype.rotate=function(t,e){var s=e.x,i=e.y,u=e.z,a=Math.sqrt(s*s+i*i+u*u);if(!a)return null;1!==a&&(s*=a=1/a,i*=a,u*=a);var n=Math.sin(t),r=Math.cos(t),l=1-r,h=this.values[0],o=this.values[1],v=this.values[2],y=this.values[4],c=this.values[5],f=this.values[6],p=this.values[8],d=this.values[9],x=this.values[10],z=s*s*l+r,w=i*s*l+u*n,b=u*s*l-i*n,g=s*i*l-u*n,m=i*i*l+r,M=u*i*l+s*n,j=s*u*l+i*n,O=i*u*l-s*n,P=u*u*l+r;return this.values[0]=h*z+y*w+p*b,this.values[1]=o*z+c*w+d*b,this.values[2]=v*z+f*w+x*b,this.values[3]=h*g+y*m+p*M,this.values[4]=o*g+c*m+d*M,this.values[5]=v*g+f*m+x*M,this.values[6]=h*j+y*O+p*P,this.values[7]=o*j+c*O+d*P,this.values[8]=v*j+f*O+x*P,this},t.product=function(e,s,i){void 0===i&&(i=null);var u=e.at(0),a=e.at(1),n=e.at(2),r=e.at(3),l=e.at(4),h=e.at(5),o=e.at(6),v=e.at(7),y=e.at(8),c=s.at(0),f=s.at(1),p=s.at(2),d=s.at(3),x=s.at(4),z=s.at(5),w=s.at(6),b=s.at(7),g=s.at(8);return i?(i.init([c*u+f*r+p*o,c*a+f*l+p*v,c*n+f*h+p*y,d*u+x*r+z*o,d*a+x*l+z*v,d*n+x*h+z*y,w*u+b*r+g*o,w*a+b*l+g*v,w*n+b*h+g*y]),i):new t([c*u+f*r+p*o,c*a+f*l+p*v,c*n+f*h+p*y,d*u+x*r+z*o,d*a+x*l+z*v,d*n+x*h+z*y,w*u+b*r+g*o,w*a+b*l+g*v,w*n+b*h+g*y])},t.identity=(new t).setIdentity(),t}();e.default=l},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(1),u=s(6),a=s(4),n=s(0),r=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(16),t&&this.init(t)}return t.prototype.at=function(t){return this.values[t]},t.prototype.init=function(t){for(var e=0;e<16;e++)this.values[e]=t[e];return this},t.prototype.reset=function(){for(var t=0;t<16;t++)this.values[t]=0},t.prototype.copy=function(e){void 0===e&&(e=null),e||(e=new t);for(var s=0;s<16;s++)e.values[s]=this.values[s];return e},t.prototype.all=function(){for(var t=[],e=0;e<16;e++)t[e]=this.values[e];return t},t.prototype.row=function(t){return[this.values[4*t+0],this.values[4*t+1],this.values[4*t+2],this.values[4*t+3]]},t.prototype.col=function(t){return[this.values[t],this.values[t+4],this.values[t+8],this.values[t+12]]},t.prototype.equals=function(t,e){void 0===e&&(e=n.epsilon);for(var s=0;s<16;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0},t.prototype.determinant=function(){var t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],u=this.values[4],a=this.values[5],n=this.values[6],r=this.values[7],l=this.values[8],h=this.values[9],o=this.values[10],v=this.values[11],y=this.values[12],c=this.values[13],f=this.values[14],p=this.values[15];return(t*a-e*u)*(o*p-v*f)-(t*n-s*u)*(h*p-v*c)+(t*r-i*u)*(h*f-o*c)+(e*n-s*a)*(l*p-v*y)-(e*r-i*a)*(l*f-o*y)+(s*r-i*n)*(l*c-h*y)},t.prototype.setIdentity=function(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=0,this.values[4]=0,this.values[5]=1,this.values[6]=0,this.values[7]=0,this.values[8]=0,this.values[9]=0,this.values[10]=1,this.values[11]=0,this.values[12]=0,this.values[13]=0,this.values[14]=0,this.values[15]=1,this},t.prototype.transpose=function(){var t=this.values[1],e=this.values[2],s=this.values[3],i=this.values[6],u=this.values[7],a=this.values[11];return this.values[1]=this.values[4],this.values[2]=this.values[8],this.values[3]=this.values[12],this.values[4]=t,this.values[6]=this.values[9],this.values[7]=this.values[13],this.values[8]=e,this.values[9]=i,this.values[11]=this.values[14],this.values[12]=s,this.values[13]=u,this.values[14]=a,this},t.prototype.inverse=function(){var t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[3],u=this.values[4],a=this.values[5],n=this.values[6],r=this.values[7],l=this.values[8],h=this.values[9],o=this.values[10],v=this.values[11],y=this.values[12],c=this.values[13],f=this.values[14],p=this.values[15],d=t*a-e*u,x=t*n-s*u,z=t*r-i*u,w=e*n-s*a,b=e*r-i*a,g=s*r-i*n,m=l*c-h*y,M=l*f-o*y,j=l*p-v*y,O=h*f-o*c,P=h*p-v*c,q=o*p-v*f,_=d*q-x*P+z*O+w*j-b*M+g*m;return _?(_=1/_,this.values[0]=(a*q-n*P+r*O)*_,this.values[1]=(-e*q+s*P-i*O)*_,this.values[2]=(c*g-f*b+p*w)*_,this.values[3]=(-h*g+o*b-v*w)*_,this.values[4]=(-u*q+n*j-r*M)*_,this.values[5]=(t*q-s*j+i*M)*_,this.values[6]=(-y*g+f*z-p*x)*_,this.values[7]=(l*g-o*z+v*x)*_,this.values[8]=(u*P-a*j+r*m)*_,this.values[9]=(-t*P+e*j-i*m)*_,this.values[10]=(y*b-c*z+p*d)*_,this.values[11]=(-l*b+h*z-v*d)*_,this.values[12]=(-u*O+a*M-n*m)*_,this.values[13]=(t*O-e*M+s*m)*_,this.values[14]=(-y*w+c*x-f*d)*_,this.values[15]=(l*w-h*x+o*d)*_,this):null},t.prototype.multiply=function(t){var e=this.values[0],s=this.values[1],i=this.values[2],u=this.values[3],a=this.values[4],n=this.values[5],r=this.values[6],l=this.values[7],h=this.values[8],o=this.values[9],v=this.values[10],y=this.values[11],c=this.values[12],f=this.values[13],p=this.values[14],d=this.values[15],x=t.at(0),z=t.at(1),w=t.at(2),b=t.at(3);return this.values[0]=x*e+z*a+w*h+b*c,this.values[1]=x*s+z*n+w*o+b*f,this.values[2]=x*i+z*r+w*v+b*p,this.values[3]=x*u+z*l+w*y+b*d,x=t.at(4),z=t.at(5),w=t.at(6),b=t.at(7),this.values[4]=x*e+z*a+w*h+b*c,this.values[5]=x*s+z*n+w*o+b*f,this.values[6]=x*i+z*r+w*v+b*p,this.values[7]=x*u+z*l+w*y+b*d,x=t.at(8),z=t.at(9),w=t.at(10),b=t.at(11),this.values[8]=x*e+z*a+w*h+b*c,this.values[9]=x*s+z*n+w*o+b*f,this.values[10]=x*i+z*r+w*v+b*p,this.values[11]=x*u+z*l+w*y+b*d,x=t.at(12),z=t.at(13),w=t.at(14),b=t.at(15),this.values[12]=x*e+z*a+w*h+b*c,this.values[13]=x*s+z*n+w*o+b*f,this.values[14]=x*i+z*r+w*v+b*p,this.values[15]=x*u+z*l+w*y+b*d,this},t.prototype.multiplyVec3=function(t){var e=t.x,s=t.y,u=t.z;return new i.default([this.values[0]*e+this.values[4]*s+this.values[8]*u+this.values[12],this.values[1]*e+this.values[5]*s+this.values[9]*u+this.values[13],this.values[2]*e+this.values[6]*s+this.values[10]*u+this.values[14]])},t.prototype.multiplyVec4=function(t,e){void 0===e&&(e=null),e||(e=new u.default);var s=t.x,i=t.y,a=t.z,n=t.w;return e.x=this.values[0]*s+this.values[4]*i+this.values[8]*a+this.values[12]*n,e.y=this.values[1]*s+this.values[5]*i+this.values[9]*a+this.values[13]*n,e.z=this.values[2]*s+this.values[6]*i+this.values[10]*a+this.values[14]*n,e.w=this.values[3]*s+this.values[7]*i+this.values[11]*a+this.values[15]*n,e},t.prototype.toMat3=function(){return new a.default([this.values[0],this.values[1],this.values[2],this.values[4],this.values[5],this.values[6],this.values[8],this.values[9],this.values[10]])},t.prototype.toInverseMat3=function(){var t=this.values[0],e=this.values[1],s=this.values[2],i=this.values[4],u=this.values[5],n=this.values[6],r=this.values[8],l=this.values[9],h=this.values[10],o=h*u-n*l,v=-h*i+n*r,y=l*i-u*r,c=t*o+e*v+s*y;return c?(c=1/c,new a.default([o*c,(-h*e+s*l)*c,(n*e-s*u)*c,v*c,(h*t-s*r)*c,(-n*t+s*i)*c,y*c,(-l*t+e*r)*c,(u*t-e*i)*c])):null},t.prototype.translate=function(t){var e=t.x,s=t.y,i=t.z;return this.values[12]+=this.values[0]*e+this.values[4]*s+this.values[8]*i,this.values[13]+=this.values[1]*e+this.values[5]*s+this.values[9]*i,this.values[14]+=this.values[2]*e+this.values[6]*s+this.values[10]*i,this.values[15]+=this.values[3]*e+this.values[7]*s+this.values[11]*i,this},t.prototype.scale=function(t){var e=t.x,s=t.y,i=t.z;return this.values[0]*=e,this.values[1]*=e,this.values[2]*=e,this.values[3]*=e,this.values[4]*=s,this.values[5]*=s,this.values[6]*=s,this.values[7]*=s,this.values[8]*=i,this.values[9]*=i,this.values[10]*=i,this.values[11]*=i,this},t.prototype.rotate=function(t,e){var s=e.x,i=e.y,u=e.z,a=Math.sqrt(s*s+i*i+u*u);if(!a)return null;1!==a&&(s*=a=1/a,i*=a,u*=a);var n=Math.sin(t),r=Math.cos(t),l=1-r,h=this.values[0],o=this.values[1],v=this.values[2],y=this.values[3],c=this.values[4],f=this.values[5],p=this.values[6],d=this.values[7],x=this.values[8],z=this.values[9],w=this.values[10],b=this.values[11],g=s*s*l+r,m=i*s*l+u*n,M=u*s*l-i*n,j=s*i*l-u*n,O=i*i*l+r,P=u*i*l+s*n,q=s*u*l+i*n,_=i*u*l-s*n,V=u*u*l+r;return this.values[0]=h*g+c*m+x*M,this.values[1]=o*g+f*m+z*M,this.values[2]=v*g+p*m+w*M,this.values[3]=y*g+d*m+b*M,this.values[4]=h*j+c*O+x*P,this.values[5]=o*j+f*O+z*P,this.values[6]=v*j+p*O+w*P,this.values[7]=y*j+d*O+b*P,this.values[8]=h*q+c*_+x*V,this.values[9]=o*q+f*_+z*V,this.values[10]=v*q+p*_+w*V,this.values[11]=y*q+d*_+b*V,this},t.frustum=function(e,s,i,u,a,n){var r=s-e,l=u-i,h=n-a;return new t([2*a/r,0,0,0,0,2*a/l,0,0,(s+e)/r,(u+i)/l,-(n+a)/h,-1,0,0,-n*a*2/h,0])},t.perspective=function(e,s,i,u){var a=i*Math.tan(e*Math.PI/360),n=a*s;return t.frustum(-n,n,-a,a,i,u)},t.orthographic=function(e,s,i,u,a,n){var r=s-e,l=u-i,h=n-a;return new t([2/r,0,0,0,0,2/l,0,0,0,0,-2/h,0,-(e+s)/r,-(u+i)/l,-(n+a)/h,1])},t.lookAt=function(e,s,u){if(void 0===u&&(u=i.default.up),e.equals(s))return this.identity;var a=i.default.difference(e,s).normalize(),n=i.default.cross(u,a).normalize(),r=i.default.cross(a,n).normalize();return new t([n.x,r.x,a.x,0,n.y,r.y,a.y,0,n.z,r.z,a.z,0,-i.default.dot(n,e),-i.default.dot(r,e),-i.default.dot(a,e),1])},t.product=function(e,s,i){void 0===i&&(i=null);var u=e.at(0),a=e.at(1),n=e.at(2),r=e.at(3),l=e.at(4),h=e.at(5),o=e.at(6),v=e.at(7),y=e.at(8),c=e.at(9),f=e.at(10),p=e.at(11),d=e.at(12),x=e.at(13),z=e.at(14),w=e.at(15),b=s.at(0),g=s.at(1),m=s.at(2),M=s.at(3),j=s.at(4),O=s.at(5),P=s.at(6),q=s.at(7),_=s.at(8),V=s.at(9),I=s.at(10),A=s.at(11),F=s.at(12),L=s.at(13),S=s.at(14),k=s.at(15);return i?(i.init([b*u+g*l+m*y+M*d,b*a+g*h+m*c+M*x,b*n+g*o+m*f+M*z,b*r+g*v+m*p+M*w,j*u+O*l+P*y+q*d,j*a+O*h+P*c+q*x,j*n+O*o+P*f+q*z,j*r+O*v+P*p+q*w,_*u+V*l+I*y+A*d,_*a+V*h+I*c+A*x,_*n+V*o+I*f+A*z,_*r+V*v+I*p+A*w,F*u+L*l+S*y+k*d,F*a+L*h+S*c+k*x,F*n+L*o+S*f+k*z,F*r+L*v+S*p+k*w]),i):new t([b*u+g*l+m*y+M*d,b*a+g*h+m*c+M*x,b*n+g*o+m*f+M*z,b*r+g*v+m*p+M*w,j*u+O*l+P*y+q*d,j*a+O*h+P*c+q*x,j*n+O*o+P*f+q*z,j*r+O*v+P*p+q*w,_*u+V*l+I*y+A*d,_*a+V*h+I*c+A*x,_*n+V*o+I*f+A*z,_*r+V*v+I*p+A*w,F*u+L*l+S*y+k*d,F*a+L*h+S*c+k*x,F*n+L*o+S*f+k*z,F*r+L*v+S*p+k*w])},t.identity=(new t).setIdentity(),t}();e.default=r},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(0),u=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(4),t&&(this.xyzw=t)}return Object.defineProperty(t.prototype,"x",{get:function(){return this.values[0]},set:function(t){this.values[0]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"y",{get:function(){return this.values[1]},set:function(t){this.values[1]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"z",{get:function(){return this.values[2]},set:function(t){this.values[2]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"w",{get:function(){return this.values[3]},set:function(t){this.values[3]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xy",{get:function(){return[this.values[0],this.values[1]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xyz",{get:function(){return[this.values[0],this.values[1],this.values[2]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"xyzw",{get:function(){return[this.values[0],this.values[1],this.values[2],this.values[3]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"r",{get:function(){return this.values[0]},set:function(t){this.values[0]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"g",{get:function(){return this.values[1]},set:function(t){this.values[1]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"b",{get:function(){return this.values[2]},set:function(t){this.values[2]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"a",{get:function(){return this.values[3]},set:function(t){this.values[3]=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rg",{get:function(){return[this.values[0],this.values[1]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rgb",{get:function(){return[this.values[0],this.values[1],this.values[2]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rgba",{get:function(){return[this.values[0],this.values[1],this.values[2],this.values[3]]},set:function(t){this.values[0]=t[0],this.values[1]=t[1],this.values[2]=t[2],this.values[3]=t[3]},enumerable:!0,configurable:!0}),t.prototype.at=function(t){return this.values[t]},t.prototype.reset=function(){this.x=0,this.y=0,this.z=0,this.w=0},t.prototype.copy=function(e){return void 0===e&&(e=null),e||(e=new t),e.x=this.x,e.y=this.y,e.z=this.z,e.w=this.w,e},t.prototype.negate=function(t){return void 0===t&&(t=null),t||(t=this),t.x=-this.x,t.y=-this.y,t.z=-this.z,t.w=-this.w,t},t.prototype.equals=function(t,e){return void 0===e&&(e=i.epsilon),!(Math.abs(this.x-t.x)>e)&&(!(Math.abs(this.y-t.y)>e)&&(!(Math.abs(this.z-t.z)>e)&&!(Math.abs(this.w-t.w)>e)))},t.prototype.length=function(){return Math.sqrt(this.squaredLength())},t.prototype.squaredLength=function(){var t=this.x,e=this.y,s=this.z,i=this.w;return t*t+e*e+s*s+i*i},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this},t.prototype.subtract=function(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this},t.prototype.multiply=function(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this},t.prototype.divide=function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this},t.prototype.scale=function(t,e){return void 0===e&&(e=null),e||(e=this),e.x*=t,e.y*=t,e.z*=t,e.w*=t,e},t.prototype.normalize=function(t){void 0===t&&(t=null),t||(t=this);var e=this.length();return 1===e?this:0===e?(t.x*=0,t.y*=0,t.z*=0,t.w*=0,t):(e=1/e,t.x*=e,t.y*=e,t.z*=e,t.w*=e,t)},t.prototype.multiplyMat4=function(t,e){return void 0===e&&(e=null),e||(e=this),t.multiplyVec4(this,e)},t.mix=function(e,s,i,u){return void 0===u&&(u=null),u||(u=new t),u.x=e.x+i*(s.x-e.x),u.y=e.y+i*(s.y-e.y),u.z=e.z+i*(s.z-e.z),u.w=e.w+i*(s.w-e.w),u},t.sum=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x+s.x,i.y=e.y+s.y,i.z=e.z+s.z,i.w=e.w+s.w,i},t.difference=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x-s.x,i.y=e.y-s.y,i.z=e.z-s.z,i.w=e.w-s.w,i},t.product=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x*s.x,i.y=e.y*s.y,i.z=e.z*s.z,i.w=e.w*s.w,i},t.quotient=function(e,s,i){return void 0===i&&(i=null),i||(i=new t),i.x=e.x/s.x,i.y=e.y/s.y,i.z=e.z/s.z,i.w=e.w/s.w,i},t.zero=new t([0,0,0,1]),t}();e.default=u},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(2),u=s(1),a=s(6),n=s(8),r=s(4),l=s(5),h=s(3);e.default={vec2:i.default,vec3:u.default,vec4:a.default,mat2:n.default,mat3:r.default,mat4:l.default,quat:h.default}},function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=s(2),u=s(0),a=function(){function t(t){void 0===t&&(t=null),this.values=new Float32Array(4),t&&this.init(t)}return t.prototype.at=function(t){return this.values[t]},t.prototype.init=function(t){for(var e=0;e<4;e++)this.values[e]=t[e];return this},t.prototype.reset=function(){for(var t=0;t<4;t++)this.values[t]=0},t.prototype.copy=function(e){void 0===e&&(e=null),e||(e=new t);for(var s=0;s<4;s++)e.values[s]=this.values[s];return e},t.prototype.all=function(){for(var t=[],e=0;e<4;e++)t[e]=this.values[e];return t},t.prototype.row=function(t){return[this.values[2*t+0],this.values[2*t+1]]},t.prototype.col=function(t){return[this.values[t],this.values[t+2]]},t.prototype.equals=function(t,e){void 0===e&&(e=u.epsilon);for(var s=0;s<4;s++)if(Math.abs(this.values[s]-t.at(s))>e)return!1;return!0},t.prototype.determinant=function(){return this.values[0]*this.values[3]-this.values[2]*this.values[1]},t.prototype.setIdentity=function(){return this.values[0]=1,this.values[1]=0,this.values[2]=0,this.values[3]=1,this},t.prototype.transpose=function(){var t=this.values[1];return this.values[1]=this.values[2],this.values[2]=t,this},t.prototype.inverse=function(){var t=this.determinant();if(!t)return null;t=1/t;var e=this.values[0];return this.values[0]=t*this.values[3],this.values[1]=t*-this.values[1],this.values[2]=t*-this.values[2],this.values[3]=t*e,this},t.prototype.multiply=function(t){var e=this.values[0],s=this.values[1],i=this.values[2],u=this.values[3];return this.values[0]=e*t.at(0)+s*t.at(2),this.values[1]=e*t.at(1)+s*t.at(3),this.values[2]=i*t.at(0)+u*t.at(2),this.values[3]=i*t.at(1)+u*t.at(3),this},t.prototype.rotate=function(t){var e=this.values[0],s=this.values[1],i=this.values[2],u=this.values[3],a=Math.sin(t),n=Math.cos(t);return this.values[0]=e*n+s*a,this.values[1]=e*-a+s*n,this.values[2]=i*n+u*a,this.values[3]=i*-a+u*n,this},t.prototype.multiplyVec2=function(t,e){void 0===e&&(e=null);var s=t.x,u=t.y;return e?(e.xy=[s*this.values[0]+u*this.values[1],s*this.values[2]+u*this.values[3]],e):new i.default([s*this.values[0]+u*this.values[1],s*this.values[2]+u*this.values[3]])},t.prototype.scale=function(t){var e=this.values[0],s=this.values[1],i=this.values[2],u=this.values[3],a=t.x,n=t.y;return this.values[0]=e*a,this.values[1]=s*n,this.values[2]=i*a,this.values[3]=u*n,this},t.product=function(e,s,i){void 0===i&&(i=null);var u=e.at(0),a=e.at(1),n=e.at(2),r=e.at(3);return i?(i.init([u*s.at(0)+a*s.at(2),u*s.at(1)+a*s.at(3),n*s.at(0)+r*s.at(2),n*s.at(1)+r*s.at(3)]),i):new t([u*s.at(0)+a*s.at(2),u*s.at(1)+a*s.at(3),n*s.at(0)+r*s.at(2),n*s.at(1)+r*s.at(3)])},t.identity=(new t).setIdentity(),t}();e.default=a}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90c20vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHNtLy4vc3JjL2NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvdmVjMy50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvdmVjMi50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvcXVhdC50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvbWF0My50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvbWF0NC50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvdmVjNC50cyIsIndlYnBhY2s6Ly90c20vLi9zcmMvdHNtLnRzIiwid2VicGFjazovL3RzbS8uL3NyYy9tYXQyLnRzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZXBzaWxvbiIsInF1YXRfMSIsImNvbnN0YW50c18xIiwidmVjMyIsInZhbHVlcyIsInRoaXMiLCJGbG9hdDMyQXJyYXkiLCJ4eXoiLCJhdCIsImluZGV4IiwicmVzZXQiLCJ4IiwieSIsInoiLCJjb3B5IiwiZGVzdCIsIm5lZ2F0ZSIsImVxdWFscyIsInZlY3RvciIsInRocmVzaG9sZCIsIk1hdGgiLCJhYnMiLCJsZW5ndGgiLCJzcXJ0Iiwic3F1YXJlZExlbmd0aCIsImFkZCIsInN1YnRyYWN0IiwibXVsdGlwbHkiLCJkaXZpZGUiLCJzY2FsZSIsIm5vcm1hbGl6ZSIsIm11bHRpcGx5QnlNYXQzIiwibWF0cml4IiwibXVsdGlwbHlWZWMzIiwibXVsdGlwbHlCeVF1YXQiLCJxdWF0IiwiY3Jvc3MiLCJ2ZWN0b3IyIiwieDIiLCJ5MiIsInoyIiwiZG90IiwiZGlzdGFuY2UiLCJzcXVhcmVkRGlzdGFuY2UiLCJkaXJlY3Rpb24iLCJtaXgiLCJ0aW1lIiwic3VtIiwiZGlmZmVyZW5jZSIsInByb2R1Y3QiLCJxdW90aWVudCIsInRvUXVhdCIsImRlZmF1bHQiLCJjb3MiLCJzaW4iLCJ3IiwiemVybyIsInVwIiwicmlnaHQiLCJmb3J3YXJkIiwidmVjM18xIiwidmVjMiIsInh5IiwibXVsdGlwbHlNYXQyIiwibXVsdGlwbHlWZWMyIiwibXVsdGlwbHlNYXQzIiwibWF0M18xIiwibWF0NF8xIiwieHl6dyIsInJvbGwiLCJhdGFuMiIsInBpdGNoIiwieWF3IiwiYXNpbiIsInNldElkZW50aXR5IiwiY2FsY3VsYXRlVyIsInExIiwicTIiLCJpbnZlcnNlIiwiaW52RG90IiwiY29uanVnYXRlIiwib3RoZXIiLCJxMXgiLCJxMXkiLCJxMXoiLCJxMXciLCJxMngiLCJxMnkiLCJxMnoiLCJxMnciLCJxeCIsInF5IiwicXoiLCJxdyIsIml4IiwiaXkiLCJpeiIsIml3IiwidG9NYXQzIiwieHgiLCJ4eiIsInl5IiwieXoiLCJ6eiIsInd4Iiwid3kiLCJ3eiIsImluaXQiLCJ0b01hdDQiLCJzaG9ydE1peCIsImswIiwiazEiLCJxMmEiLCJhbmdsZSIsIm9uZU92ZXJTaW4iLCJjb3NIYWxmVGhldGEiLCJoYWxmVGhldGEiLCJhY29zIiwic2luSGFsZlRoZXRhIiwicmF0aW9BIiwicmF0aW9CIiwiZnJvbUF4aXMiLCJheGlzIiwiaWRlbnRpdHkiLCJ2ZWMyXzEiLCJtYXQzIiwiYWxsIiwiZGF0YSIsInJvdyIsImNvbCIsImRldGVybWluYW50IiwiYTAwIiwiYTAxIiwiYTAyIiwiYTEwIiwiYTExIiwiYTEyIiwiYTIwIiwiYTIxIiwiYTIyIiwidHJhbnNwb3NlIiwidGVtcDAxIiwidGVtcDAyIiwidGVtcDEyIiwiZGV0MDEiLCJkZXQxMSIsImRldDIxIiwiZGV0IiwiYjAwIiwiYjAxIiwiYjAyIiwiYjEwIiwiYjExIiwiYjEyIiwiYjIwIiwiYjIxIiwiYjIyIiwicmVzdWx0IiwibTAwIiwibTAxIiwibTAyIiwibTEwIiwibTExIiwibTEyIiwibTIwIiwibTIxIiwibTIyIiwiZm91clhTcXVhcmVkTWludXMxIiwiZm91cllTcXVhcmVkTWludXMxIiwiZm91clpTcXVhcmVkTWludXMxIiwiYmlnZ2VzdEluZGV4IiwiZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxIiwiYmlnZ2VzdFZhbCIsIm11bHQiLCJyb3RhdGUiLCJtMSIsIm0yIiwidmVjNF8xIiwibWF0NCIsImEwMyIsImExMyIsImEyMyIsImEzMCIsImEzMSIsImEzMiIsImEzMyIsInRlbXAwMyIsInRlbXAxMyIsInRlbXAyMyIsImRldDAwIiwiZGV0MDIiLCJkZXQwMyIsImRldDA0IiwiZGV0MDUiLCJkZXQwNiIsImRldDA3IiwiZGV0MDgiLCJkZXQwOSIsImRldDEwIiwiYjAiLCJiMSIsImIyIiwiYjMiLCJtdWx0aXBseVZlYzQiLCJ0b0ludmVyc2VNYXQzIiwidHJhbnNsYXRlIiwiZnJ1c3R1bSIsImxlZnQiLCJib3R0b20iLCJ0b3AiLCJuZWFyIiwiZmFyIiwicmwiLCJ0YiIsImZuIiwicGVyc3BlY3RpdmUiLCJmb3YiLCJhc3BlY3QiLCJ0YW4iLCJQSSIsIm9ydGhvZ3JhcGhpYyIsImxvb2tBdCIsInBvc2l0aW9uIiwidGFyZ2V0IiwiYjAzIiwiYjEzIiwiYjIzIiwiYjMwIiwiYjMxIiwiYjMyIiwiYjMzIiwidmVjNCIsIm11bHRpcGx5TWF0NCIsIm1hdDJfMSIsIm1hdDIiLCJ0ZW1wIl0sIm1hcHBpbmdzIjoib0JBQ0EsSUFBQUEsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQUMsUUFHQSxJQUFBQyxFQUFBSixFQUFBRSxJQUNBRyxF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K0gsRUFBTXlDLEVBQUd4SyxHQUFHLEdBQUtnSSxFQUFNd0MsRUFBR3hLLEdBQUcsR0FDN0JrSSxFQUFNc0MsRUFBR3hLLEdBQUcsR0FBS21JLEVBQU1xQyxFQUFHeEssR0FBRyxHQUM3QmtJLEVBQU1zQyxFQUFHeEssR0FBRyxHQUFLbUksRUFBTXFDLEVBQUd4SyxHQUFHLE1BS2xDa08sRUFBQS9HLFVBQVcsSUFBSStHLEdBQU9oSyxjQUVqQ2dLLEVBN01BLGFBQXFCQSIsImZpbGUiOiJ0c20uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNyk7XG4iLCJleHBvcnQgY29uc3QgZXBzaWxvbiA9IDAuMDAwMDAxO1xuXG5cblxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcbmltcG9ydCBxdWF0IGZyb20gJy4vcXVhdCc7XG5cbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHZlYzMge1xuXG4gICAgcHJpdmF0ZSB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuXG4gICAgZ2V0IHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuICAgIH1cblxuICAgIGdldCB5KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcbiAgICB9XG5cbiAgICBnZXQgeigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMl07XG4gICAgfVxuXG4gICAgZ2V0IHh5KCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgeHl6KCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgeSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHoodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHNldCB4eSh2YWx1ZXM6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcbiAgICB9XG5cbiAgICBzZXQgeHl6KHZhbHVlczogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IG51bWJlcltdID0gbnVsbCkge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLnh5eiA9IHZhbHVlcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGF0KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIHJlc2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICB0aGlzLnogPSAwO1xuICAgIH1cblxuICAgIGNvcHkoZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzMoKTtcblxuICAgICAgICBkZXN0LnggPSB0aGlzLng7XG4gICAgICAgIGRlc3QueSA9IHRoaXMueTtcbiAgICAgICAgZGVzdC56ID0gdGhpcy56O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIG5lZ2F0ZShkZXN0OiB2ZWMzID0gbnVsbCk6IHZlYzMge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSB0aGlzO1xuXG4gICAgICAgIGRlc3QueCA9IC10aGlzLng7XG4gICAgICAgIGRlc3QueSA9IC10aGlzLnk7XG4gICAgICAgIGRlc3QueiA9IC10aGlzLno7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgZXF1YWxzKHZlY3RvcjogdmVjMywgdGhyZXNob2xkID0gZXBzaWxvbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy54IC0gdmVjdG9yLngpID4gdGhyZXNob2xkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnkgLSB2ZWN0b3IueSkgPiB0aHJlc2hvbGQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueiAtIHZlY3Rvci56KSA+IHRocmVzaG9sZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWRMZW5ndGgoKSk7XG4gICAgfVxuXG4gICAgc3F1YXJlZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy54LFxuICAgICAgICAgICAgeSA9IHRoaXMueSxcbiAgICAgICAgICAgIHogPSB0aGlzLno7XG5cbiAgICAgICAgcmV0dXJuICh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuICAgIH1cblxuICAgIGFkZCh2ZWN0b3I6IHZlYzMpOiB2ZWMzIHtcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XG4gICAgICAgIHRoaXMueiArPSB2ZWN0b3IuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdWJ0cmFjdCh2ZWN0b3I6IHZlYzMpOiB2ZWMzIHtcbiAgICAgICAgdGhpcy54IC09IHZlY3Rvci54O1xuICAgICAgICB0aGlzLnkgLT0gdmVjdG9yLnk7XG4gICAgICAgIHRoaXMueiAtPSB2ZWN0b3IuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBtdWx0aXBseSh2ZWN0b3I6IHZlYzMpOiB2ZWMzIHtcbiAgICAgICAgdGhpcy54ICo9IHZlY3Rvci54O1xuICAgICAgICB0aGlzLnkgKj0gdmVjdG9yLnk7XG4gICAgICAgIHRoaXMueiAqPSB2ZWN0b3IuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkaXZpZGUodmVjdG9yOiB2ZWMzKTogdmVjMyB7XG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xuICAgICAgICB0aGlzLnogLz0gdmVjdG9yLno7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc2NhbGUodmFsdWU6IG51bWJlciwgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gdGhpcztcblxuICAgICAgICBkZXN0LnggKj0gdmFsdWU7XG4gICAgICAgIGRlc3QueSAqPSB2YWx1ZTtcbiAgICAgICAgZGVzdC56ICo9IHZhbHVlO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZShkZXN0OiB2ZWMzID0gbnVsbCk6IHZlYzMge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSB0aGlzO1xuXG4gICAgICAgIGxldCBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXG4gICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVzdC54ID0gMDtcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XG4gICAgICAgICAgICBkZXN0LnogPSAwO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcblxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xuICAgICAgICBkZXN0LnogKj0gbGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIG11bHRpcGx5QnlNYXQzKG1hdHJpeDogbWF0MywgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gdGhpcztcblxuICAgICAgICByZXR1cm4gbWF0cml4Lm11bHRpcGx5VmVjMyh0aGlzLCBkZXN0KTtcbiAgICB9XG5cbiAgICBtdWx0aXBseUJ5UXVhdChxdWF0OiBxdWF0LCBkZXN0OiB2ZWMzID0gbnVsbCk6IHZlYzMge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBxdWF0Lm11bHRpcGx5VmVjMyh0aGlzLCBkZXN0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3Jvc3ModmVjdG9yOiB2ZWMzLCB2ZWN0b3IyOiB2ZWMzLCBkZXN0OiB2ZWMzID0gbnVsbCk6IHZlYzMge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgdmVjMygpO1xuXG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueCxcbiAgICAgICAgICAgIHkgPSB2ZWN0b3IueSxcbiAgICAgICAgICAgIHogPSB2ZWN0b3IuejtcblxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueCxcbiAgICAgICAgICAgIHkyID0gdmVjdG9yMi55LFxuICAgICAgICAgICAgejIgPSB2ZWN0b3IyLno7XG5cbiAgICAgICAgZGVzdC54ID0geSAqIHoyIC0geiAqIHkyO1xuICAgICAgICBkZXN0LnkgPSB6ICogeDIgLSB4ICogejI7XG4gICAgICAgIGRlc3QueiA9IHggKiB5MiAtIHkgKiB4MjtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZG90KHZlY3RvcjogdmVjMywgdmVjdG9yMjogdmVjMyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueCxcbiAgICAgICAgICAgIHkgPSB2ZWN0b3IueSxcbiAgICAgICAgICAgIHogPSB2ZWN0b3IuejtcblxuICAgICAgICBjb25zdCB4MiA9IHZlY3RvcjIueCxcbiAgICAgICAgICAgIHkyID0gdmVjdG9yMi55LFxuICAgICAgICAgICAgejIgPSB2ZWN0b3IyLno7XG5cbiAgICAgICAgcmV0dXJuICh4ICogeDIgKyB5ICogeTIgKyB6ICogejIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXN0YW5jZSh2ZWN0b3I6IHZlYzMsIHZlY3RvcjI6IHZlYzMpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB4ID0gdmVjdG9yMi54IC0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yMi55IC0gdmVjdG9yLnksXG4gICAgICAgICAgICB6ID0gdmVjdG9yMi56IC0gdmVjdG9yLno7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWREaXN0YW5jZSh2ZWN0b3IsIHZlY3RvcjIpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3F1YXJlZERpc3RhbmNlKHZlY3RvcjogdmVjMywgdmVjdG9yMjogdmVjMyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IyLnggLSB2ZWN0b3IueCxcbiAgICAgICAgICAgIHkgPSB2ZWN0b3IyLnkgLSB2ZWN0b3IueSxcbiAgICAgICAgICAgIHogPSB2ZWN0b3IyLnogLSB2ZWN0b3IuejtcblxuICAgICAgICByZXR1cm4gKHggKiB4ICsgeSAqIHkgKyB6ICogeik7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpcmVjdGlvbih2ZWN0b3I6IHZlYzMsIHZlY3RvcjI6IHZlYzMsIGRlc3Q6IHZlYzMgPSBudWxsKTogdmVjMyB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMzKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54LFxuICAgICAgICAgICAgeSA9IHZlY3Rvci55IC0gdmVjdG9yMi55LFxuICAgICAgICAgICAgeiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xuXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcblxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZXN0LnggPSAwO1xuICAgICAgICAgICAgZGVzdC55ID0gMDtcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XG5cbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcblxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xuICAgICAgICBkZXN0LnogPSB6ICogbGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBtaXgodmVjdG9yOiB2ZWMzLCB2ZWN0b3IyOiB2ZWMzLCB0aW1lOiBudW1iZXIsIGRlc3Q6IHZlYzMgPSBudWxsKTogdmVjMyB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMzKCk7XG5cbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKyB0aW1lICogKHZlY3RvcjIueCAtIHZlY3Rvci54KTtcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB0aW1lICogKHZlY3RvcjIueSAtIHZlY3Rvci55KTtcbiAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogKyB0aW1lICogKHZlY3RvcjIueiAtIHZlY3Rvci56KTtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3VtKHZlY3RvcjogdmVjMywgdmVjdG9yMjogdmVjMywgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzMoKTtcblxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICsgdmVjdG9yMi56O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHZlY3RvcjogdmVjMywgdmVjdG9yMjogdmVjMywgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzMoKTtcblxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAtIHZlY3RvcjIueDtcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnk7XG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56IC0gdmVjdG9yMi56O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9kdWN0KHZlY3RvcjogdmVjMywgdmVjdG9yMjogdmVjMywgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzMoKTtcblxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAqIHZlY3RvcjIueDtcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKiB2ZWN0b3IyLnk7XG4gICAgICAgIGRlc3QueiA9IHZlY3Rvci56ICogdmVjdG9yMi56O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3I6IHZlYzMsIHZlY3RvcjI6IHZlYzMsIGRlc3Q6IHZlYzMgPSBudWxsKTogdmVjMyB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMzKCk7XG5cbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAvIHZlY3RvcjIuejtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICB0b1F1YXQoZGVzdDogcXVhdCA9IG51bGwpOiBxdWF0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHF1YXQoKTtcblxuICAgICAgICBjb25zdCBjID0gbmV3IHZlYzMoKTtcbiAgICAgICAgY29uc3QgcyA9IG5ldyB2ZWMzKCk7XG5cbiAgICAgICAgYy54ID0gTWF0aC5jb3ModGhpcy54ICogMC41KTtcbiAgICAgICAgcy54ID0gTWF0aC5zaW4odGhpcy54ICogMC41KTtcblxuICAgICAgICBjLnkgPSBNYXRoLmNvcyh0aGlzLnkgKiAwLjUpO1xuICAgICAgICBzLnkgPSBNYXRoLnNpbih0aGlzLnkgKiAwLjUpO1xuXG4gICAgICAgIGMueiA9IE1hdGguY29zKHRoaXMueiAqIDAuNSk7XG4gICAgICAgIHMueiA9IE1hdGguc2luKHRoaXMueiAqIDAuNSk7XG5cbiAgICAgICAgZGVzdC54ID0gcy54ICogYy55ICogYy56IC0gYy54ICogcy55ICogcy56O1xuICAgICAgICBkZXN0LnkgPSBjLnggKiBzLnkgKiBjLnogKyBzLnggKiBjLnkgKiBzLno7XG4gICAgICAgIGRlc3QueiA9IGMueCAqIGMueSAqIHMueiAtIHMueCAqIHMueSAqIGMuejtcbiAgICAgICAgZGVzdC53ID0gYy54ICogYy55ICogYy56ICsgcy54ICogcy55ICogcy56O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyB6ZXJvID0gbmV3IHZlYzMoWzAsIDAsIDBdKTtcblxuICAgIHN0YXRpYyB1cCA9IG5ldyB2ZWMzKFswLCAxLCAwXSk7XG4gICAgc3RhdGljIHJpZ2h0ID0gbmV3IHZlYzMoWzEsIDAsIDBdKTtcbiAgICBzdGF0aWMgZm9yd2FyZCA9IG5ldyB2ZWMzKFswLCAwLCAxXSk7XG59XG4iLCJpbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xuaW1wb3J0IG1hdDIgZnJvbSAnLi9tYXQyJztcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XG5cbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHZlYzIge1xuXG4gICAgcHJpdmF0ZSB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xuXG4gICAgZ2V0IHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuICAgIH1cblxuICAgIGdldCB5KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcbiAgICB9XG5cbiAgICBnZXQgeHkoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgeSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHh5KHZhbHVlczogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHZhbHVlczogbnVtYmVyW10gPSBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMueHkgPSB2YWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhdChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICB9XG5cbiAgICBjb3B5KGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMyKCk7XG5cbiAgICAgICAgZGVzdC54ID0gdGhpcy54O1xuICAgICAgICBkZXN0LnkgPSB0aGlzLnk7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgbmVnYXRlKGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IHRoaXM7XG5cbiAgICAgICAgZGVzdC54ID0gLXRoaXMueDtcbiAgICAgICAgZGVzdC55ID0gLXRoaXMueTtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBlcXVhbHModmVjdG9yOiB2ZWMyLCB0aHJlc2hvbGQgPSBlcHNpbG9uKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnggLSB2ZWN0b3IueCkgPiB0aHJlc2hvbGQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueSAtIHZlY3Rvci55KSA+IHRocmVzaG9sZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWRMZW5ndGgoKSk7XG4gICAgfVxuXG4gICAgc3F1YXJlZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy54LFxuICAgICAgICAgICAgeSA9IHRoaXMueTtcblxuICAgICAgICByZXR1cm4gKHggKiB4ICsgeSAqIHkpO1xuICAgIH1cblxuICAgIGFkZCh2ZWN0b3I6IHZlYzIpOiB2ZWMyIHtcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3VidHJhY3QodmVjdG9yOiB2ZWMyKTogdmVjMiB7XG4gICAgICAgIHRoaXMueCAtPSB2ZWN0b3IueDtcbiAgICAgICAgdGhpcy55IC09IHZlY3Rvci55O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG11bHRpcGx5KHZlY3RvcjogdmVjMik6IHZlYzIge1xuICAgICAgICB0aGlzLnggKj0gdmVjdG9yLng7XG4gICAgICAgIHRoaXMueSAqPSB2ZWN0b3IueTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkaXZpZGUodmVjdG9yOiB2ZWMyKTogdmVjMiB7XG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNjYWxlKHZhbHVlOiBudW1iZXIsIGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IHRoaXM7XG5cbiAgICAgICAgZGVzdC54ICo9IHZhbHVlO1xuICAgICAgICBkZXN0LnkgKj0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplKGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IHRoaXM7XG5cbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG5cbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZXN0LnggPSAwO1xuICAgICAgICAgICAgZGVzdC55ID0gMDtcblxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGggPSAxLjAgLyBsZW5ndGg7XG5cbiAgICAgICAgZGVzdC54ICo9IGxlbmd0aDtcbiAgICAgICAgZGVzdC55ICo9IGxlbmd0aDtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBtdWx0aXBseU1hdDIobWF0cml4OiBtYXQyLCBkZXN0OiB2ZWMyID0gbnVsbCk6IHZlYzIge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBtYXRyaXgubXVsdGlwbHlWZWMyKHRoaXMsIGRlc3QpO1xuICAgIH1cblxuICAgIG11bHRpcGx5TWF0MyhtYXRyaXg6IG1hdDMsIGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzIodGhpcywgZGVzdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyb3NzKHZlY3RvcjogdmVjMiwgdmVjdG9yMjogdmVjMiwgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzMoKTtcblxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yLnk7XG5cbiAgICAgICAgY29uc3QgeDIgPSB2ZWN0b3IyLngsXG4gICAgICAgICAgICB5MiA9IHZlY3RvcjIueTtcblxuICAgICAgICBjb25zdCB6ID0geCAqIHkyIC0geSAqIHgyO1xuXG4gICAgICAgIGRlc3QueCA9IDA7XG4gICAgICAgIGRlc3QueSA9IDA7XG4gICAgICAgIGRlc3QueiA9IHo7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGRvdCh2ZWN0b3I6IHZlYzIsIHZlY3RvcjI6IHZlYzIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHZlY3Rvci54ICogdmVjdG9yMi54ICsgdmVjdG9yLnkgKiB2ZWN0b3IyLnkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXN0YW5jZSh2ZWN0b3I6IHZlYzIsIHZlY3RvcjI6IHZlYzIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuc3F1YXJlZERpc3RhbmNlKHZlY3RvciwgdmVjdG9yMikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzcXVhcmVkRGlzdGFuY2UodmVjdG9yOiB2ZWMyLCB2ZWN0b3IyOiB2ZWMyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgeCA9IHZlY3RvcjIueCAtIHZlY3Rvci54LFxuICAgICAgICAgICAgeSA9IHZlY3RvcjIueSAtIHZlY3Rvci55O1xuXG4gICAgICAgIHJldHVybiAoeCAqIHggKyB5ICogeSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpcmVjdGlvbih2ZWN0b3I6IHZlYzIsIHZlY3RvcjI6IHZlYzIsIGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54IC0gdmVjdG9yMi54LFxuICAgICAgICAgICAgeSA9IHZlY3Rvci55IC0gdmVjdG9yMi55O1xuXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG5cbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVzdC54ID0gMDtcbiAgICAgICAgICAgIGRlc3QueSA9IDA7XG5cbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGVuZ3RoID0gMSAvIGxlbmd0aDtcblxuICAgICAgICBkZXN0LnggPSB4ICogbGVuZ3RoO1xuICAgICAgICBkZXN0LnkgPSB5ICogbGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBtaXgodmVjdG9yOiB2ZWMyLCB2ZWN0b3IyOiB2ZWMyLCB0aW1lOiBudW1iZXIsIGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMyKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54LFxuICAgICAgICAgICAgeSA9IHZlY3Rvci55O1xuXG4gICAgICAgIGNvbnN0IHgyID0gdmVjdG9yMi54LFxuICAgICAgICAgICAgeTIgPSB2ZWN0b3IyLnk7XG5cbiAgICAgICAgZGVzdC54ID0geCArIHRpbWUgKiAoeDIgLSB4KTtcbiAgICAgICAgZGVzdC55ID0geSArIHRpbWUgKiAoeTIgLSB5KTtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3VtKHZlY3RvcjogdmVjMiwgdmVjdG9yMjogdmVjMiwgZGVzdDogdmVjMiA9IG51bGwpOiB2ZWMyIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzIoKTtcblxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHZlY3RvcjIueDtcbiAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnk7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpZmZlcmVuY2UodmVjdG9yOiB2ZWMyLCB2ZWN0b3IyOiB2ZWMyLCBkZXN0OiB2ZWMyID0gbnVsbCk6IHZlYzIge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgdmVjMigpO1xuXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54O1xuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSAtIHZlY3RvcjIueTtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvZHVjdCh2ZWN0b3I6IHZlYzIsIHZlY3RvcjI6IHZlYzIsIGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMyKCk7XG5cbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggKiB2ZWN0b3IyLng7XG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55ICogdmVjdG9yMi55O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBxdW90aWVudCh2ZWN0b3I6IHZlYzIsIHZlY3RvcjI6IHZlYzIsIGRlc3Q6IHZlYzIgPSBudWxsKTogdmVjMiB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWMyKCk7XG5cbiAgICAgICAgZGVzdC54ID0gdmVjdG9yLnggLyB2ZWN0b3IyLng7XG4gICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyB6ZXJvID0gbmV3IHZlYzIoWzAsIDBdKTtcblxufVxuXG4iLCJpbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xuaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XG5cbmltcG9ydCB7IGVwc2lsb24gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHF1YXQge1xuXG4gICAgcHJpdmF0ZSB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xuXG4gICAgZ2V0IHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuICAgIH1cblxuICAgIGdldCB5KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1sxXTtcbiAgICB9XG5cbiAgICBnZXQgeigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMl07XG4gICAgfVxuXG4gICAgZ2V0IHcoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzNdO1xuICAgIH1cblxuICAgIGdldCB4eSgpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IHh5eigpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgeHl6dygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1szXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgeSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHoodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHNldCB3KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgeHkodmFsdWVzOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XG4gICAgfVxuXG4gICAgc2V0IHh5eih2YWx1ZXM6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XG4gICAgfVxuXG4gICAgc2V0IHh5encodmFsdWVzOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlc1szXTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IG51bWJlcltdID0gbnVsbCkge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLnh5encgPSB2YWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhdChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvcHkoZGVzdDogcXVhdCA9IG51bGwpOiBxdWF0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHF1YXQoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHJvbGwoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueCxcbiAgICAgICAgICAgIHkgPSB0aGlzLnksXG4gICAgICAgICAgICB6ID0gdGhpcy56LFxuICAgICAgICAgICAgdyA9IHRoaXMudztcblxuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMigyLjAgKiAoeCAqIHkgKyB3ICogeiksIHcgKiB3ICsgeCAqIHggLSB5ICogeSAtIHogKiB6KTtcbiAgICB9XG5cbiAgICBwaXRjaCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy54LFxuICAgICAgICAgICAgeSA9IHRoaXMueSxcbiAgICAgICAgICAgIHogPSB0aGlzLnosXG4gICAgICAgICAgICB3ID0gdGhpcy53O1xuXG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKDIuMCAqICh5ICogeiArIHcgKiB4KSwgdyAqIHcgLSB4ICogeCAtIHkgKiB5ICsgeiAqIHopO1xuICAgIH1cblxuICAgIHlhdygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5hc2luKDIuMCAqICh0aGlzLnggKiB0aGlzLnogLSB0aGlzLncgKiB0aGlzLnkpKTtcbiAgICB9XG5cbiAgICBlcXVhbHModmVjdG9yOiBxdWF0LCB0aHJlc2hvbGQgPSBlcHNpbG9uKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSB2ZWN0b3IuYXQoaSkpID4gdGhyZXNob2xkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNldElkZW50aXR5KCk6IHF1YXQge1xuICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICB0aGlzLnogPSAwO1xuICAgICAgICB0aGlzLncgPSAxO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVcoKTogcXVhdCB7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLngsXG4gICAgICAgICAgICB5ID0gdGhpcy55LFxuICAgICAgICAgICAgeiA9IHRoaXMuejtcblxuICAgICAgICB0aGlzLncgPSAtKE1hdGguc3FydChNYXRoLmFicygxLjAgLSB4ICogeCAtIHkgKiB5IC0geiAqIHopKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGRvdChxMTogcXVhdCwgcTI6IHF1YXQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcTEueCAqIHEyLnggKyBxMS55ICogcTIueSArIHExLnogKiBxMi56ICsgcTEudyAqIHEyLnc7XG4gICAgfVxuXG4gICAgaW52ZXJzZSgpOiBxdWF0IHtcbiAgICAgICAgY29uc3QgZG90ID0gcXVhdC5kb3QodGhpcywgdGhpcyk7XG5cbiAgICAgICAgaWYgKCFkb3QpIHtcbiAgICAgICAgICAgIHRoaXMueHl6dyA9IFswLCAwLCAwLCAwXTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnZEb3QgPSBkb3QgPyAxLjAgLyBkb3QgOiAwO1xuXG4gICAgICAgIHRoaXMueCAqPSAtaW52RG90O1xuICAgICAgICB0aGlzLnkgKj0gLWludkRvdDtcbiAgICAgICAgdGhpcy56ICo9IC1pbnZEb3Q7XG4gICAgICAgIHRoaXMudyAqPSBpbnZEb3Q7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uanVnYXRlKCk6IHF1YXQge1xuICAgICAgICB0aGlzLnZhbHVlc1swXSAqPSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gKj0gLTE7XG4gICAgICAgIHRoaXMudmFsdWVzWzJdICo9IC0xO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy54LFxuICAgICAgICAgICAgeSA9IHRoaXMueSxcbiAgICAgICAgICAgIHogPSB0aGlzLnosXG4gICAgICAgICAgICB3ID0gdGhpcy53O1xuXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZShkZXN0OiBxdWF0ID0gbnVsbCk6IHF1YXQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLngsXG4gICAgICAgICAgICB5ID0gdGhpcy55LFxuICAgICAgICAgICAgeiA9IHRoaXMueixcbiAgICAgICAgICAgIHcgPSB0aGlzLnc7XG5cbiAgICAgICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xuXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICBkZXN0LnggPSAwO1xuICAgICAgICAgICAgZGVzdC55ID0gMDtcbiAgICAgICAgICAgIGRlc3QueiA9IDA7XG4gICAgICAgICAgICBkZXN0LncgPSAwO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XG5cbiAgICAgICAgZGVzdC54ID0geCAqIGxlbmd0aDtcbiAgICAgICAgZGVzdC55ID0geSAqIGxlbmd0aDtcbiAgICAgICAgZGVzdC56ID0geiAqIGxlbmd0aDtcbiAgICAgICAgZGVzdC53ID0gdyAqIGxlbmd0aDtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBhZGQob3RoZXI6IHF1YXQpOiBxdWF0IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldICs9IG90aGVyLmF0KGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHkob3RoZXI6IHF1YXQpOiBxdWF0IHtcbiAgICAgICAgY29uc3QgcTF4ID0gdGhpcy52YWx1ZXNbMF0sXG4gICAgICAgICAgICBxMXkgPSB0aGlzLnZhbHVlc1sxXSxcbiAgICAgICAgICAgIHExeiA9IHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgcTF3ID0gdGhpcy52YWx1ZXNbM107XG5cbiAgICAgICAgY29uc3QgcTJ4ID0gb3RoZXIueCxcbiAgICAgICAgICAgIHEyeSA9IG90aGVyLnksXG4gICAgICAgICAgICBxMnogPSBvdGhlci56LFxuICAgICAgICAgICAgcTJ3ID0gb3RoZXIudztcblxuICAgICAgICB0aGlzLnggPSBxMXggKiBxMncgKyBxMXcgKiBxMnggKyBxMXkgKiBxMnogLSBxMXogKiBxMnk7XG4gICAgICAgIHRoaXMueSA9IHExeSAqIHEydyArIHExdyAqIHEyeSArIHExeiAqIHEyeCAtIHExeCAqIHEyejtcbiAgICAgICAgdGhpcy56ID0gcTF6ICogcTJ3ICsgcTF3ICogcTJ6ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xuICAgICAgICB0aGlzLncgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHlWZWMzKHZlY3RvcjogdmVjMywgZGVzdDogdmVjMyA9IG51bGwpOiB2ZWMzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzMoKTtcblxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yLnksXG4gICAgICAgICAgICB6ID0gdmVjdG9yLno7XG5cbiAgICAgICAgY29uc3QgcXggPSB0aGlzLngsXG4gICAgICAgICAgICBxeSA9IHRoaXMueSxcbiAgICAgICAgICAgIHF6ID0gdGhpcy56LFxuICAgICAgICAgICAgcXcgPSB0aGlzLnc7XG5cbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHksXG4gICAgICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcbiAgICAgICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxuICAgICAgICAgICAgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuXG4gICAgICAgIGRlc3QueCA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XG4gICAgICAgIGRlc3QueSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XG4gICAgICAgIGRlc3QueiA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgdG9NYXQzKGRlc3Q6IG1hdDMgPSBudWxsKTogbWF0MyB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyBtYXQzKCk7XG5cbiAgICAgICAgY29uc3QgeCA9IHRoaXMueCxcbiAgICAgICAgICAgIHkgPSB0aGlzLnksXG4gICAgICAgICAgICB6ID0gdGhpcy56LFxuICAgICAgICAgICAgdyA9IHRoaXMudztcblxuICAgICAgICBjb25zdCB4MiA9IHggKyB4LFxuICAgICAgICAgICAgeTIgPSB5ICsgeSxcbiAgICAgICAgICAgIHoyID0geiArIHo7XG5cbiAgICAgICAgY29uc3QgeHggPSB4ICogeDIsXG4gICAgICAgICAgICB4eSA9IHggKiB5MixcbiAgICAgICAgICAgIHh6ID0geCAqIHoyLFxuICAgICAgICAgICAgeXkgPSB5ICogeTIsXG4gICAgICAgICAgICB5eiA9IHkgKiB6MixcbiAgICAgICAgICAgIHp6ID0geiAqIHoyLFxuICAgICAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgICAgICB3eSA9IHcgKiB5MixcbiAgICAgICAgICAgIHd6ID0gdyAqIHoyO1xuXG4gICAgICAgIGRlc3QuaW5pdChbXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxuICAgICAgICAgICAgeHkgKyB3eixcbiAgICAgICAgICAgIHh6IC0gd3ksXG5cbiAgICAgICAgICAgIHh5IC0gd3osXG4gICAgICAgICAgICAxIC0gKHh4ICsgenopLFxuICAgICAgICAgICAgeXogKyB3eCxcblxuICAgICAgICAgICAgeHogKyB3eSxcbiAgICAgICAgICAgIHl6IC0gd3gsXG4gICAgICAgICAgICAxIC0gKHh4ICsgeXkpXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHRvTWF0NChkZXN0OiBtYXQ0ID0gbnVsbCk6IG1hdDQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgbWF0NCgpO1xuXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLngsXG4gICAgICAgICAgICB5ID0gdGhpcy55LFxuICAgICAgICAgICAgeiA9IHRoaXMueixcbiAgICAgICAgICAgIHcgPSB0aGlzLncsXG5cbiAgICAgICAgICAgIHgyID0geCArIHgsXG4gICAgICAgICAgICB5MiA9IHkgKyB5LFxuICAgICAgICAgICAgejIgPSB6ICsgeixcblxuICAgICAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgICAgICB4eSA9IHggKiB5MixcbiAgICAgICAgICAgIHh6ID0geCAqIHoyLFxuICAgICAgICAgICAgeXkgPSB5ICogeTIsXG4gICAgICAgICAgICB5eiA9IHkgKiB6MixcbiAgICAgICAgICAgIHp6ID0geiAqIHoyLFxuICAgICAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgICAgICB3eSA9IHcgKiB5MixcbiAgICAgICAgICAgIHd6ID0gdyAqIHoyO1xuXG4gICAgICAgIGRlc3QuaW5pdChbXG4gICAgICAgICAgICAxIC0gKHl5ICsgenopLFxuICAgICAgICAgICAgeHkgKyB3eixcbiAgICAgICAgICAgIHh6IC0gd3ksXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICB4eSAtIHd6LFxuICAgICAgICAgICAgMSAtICh4eCArIHp6KSxcbiAgICAgICAgICAgIHl6ICsgd3gsXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICB4eiArIHd5LFxuICAgICAgICAgICAgeXogLSB3eCxcbiAgICAgICAgICAgIDEgLSAoeHggKyB5eSksXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBzdW0ocTE6IHF1YXQsIHEyOiBxdWF0LCBkZXN0OiBxdWF0ID0gbnVsbCk6IHF1YXQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgcXVhdCgpO1xuXG4gICAgICAgIGRlc3QueCA9IHExLnggKyBxMi54O1xuICAgICAgICBkZXN0LnkgPSBxMS55ICsgcTIueTtcbiAgICAgICAgZGVzdC56ID0gcTEueiArIHEyLno7XG4gICAgICAgIGRlc3QudyA9IHExLncgKyBxMi53O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9kdWN0KHExOiBxdWF0LCBxMjogcXVhdCwgZGVzdDogcXVhdCA9IG51bGwpOiBxdWF0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHF1YXQoKTtcblxuICAgICAgICBjb25zdCBxMXggPSBxMS54LFxuICAgICAgICAgICAgcTF5ID0gcTEueSxcbiAgICAgICAgICAgIHExeiA9IHExLnosXG4gICAgICAgICAgICBxMXcgPSBxMS53LFxuXG4gICAgICAgICAgICBxMnggPSBxMi54LFxuICAgICAgICAgICAgcTJ5ID0gcTIueSxcbiAgICAgICAgICAgIHEyeiA9IHEyLnosXG4gICAgICAgICAgICBxMncgPSBxMi53O1xuXG4gICAgICAgIGRlc3QueCA9IHExeCAqIHEydyArIHExdyAqIHEyeCArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcbiAgICAgICAgZGVzdC55ID0gcTF5ICogcTJ3ICsgcTF3ICogcTJ5ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xuICAgICAgICBkZXN0LnogPSBxMXogKiBxMncgKyBxMXcgKiBxMnogKyBxMXggKiBxMnkgLSBxMXkgKiBxMng7XG4gICAgICAgIGRlc3QudyA9IHExdyAqIHEydyAtIHExeCAqIHEyeCAtIHExeSAqIHEyeSAtIHExeiAqIHEyejtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3Jvc3MocTE6IHF1YXQsIHEyOiBxdWF0LCBkZXN0OiBxdWF0ID0gbnVsbCk6IHF1YXQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgcXVhdCgpO1xuXG4gICAgICAgIGNvbnN0IHExeCA9IHExLngsXG4gICAgICAgICAgICBxMXkgPSBxMS55LFxuICAgICAgICAgICAgcTF6ID0gcTEueixcbiAgICAgICAgICAgIHExdyA9IHExLncsXG5cbiAgICAgICAgICAgIHEyeCA9IHEyLngsXG4gICAgICAgICAgICBxMnkgPSBxMi55LFxuICAgICAgICAgICAgcTJ6ID0gcTIueixcbiAgICAgICAgICAgIHEydyA9IHEyLnc7XG5cbiAgICAgICAgZGVzdC54ID0gcTF3ICogcTJ6ICsgcTF6ICogcTJ3ICsgcTF4ICogcTJ5IC0gcTF5ICogcTJ4O1xuICAgICAgICBkZXN0LnkgPSBxMXcgKiBxMncgLSBxMXggKiBxMnggLSBxMXkgKiBxMnkgLSBxMXogKiBxMno7XG4gICAgICAgIGRlc3QueiA9IHExdyAqIHEyeCArIHExeCAqIHEydyArIHExeSAqIHEyeiAtIHExeiAqIHEyeTtcbiAgICAgICAgZGVzdC53ID0gcTF3ICogcTJ5ICsgcTF5ICogcTJ3ICsgcTF6ICogcTJ4IC0gcTF4ICogcTJ6O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBzaG9ydE1peChxMTogcXVhdCwgcTI6IHF1YXQsIHRpbWU6IG51bWJlciwgZGVzdDogcXVhdCA9IG51bGwpOiBxdWF0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHF1YXQoKTtcblxuICAgICAgICBpZiAodGltZSA8PSAwLjApIHtcbiAgICAgICAgICAgIGRlc3QueHl6dyA9IHExLnh5enc7XG5cbiAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWUgPj0gMS4wKSB7XG4gICAgICAgICAgICBkZXN0Lnh5encgPSBxMi54eXp3O1xuXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3MgPSBxdWF0LmRvdChxMSwgcTIpLFxuICAgICAgICAgICAgcTJhID0gcTIuY29weSgpO1xuXG4gICAgICAgIGlmIChjb3MgPCAwLjApIHtcbiAgICAgICAgICAgIHEyYS5pbnZlcnNlKCk7XG4gICAgICAgICAgICBjb3MgPSAtY29zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGswOiBudW1iZXIsXG4gICAgICAgICAgICBrMTogbnVtYmVyO1xuXG4gICAgICAgIGlmIChjb3MgPiAwLjk5OTkpIHtcbiAgICAgICAgICAgIGswID0gMSAtIHRpbWU7XG4gICAgICAgICAgICBrMSA9IDAgKyB0aW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2luOiBudW1iZXIgPSBNYXRoLnNxcnQoMSAtIGNvcyAqIGNvcyk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZTogbnVtYmVyID0gTWF0aC5hdGFuMihzaW4sIGNvcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9uZU92ZXJTaW46IG51bWJlciA9IDEgLyBzaW47XG5cbiAgICAgICAgICAgIGswID0gTWF0aC5zaW4oKDEgLSB0aW1lKSAqIGFuZ2xlKSAqIG9uZU92ZXJTaW47XG4gICAgICAgICAgICBrMSA9IE1hdGguc2luKCgwICsgdGltZSkgKiBhbmdsZSkgKiBvbmVPdmVyU2luO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdC54ID0gazAgKiBxMS54ICsgazEgKiBxMmEueDtcbiAgICAgICAgZGVzdC55ID0gazAgKiBxMS55ICsgazEgKiBxMmEueTtcbiAgICAgICAgZGVzdC56ID0gazAgKiBxMS56ICsgazEgKiBxMmEuejtcbiAgICAgICAgZGVzdC53ID0gazAgKiBxMS53ICsgazEgKiBxMmEudztcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWl4KHExOiBxdWF0LCBxMjogcXVhdCwgdGltZTogbnVtYmVyLCBkZXN0OiBxdWF0ID0gbnVsbCk6IHF1YXQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgcXVhdCgpO1xuXG4gICAgICAgIGNvbnN0IGNvc0hhbGZUaGV0YSA9IHExLnggKiBxMi54ICsgcTEueSAqIHEyLnkgKyBxMS56ICogcTIueiArIHExLncgKiBxMi53O1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhjb3NIYWxmVGhldGEpID49IDEuMCkge1xuICAgICAgICAgICAgZGVzdC54eXp3ID0gcTEueHl6dztcblxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYWxmVGhldGEgPSBNYXRoLmFjb3MoY29zSGFsZlRoZXRhKSxcbiAgICAgICAgICAgIHNpbkhhbGZUaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NIYWxmVGhldGEgKiBjb3NIYWxmVGhldGEpO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyhzaW5IYWxmVGhldGEpIDwgMC4wMDEpIHtcbiAgICAgICAgICAgIGRlc3QueCA9IHExLnggKiAwLjUgKyBxMi54ICogMC41O1xuICAgICAgICAgICAgZGVzdC55ID0gcTEueSAqIDAuNSArIHEyLnkgKiAwLjU7XG4gICAgICAgICAgICBkZXN0LnogPSBxMS56ICogMC41ICsgcTIueiAqIDAuNTtcbiAgICAgICAgICAgIGRlc3QudyA9IHExLncgKiAwLjUgKyBxMi53ICogMC41O1xuXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhdGlvQSA9IE1hdGguc2luKCgxIC0gdGltZSkgKiBoYWxmVGhldGEpIC8gc2luSGFsZlRoZXRhLFxuICAgICAgICAgICAgcmF0aW9CID0gTWF0aC5zaW4odGltZSAqIGhhbGZUaGV0YSkgLyBzaW5IYWxmVGhldGE7XG5cbiAgICAgICAgZGVzdC54ID0gcTEueCAqIHJhdGlvQSArIHEyLnggKiByYXRpb0I7XG4gICAgICAgIGRlc3QueSA9IHExLnkgKiByYXRpb0EgKyBxMi55ICogcmF0aW9CO1xuICAgICAgICBkZXN0LnogPSBxMS56ICogcmF0aW9BICsgcTIueiAqIHJhdGlvQjtcbiAgICAgICAgZGVzdC53ID0gcTEudyAqIHJhdGlvQSArIHEyLncgKiByYXRpb0I7XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21BeGlzKGF4aXM6IHZlYzMsIGFuZ2xlOiBudW1iZXIsIGRlc3Q6IHF1YXQgPSBudWxsKTogcXVhdCB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyBxdWF0KCk7XG5cbiAgICAgICAgYW5nbGUgKj0gMC41O1xuICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG5cbiAgICAgICAgZGVzdC54ID0gYXhpcy54ICogc2luO1xuICAgICAgICBkZXN0LnkgPSBheGlzLnkgKiBzaW47XG4gICAgICAgIGRlc3QueiA9IGF4aXMueiAqIHNpbjtcbiAgICAgICAgZGVzdC53ID0gTWF0aC5jb3MoYW5nbGUpO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBpZGVudGl0eSA9IG5ldyBxdWF0KCkuc2V0SWRlbnRpdHkoKTtcblxufVxuXG5cblxuIiwiaW1wb3J0IHZlYzIgZnJvbSAnLi92ZWMyJztcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XG5pbXBvcnQgbWF0NCBmcm9tICcuL21hdDQnO1xuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcblxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgbWF0MyB7XG5cbiAgICBwcml2YXRlIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoOSk7XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IG51bWJlcltdID0gbnVsbCkge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLmluaXQodmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGF0KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIGluaXQodmFsdWVzOiBudW1iZXJbXSk6IG1hdDMge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSB2YWx1ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA5OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvcHkoZGVzdDogbWF0MyA9IG51bGwpOiBtYXQzIHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IG1hdDMoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGFsbCgpOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhW2ldID0gdGhpcy52YWx1ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICByb3coaW5kZXg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogMyArIDBdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAzICsgMV0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDMgKyAyXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGNvbChpbmRleDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXhdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKyAzXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICsgNl1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBlcXVhbHMobWF0cml4OiBtYXQzLCB0aHJlc2hvbGQgPSBlcHNpbG9uKTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSBtYXRyaXguYXQoaSkpID4gdGhyZXNob2xkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRldGVybWluYW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdLCBhMDEgPSB0aGlzLnZhbHVlc1sxXSwgYTAyID0gdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICBhMTAgPSB0aGlzLnZhbHVlc1szXSwgYTExID0gdGhpcy52YWx1ZXNbNF0sIGExMiA9IHRoaXMudmFsdWVzWzVdLFxuICAgICAgICAgICAgYTIwID0gdGhpcy52YWx1ZXNbNl0sIGEyMSA9IHRoaXMudmFsdWVzWzddLCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcblxuICAgICAgICBjb25zdCBkZXQwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcbiAgICAgICAgICAgIGRldDExID0gLWEyMiAqIGExMCArIGExMiAqIGEyMCxcbiAgICAgICAgICAgIGRldDIxID0gYTIxICogYTEwIC0gYTExICogYTIwO1xuXG4gICAgICAgIHJldHVybiBhMDAgKiBkZXQwMSArIGEwMSAqIGRldDExICsgYTAyICogZGV0MjE7XG4gICAgfVxuXG4gICAgc2V0SWRlbnRpdHkoKTogbWF0MyB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAwO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IDA7XG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSAxO1xuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IDA7XG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAwO1xuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IDE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdHJhbnNwb3NlKCk6IG1hdDMge1xuICAgICAgICBjb25zdCB0ZW1wMDEgPSB0aGlzLnZhbHVlc1sxXSxcbiAgICAgICAgICAgIHRlbXAwMiA9IHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgdGVtcDEyID0gdGhpcy52YWx1ZXNbNV07XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1szXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0aGlzLnZhbHVlc1s2XTtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB0ZW1wMDE7XG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gdGhpcy52YWx1ZXNbN107XG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gdGVtcDAyO1xuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IHRlbXAxMjtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpbnZlcnNlKCk6IG1hdDMge1xuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXSwgYTAxID0gdGhpcy52YWx1ZXNbMV0sIGEwMiA9IHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgYTEwID0gdGhpcy52YWx1ZXNbM10sIGExMSA9IHRoaXMudmFsdWVzWzRdLCBhMTIgPSB0aGlzLnZhbHVlc1s1XSxcbiAgICAgICAgICAgIGEyMCA9IHRoaXMudmFsdWVzWzZdLCBhMjEgPSB0aGlzLnZhbHVlc1s3XSwgYTIyID0gdGhpcy52YWx1ZXNbOF07XG5cbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjEsXG4gICAgICAgICAgICBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjAsXG4gICAgICAgICAgICBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcblxuICAgICAgICBsZXQgZGV0ID0gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xuXG4gICAgICAgIGlmICghZGV0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gZGV0MDEgKiBkZXQ7XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGRldDExICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IChhMjIgKiBhMDAgLSBhMDIgKiBhMjApICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9ICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBkZXQyMSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XG4gICAgICAgIHRoaXMudmFsdWVzWzhdID0gKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHkobWF0cml4OiBtYXQzKTogbWF0MyB7XG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdLCBhMDEgPSB0aGlzLnZhbHVlc1sxXSwgYTAyID0gdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICBhMTAgPSB0aGlzLnZhbHVlc1szXSwgYTExID0gdGhpcy52YWx1ZXNbNF0sIGExMiA9IHRoaXMudmFsdWVzWzVdLFxuICAgICAgICAgICAgYTIwID0gdGhpcy52YWx1ZXNbNl0sIGEyMSA9IHRoaXMudmFsdWVzWzddLCBhMjIgPSB0aGlzLnZhbHVlc1s4XTtcblxuICAgICAgICBjb25zdCBiMDAgPSBtYXRyaXguYXQoMCksIGIwMSA9IG1hdHJpeC5hdCgxKSwgYjAyID0gbWF0cml4LmF0KDIpLFxuICAgICAgICAgICAgYjEwID0gbWF0cml4LmF0KDMpLCBiMTEgPSBtYXRyaXguYXQoNCksIGIxMiA9IG1hdHJpeC5hdCg1KSxcbiAgICAgICAgICAgIGIyMCA9IG1hdHJpeC5hdCg2KSwgYjIxID0gbWF0cml4LmF0KDcpLCBiMjIgPSBtYXRyaXguYXQoOCk7XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcblxuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyO1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMTtcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHlWZWMyKHZlY3RvcjogdmVjMiwgcmVzdWx0OiB2ZWMyID0gbnVsbCk6IHZlYzIge1xuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yLnk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0Lnh5ID0gW1xuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHRoaXMudmFsdWVzWzZdLFxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1sxXSArIHkgKiB0aGlzLnZhbHVlc1s0XSArIHRoaXMudmFsdWVzWzddXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMyKFtcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbM10gKyB0aGlzLnZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB0aGlzLnZhbHVlc1s3XVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtdWx0aXBseVZlYzModmVjdG9yOiB2ZWMzLCByZXN1bHQ6IHZlYzMgPSBudWxsKTogdmVjMyB7XG4gICAgICAgIGNvbnN0IHggPSB2ZWN0b3IueCxcbiAgICAgICAgICAgIHkgPSB2ZWN0b3IueSxcbiAgICAgICAgICAgIHogPSB2ZWN0b3IuejtcblxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQueHl6ID0gW1xuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1swXSArIHkgKiB0aGlzLnZhbHVlc1szXSArIHogKiB0aGlzLnZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMV0gKyB5ICogdGhpcy52YWx1ZXNbNF0gKyB6ICogdGhpcy52YWx1ZXNbN10sXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzVdICsgeiAqIHRoaXMudmFsdWVzWzhdXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMzKFtcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbM10gKyB6ICogdGhpcy52YWx1ZXNbNl0sXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzFdICsgeSAqIHRoaXMudmFsdWVzWzRdICsgeiAqIHRoaXMudmFsdWVzWzddLFxuICAgICAgICAgICAgICAgIHggKiB0aGlzLnZhbHVlc1syXSArIHkgKiB0aGlzLnZhbHVlc1s1XSArIHogKiB0aGlzLnZhbHVlc1s4XVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b01hdDQocmVzdWx0OiBtYXQ0ID0gbnVsbCk6IG1hdDQge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICAgICAgMCxcblxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzRdLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxuICAgICAgICAgICAgICAgIDAsXG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s3XSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSxcbiAgICAgICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDQoW1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgICAgIDAsXG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1szXSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbN10sXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbOF0sXG4gICAgICAgICAgICAgICAgMCxcblxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9RdWF0KCk6IHF1YXQge1xuICAgICAgICBjb25zdCBtMDAgPSB0aGlzLnZhbHVlc1swXSwgbTAxID0gdGhpcy52YWx1ZXNbMV0sIG0wMiA9IHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgbTEwID0gdGhpcy52YWx1ZXNbM10sIG0xMSA9IHRoaXMudmFsdWVzWzRdLCBtMTIgPSB0aGlzLnZhbHVlc1s1XSxcbiAgICAgICAgICAgIG0yMCA9IHRoaXMudmFsdWVzWzZdLCBtMjEgPSB0aGlzLnZhbHVlc1s3XSwgbTIyID0gdGhpcy52YWx1ZXNbOF07XG5cbiAgICAgICAgbGV0IGZvdXJYU3F1YXJlZE1pbnVzMSA9IG0wMCAtIG0xMSAtIG0yMjtcbiAgICAgICAgbGV0IGZvdXJZU3F1YXJlZE1pbnVzMSA9IG0xMSAtIG0wMCAtIG0yMjtcbiAgICAgICAgbGV0IGZvdXJaU3F1YXJlZE1pbnVzMSA9IG0yMiAtIG0wMCAtIG0xMTtcbiAgICAgICAgbGV0IGZvdXJXU3F1YXJlZE1pbnVzMSA9IG0wMCArIG0xMSArIG0yMjtcblxuICAgICAgICBsZXQgYmlnZ2VzdEluZGV4ID0gMDtcblxuICAgICAgICBsZXQgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91cldTcXVhcmVkTWludXMxO1xuXG4gICAgICAgIGlmIChmb3VyWFNxdWFyZWRNaW51czEgPiBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEpIHtcbiAgICAgICAgICAgIGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSA9IGZvdXJYU3F1YXJlZE1pbnVzMTtcbiAgICAgICAgICAgIGJpZ2dlc3RJbmRleCA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cllTcXVhcmVkTWludXMxID4gZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxKSB7XG4gICAgICAgICAgICBmb3VyQmlnZ2VzdFNxdWFyZWRNaW51czEgPSBmb3VyWVNxdWFyZWRNaW51czE7XG4gICAgICAgICAgICBiaWdnZXN0SW5kZXggPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdXJaU3F1YXJlZE1pbnVzMSA+IGZvdXJCaWdnZXN0U3F1YXJlZE1pbnVzMSkge1xuICAgICAgICAgICAgZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxID0gZm91clpTcXVhcmVkTWludXMxO1xuICAgICAgICAgICAgYmlnZ2VzdEluZGV4ID0gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJpZ2dlc3RWYWwgPSBNYXRoLnNxcnQoZm91ckJpZ2dlc3RTcXVhcmVkTWludXMxICsgMSkgKiAwLjU7XG4gICAgICAgIGNvbnN0IG11bHQgPSAwLjI1IC8gYmlnZ2VzdFZhbDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgcXVhdCgpO1xuXG4gICAgICAgIHN3aXRjaCAoYmlnZ2VzdEluZGV4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG5cbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IGJpZ2dlc3RWYWw7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSAobTEyIC0gbTIxKSAqIG11bHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnkgPSAobTIwIC0gbTAyKSAqIG11bHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnogPSAobTAxIC0gbTEwKSAqIG11bHQ7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxOlxuXG4gICAgICAgICAgICAgICAgcmVzdWx0LncgPSAobTEyIC0gbTIxKSAqIG11bHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnggPSBiaWdnZXN0VmFsO1xuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gKG0wMSArIG0xMCkgKiBtdWx0O1xuICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMCArIG0wMikgKiBtdWx0O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcblxuICAgICAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMCAtIG0wMikgKiBtdWx0O1xuICAgICAgICAgICAgICAgIHJlc3VsdC54ID0gKG0wMSArIG0xMCkgKiBtdWx0O1xuICAgICAgICAgICAgICAgIHJlc3VsdC55ID0gYmlnZ2VzdFZhbDtcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IChtMTIgKyBtMjEpICogbXVsdDtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM6XG5cbiAgICAgICAgICAgICAgICByZXN1bHQudyA9IChtMDEgLSBtMTApICogbXVsdDtcbiAgICAgICAgICAgICAgICByZXN1bHQueCA9IChtMjAgKyBtMDIpICogbXVsdDtcbiAgICAgICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpICogbXVsdDtcbiAgICAgICAgICAgICAgICByZXN1bHQueiA9IGJpZ2dlc3RWYWw7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcm90YXRlKGFuZ2xlOiBudW1iZXIsIGF4aXM6IHZlYzMpOiBtYXQzIHtcbiAgICAgICAgbGV0IHggPSBheGlzLngsXG4gICAgICAgICAgICB5ID0gYXhpcy55LFxuICAgICAgICAgICAgeiA9IGF4aXMuejtcblxuICAgICAgICBsZXQgbGVuZ3RoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XG5cbiAgICAgICAgaWYgKCFsZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAobGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICBsZW5ndGggPSAxIC8gbGVuZ3RoO1xuICAgICAgICAgICAgeCAqPSBsZW5ndGg7XG4gICAgICAgICAgICB5ICo9IGxlbmd0aDtcbiAgICAgICAgICAgIHogKj0gbGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgYyA9IE1hdGguY29zKGFuZ2xlKTtcblxuICAgICAgICBjb25zdCB0ID0gMS4wIC0gYztcblxuICAgICAgICBjb25zdCBhMDAgPSB0aGlzLnZhbHVlc1swXSwgYTAxID0gdGhpcy52YWx1ZXNbMV0sIGEwMiA9IHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgYTEwID0gdGhpcy52YWx1ZXNbNF0sIGExMSA9IHRoaXMudmFsdWVzWzVdLCBhMTIgPSB0aGlzLnZhbHVlc1s2XSxcbiAgICAgICAgICAgIGEyMCA9IHRoaXMudmFsdWVzWzhdLCBhMjEgPSB0aGlzLnZhbHVlc1s5XSwgYTIyID0gdGhpcy52YWx1ZXNbMTBdO1xuXG4gICAgICAgIGNvbnN0IGIwMCA9IHggKiB4ICogdCArIGMsIGIwMSA9IHkgKiB4ICogdCArIHogKiBzLCBiMDIgPSB6ICogeCAqIHQgLSB5ICogcyxcbiAgICAgICAgICAgIGIxMCA9IHggKiB5ICogdCAtIHogKiBzLCBiMTEgPSB5ICogeSAqIHQgKyBjLCBiMTIgPSB6ICogeSAqIHQgKyB4ICogcyxcbiAgICAgICAgICAgIGIyMCA9IHggKiB6ICogdCArIHkgKiBzLCBiMjEgPSB5ICogeiAqIHQgLSB4ICogcywgYjIyID0geiAqIHogKiB0ICsgYztcblxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbNl0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvZHVjdChtMTogbWF0MywgbTI6IG1hdDMsIHJlc3VsdDogbWF0MyA9IG51bGwpOiBtYXQzIHtcbiAgICAgICAgY29uc3QgYTAwID0gbTEuYXQoMCksIGEwMSA9IG0xLmF0KDEpLCBhMDIgPSBtMS5hdCgyKSxcbiAgICAgICAgICAgIGExMCA9IG0xLmF0KDMpLCBhMTEgPSBtMS5hdCg0KSwgYTEyID0gbTEuYXQoNSksXG4gICAgICAgICAgICBhMjAgPSBtMS5hdCg2KSwgYTIxID0gbTEuYXQoNyksIGEyMiA9IG0xLmF0KDgpO1xuXG4gICAgICAgIGNvbnN0IGIwMCA9IG0yLmF0KDApLCBiMDEgPSBtMi5hdCgxKSwgYjAyID0gbTIuYXQoMiksXG4gICAgICAgICAgICBiMTAgPSBtMi5hdCgzKSwgYjExID0gbTIuYXQoNCksIGIxMiA9IG0yLmF0KDUpLFxuICAgICAgICAgICAgYjIwID0gbTIuYXQoNiksIGIyMSA9IG0yLmF0KDcpLCBiMjIgPSBtMi5hdCg4KTtcblxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwLFxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSxcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIsXG5cbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAsXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxLFxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMixcblxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCxcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEsXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0MyhbXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwLFxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSxcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIsXG5cbiAgICAgICAgICAgICAgICBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjAsXG4gICAgICAgICAgICAgICAgYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxLFxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMixcblxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMCxcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjEsXG4gICAgICAgICAgICAgICAgYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBpZGVudGl0eSA9IG5ldyBtYXQzKCkuc2V0SWRlbnRpdHkoKTtcblxufVxuXG5cblxuIiwiaW1wb3J0IHZlYzMgZnJvbSAnLi92ZWMzJztcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XG5pbXBvcnQgbWF0MyBmcm9tICcuL21hdDMnO1xuXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBtYXQ0IHtcblxuICAgIHByaXZhdGUgdmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IG51bWJlcltdID0gbnVsbCkge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLmluaXQodmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGF0KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIGluaXQodmFsdWVzOiBudW1iZXJbXSk6IG1hdDQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2ldID0gdmFsdWVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29weShkZXN0OiBtYXQ0ID0gbnVsbCk6IG1hdDQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgbWF0NCgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgZGVzdC52YWx1ZXNbaV0gPSB0aGlzLnZhbHVlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGFsbCgpOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgZGF0YVtpXSA9IHRoaXMudmFsdWVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcm93KGluZGV4OiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAwXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICogNCArIDFdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiA0ICsgMl0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDQgKyAzXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGNvbChpbmRleDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXhdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKyA0XSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZGV4ICsgOF0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCArIDEyXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGVxdWFscyhtYXRyaXg6IG1hdDQsIHRocmVzaG9sZCA9IGVwc2lsb24pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52YWx1ZXNbaV0gLSBtYXRyaXguYXQoaSkpID4gdGhyZXNob2xkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRldGVybWluYW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdLCBhMDEgPSB0aGlzLnZhbHVlc1sxXSwgYTAyID0gdGhpcy52YWx1ZXNbMl0sIGEwMyA9IHRoaXMudmFsdWVzWzNdLFxuICAgICAgICAgICAgYTEwID0gdGhpcy52YWx1ZXNbNF0sIGExMSA9IHRoaXMudmFsdWVzWzVdLCBhMTIgPSB0aGlzLnZhbHVlc1s2XSwgYTEzID0gdGhpcy52YWx1ZXNbN10sXG4gICAgICAgICAgICBhMjAgPSB0aGlzLnZhbHVlc1s4XSwgYTIxID0gdGhpcy52YWx1ZXNbOV0sIGEyMiA9IHRoaXMudmFsdWVzWzEwXSwgYTIzID0gdGhpcy52YWx1ZXNbMTFdLFxuICAgICAgICAgICAgYTMwID0gdGhpcy52YWx1ZXNbMTJdLCBhMzEgPSB0aGlzLnZhbHVlc1sxM10sIGEzMiA9IHRoaXMudmFsdWVzWzE0XSwgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xuXG4gICAgICAgIGNvbnN0IGRldDAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxuICAgICAgICAgICAgZGV0MDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXG4gICAgICAgICAgICBkZXQwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcbiAgICAgICAgICAgIGRldDAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxuICAgICAgICAgICAgZGV0MDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXG4gICAgICAgICAgICBkZXQwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcbiAgICAgICAgICAgIGRldDA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxuICAgICAgICAgICAgZGV0MDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXG4gICAgICAgICAgICBkZXQwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcbiAgICAgICAgICAgIGRldDA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxuICAgICAgICAgICAgZGV0MTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXG4gICAgICAgICAgICBkZXQxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcblxuICAgICAgICByZXR1cm4gKGRldDAwICogZGV0MTEgLSBkZXQwMSAqIGRldDEwICsgZGV0MDIgKiBkZXQwOSArIGRldDAzICogZGV0MDggLSBkZXQwNCAqIGRldDA3ICsgZGV0MDUgKiBkZXQwNik7XG4gICAgfVxuXG4gICAgc2V0SWRlbnRpdHkoKTogbWF0NCB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gMTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSAwO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IDA7XG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbNF0gPSAwO1xuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IDE7XG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAwO1xuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IDA7XG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTBdID0gMTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gMTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0cmFuc3Bvc2UoKTogbWF0NCB7XG4gICAgICAgIGNvbnN0IHRlbXAwMSA9IHRoaXMudmFsdWVzWzFdLCB0ZW1wMDIgPSB0aGlzLnZhbHVlc1syXSxcbiAgICAgICAgICAgIHRlbXAwMyA9IHRoaXMudmFsdWVzWzNdLCB0ZW1wMTIgPSB0aGlzLnZhbHVlc1s2XSxcbiAgICAgICAgICAgIHRlbXAxMyA9IHRoaXMudmFsdWVzWzddLCB0ZW1wMjMgPSB0aGlzLnZhbHVlc1sxMV07XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1s0XTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0aGlzLnZhbHVlc1s4XTtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB0aGlzLnZhbHVlc1sxMl07XG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gdGVtcDAxO1xuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9IHRoaXMudmFsdWVzWzldO1xuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IHRoaXMudmFsdWVzWzEzXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSB0ZW1wMDI7XG4gICAgICAgIHRoaXMudmFsdWVzWzldID0gdGVtcDEyO1xuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSB0aGlzLnZhbHVlc1sxNF07XG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IHRlbXAwMztcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gdGVtcDEzO1xuICAgICAgICB0aGlzLnZhbHVlc1sxNF0gPSB0ZW1wMjM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaW52ZXJzZSgpOiBtYXQ0IHtcbiAgICAgICAgY29uc3QgYTAwID0gdGhpcy52YWx1ZXNbMF0sIGEwMSA9IHRoaXMudmFsdWVzWzFdLCBhMDIgPSB0aGlzLnZhbHVlc1syXSwgYTAzID0gdGhpcy52YWx1ZXNbM10sXG4gICAgICAgICAgICBhMTAgPSB0aGlzLnZhbHVlc1s0XSwgYTExID0gdGhpcy52YWx1ZXNbNV0sIGExMiA9IHRoaXMudmFsdWVzWzZdLCBhMTMgPSB0aGlzLnZhbHVlc1s3XSxcbiAgICAgICAgICAgIGEyMCA9IHRoaXMudmFsdWVzWzhdLCBhMjEgPSB0aGlzLnZhbHVlc1s5XSwgYTIyID0gdGhpcy52YWx1ZXNbMTBdLCBhMjMgPSB0aGlzLnZhbHVlc1sxMV0sXG4gICAgICAgICAgICBhMzAgPSB0aGlzLnZhbHVlc1sxMl0sIGEzMSA9IHRoaXMudmFsdWVzWzEzXSwgYTMyID0gdGhpcy52YWx1ZXNbMTRdLCBhMzMgPSB0aGlzLnZhbHVlc1sxNV07XG5cbiAgICAgICAgY29uc3QgZGV0MDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTAsXG4gICAgICAgICAgICBkZXQwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcbiAgICAgICAgICAgIGRldDAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxuICAgICAgICAgICAgZGV0MDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTEsXG4gICAgICAgICAgICBkZXQwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcbiAgICAgICAgICAgIGRldDA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxuICAgICAgICAgICAgZGV0MDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzAsXG4gICAgICAgICAgICBkZXQwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcbiAgICAgICAgICAgIGRldDA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxuICAgICAgICAgICAgZGV0MDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzEsXG4gICAgICAgICAgICBkZXQxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcbiAgICAgICAgICAgIGRldDExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xuXG4gICAgICAgIGxldCBkZXQgPSAoZGV0MDAgKiBkZXQxMSAtIGRldDAxICogZGV0MTAgKyBkZXQwMiAqIGRldDA5ICsgZGV0MDMgKiBkZXQwOCAtIGRldDA0ICogZGV0MDcgKyBkZXQwNSAqIGRldDA2KTtcblxuICAgICAgICBpZiAoIWRldClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGRldCA9IDEuMCAvIGRldDtcblxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IChhMTEgKiBkZXQxMSAtIGExMiAqIGRldDEwICsgYTEzICogZGV0MDkpICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9ICgtYTAxICogZGV0MTEgKyBhMDIgKiBkZXQxMCAtIGEwMyAqIGRldDA5KSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAoYTMxICogZGV0MDUgLSBhMzIgKiBkZXQwNCArIGEzMyAqIGRldDAzKSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSAoLWEyMSAqIGRldDA1ICsgYTIyICogZGV0MDQgLSBhMjMgKiBkZXQwMykgKiBkZXQ7XG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gKC1hMTAgKiBkZXQxMSArIGExMiAqIGRldDA4IC0gYTEzICogZGV0MDcpICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1s1XSA9IChhMDAgKiBkZXQxMSAtIGEwMiAqIGRldDA4ICsgYTAzICogZGV0MDcpICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1s2XSA9ICgtYTMwICogZGV0MDUgKyBhMzIgKiBkZXQwMiAtIGEzMyAqIGRldDAxKSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbN10gPSAoYTIwICogZGV0MDUgLSBhMjIgKiBkZXQwMiArIGEyMyAqIGRldDAxKSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbOF0gPSAoYTEwICogZGV0MTAgLSBhMTEgKiBkZXQwOCArIGExMyAqIGRldDA2KSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSAoLWEwMCAqIGRldDEwICsgYTAxICogZGV0MDggLSBhMDMgKiBkZXQwNikgKiBkZXQ7XG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IChhMzAgKiBkZXQwNCAtIGEzMSAqIGRldDAyICsgYTMzICogZGV0MDApICogZGV0O1xuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gPSAoLWEyMCAqIGRldDA0ICsgYTIxICogZGV0MDIgLSBhMjMgKiBkZXQwMCkgKiBkZXQ7XG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9ICgtYTEwICogZGV0MDkgKyBhMTEgKiBkZXQwNyAtIGExMiAqIGRldDA2KSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdID0gKGEwMCAqIGRldDA5IC0gYTAxICogZGV0MDcgKyBhMDIgKiBkZXQwNikgKiBkZXQ7XG4gICAgICAgIHRoaXMudmFsdWVzWzE0XSA9ICgtYTMwICogZGV0MDMgKyBhMzEgKiBkZXQwMSAtIGEzMiAqIGRldDAwKSAqIGRldDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTVdID0gKGEyMCAqIGRldDAzIC0gYTIxICogZGV0MDEgKyBhMjIgKiBkZXQwMCkgKiBkZXQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHkobWF0cml4OiBtYXQ0KTogbWF0NCB7XG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdLCBhMDEgPSB0aGlzLnZhbHVlc1sxXSwgYTAyID0gdGhpcy52YWx1ZXNbMl0sIGEwMyA9IHRoaXMudmFsdWVzWzNdO1xuICAgICAgICBjb25zdCBhMTAgPSB0aGlzLnZhbHVlc1s0XSwgYTExID0gdGhpcy52YWx1ZXNbNV0sIGExMiA9IHRoaXMudmFsdWVzWzZdLCBhMTMgPSB0aGlzLnZhbHVlc1s3XTtcbiAgICAgICAgY29uc3QgYTIwID0gdGhpcy52YWx1ZXNbOF0sIGEyMSA9IHRoaXMudmFsdWVzWzldLCBhMjIgPSB0aGlzLnZhbHVlc1sxMF0sIGEyMyA9IHRoaXMudmFsdWVzWzExXTtcbiAgICAgICAgY29uc3QgYTMwID0gdGhpcy52YWx1ZXNbMTJdLCBhMzEgPSB0aGlzLnZhbHVlc1sxM10sIGEzMiA9IHRoaXMudmFsdWVzWzE0XSwgYTMzID0gdGhpcy52YWx1ZXNbMTVdO1xuXG4gICAgICAgIGxldCBiMCA9IG1hdHJpeC5hdCgwKSxcbiAgICAgICAgICAgIGIxID0gbWF0cml4LmF0KDEpLFxuICAgICAgICAgICAgYjIgPSBtYXRyaXguYXQoMiksXG4gICAgICAgICAgICBiMyA9IG1hdHJpeC5hdCgzKTtcblxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuXG4gICAgICAgIGIwID0gbWF0cml4LmF0KDQpO1xuICAgICAgICBiMSA9IG1hdHJpeC5hdCg1KTtcbiAgICAgICAgYjIgPSBtYXRyaXguYXQoNik7XG4gICAgICAgIGIzID0gbWF0cml4LmF0KDcpO1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzRdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gICAgICAgIHRoaXMudmFsdWVzWzVdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gICAgICAgIHRoaXMudmFsdWVzWzddID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG5cbiAgICAgICAgYjAgPSBtYXRyaXguYXQoOCk7XG4gICAgICAgIGIxID0gbWF0cml4LmF0KDkpO1xuICAgICAgICBiMiA9IG1hdHJpeC5hdCgxMCk7XG4gICAgICAgIGIzID0gbWF0cml4LmF0KDExKTtcblxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICAgICAgICB0aGlzLnZhbHVlc1s5XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICAgICAgICB0aGlzLnZhbHVlc1sxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG5cbiAgICAgICAgYjAgPSBtYXRyaXguYXQoMTIpO1xuICAgICAgICBiMSA9IG1hdHJpeC5hdCgxMyk7XG4gICAgICAgIGIyID0gbWF0cml4LmF0KDE0KTtcbiAgICAgICAgYjMgPSBtYXRyaXguYXQoMTUpO1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzEyXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICAgICAgICB0aGlzLnZhbHVlc1sxM10gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG11bHRpcGx5VmVjMyh2ZWN0b3I6IHZlYzMpOiB2ZWMzIHtcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54LFxuICAgICAgICAgICAgeSA9IHZlY3Rvci55LFxuICAgICAgICAgICAgeiA9IHZlY3Rvci56O1xuXG4gICAgICAgIHJldHVybiBuZXcgdmVjMyhbXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSAqIHggKyB0aGlzLnZhbHVlc1s0XSAqIHkgKyB0aGlzLnZhbHVlc1s4XSAqIHogKyB0aGlzLnZhbHVlc1sxMl0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSAqIHggKyB0aGlzLnZhbHVlc1s1XSAqIHkgKyB0aGlzLnZhbHVlc1s5XSAqIHogKyB0aGlzLnZhbHVlc1sxM10sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSAqIHggKyB0aGlzLnZhbHVlc1s2XSAqIHkgKyB0aGlzLnZhbHVlc1sxMF0gKiB6ICsgdGhpcy52YWx1ZXNbMTRdXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIG11bHRpcGx5VmVjNCh2ZWN0b3I6IHZlYzQsIGRlc3Q6IHZlYzQgPSBudWxsKTogdmVjNCB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IG5ldyB2ZWM0KCk7XG5cbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54LFxuICAgICAgICAgICAgeSA9IHZlY3Rvci55LFxuICAgICAgICAgICAgeiA9IHZlY3Rvci56LFxuICAgICAgICAgICAgdyA9IHZlY3Rvci53O1xuXG4gICAgICAgIGRlc3QueCA9IHRoaXMudmFsdWVzWzBdICogeCArIHRoaXMudmFsdWVzWzRdICogeSArIHRoaXMudmFsdWVzWzhdICogeiArIHRoaXMudmFsdWVzWzEyXSAqIHc7XG4gICAgICAgIGRlc3QueSA9IHRoaXMudmFsdWVzWzFdICogeCArIHRoaXMudmFsdWVzWzVdICogeSArIHRoaXMudmFsdWVzWzldICogeiArIHRoaXMudmFsdWVzWzEzXSAqIHc7XG4gICAgICAgIGRlc3QueiA9IHRoaXMudmFsdWVzWzJdICogeCArIHRoaXMudmFsdWVzWzZdICogeSArIHRoaXMudmFsdWVzWzEwXSAqIHogKyB0aGlzLnZhbHVlc1sxNF0gKiB3O1xuICAgICAgICBkZXN0LncgPSB0aGlzLnZhbHVlc1szXSAqIHggKyB0aGlzLnZhbHVlc1s3XSAqIHkgKyB0aGlzLnZhbHVlc1sxMV0gKiB6ICsgdGhpcy52YWx1ZXNbMTVdICogdztcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICB0b01hdDMoKTogbWF0MyB7XG4gICAgICAgIHJldHVybiBuZXcgbWF0MyhbXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1swXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzFdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s0XSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzVdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbNl0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1s4XSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzldLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMTBdXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHRvSW52ZXJzZU1hdDMoKTogbWF0MyB7XG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdLCBhMDEgPSB0aGlzLnZhbHVlc1sxXSwgYTAyID0gdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICBhMTAgPSB0aGlzLnZhbHVlc1s0XSwgYTExID0gdGhpcy52YWx1ZXNbNV0sIGExMiA9IHRoaXMudmFsdWVzWzZdLFxuICAgICAgICAgICAgYTIwID0gdGhpcy52YWx1ZXNbOF0sIGEyMSA9IHRoaXMudmFsdWVzWzldLCBhMjIgPSB0aGlzLnZhbHVlc1sxMF07XG5cbiAgICAgICAgY29uc3QgZGV0MDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjEsXG4gICAgICAgICAgICBkZXQxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjAsXG4gICAgICAgICAgICBkZXQyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcblxuICAgICAgICBsZXQgZGV0ID0gYTAwICogZGV0MDEgKyBhMDEgKiBkZXQxMSArIGEwMiAqIGRldDIxO1xuXG4gICAgICAgIGlmICghZGV0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gICAgICAgIHJldHVybiBuZXcgbWF0MyhbXG4gICAgICAgICAgICBkZXQwMSAqIGRldCxcbiAgICAgICAgICAgICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldCxcbiAgICAgICAgICAgIChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0LFxuICAgICAgICAgICAgZGV0MTEgKiBkZXQsXG4gICAgICAgICAgICAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldCxcbiAgICAgICAgICAgICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldCxcbiAgICAgICAgICAgIGRldDIxICogZGV0LFxuICAgICAgICAgICAgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApICogZGV0LFxuICAgICAgICAgICAgKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXRcbiAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgdHJhbnNsYXRlKHZlY3RvcjogdmVjMyk6IG1hdDQge1xuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yLnksXG4gICAgICAgICAgICB6ID0gdmVjdG9yLno7XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMTJdICs9IHRoaXMudmFsdWVzWzBdICogeCArIHRoaXMudmFsdWVzWzRdICogeSArIHRoaXMudmFsdWVzWzhdICogejtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTNdICs9IHRoaXMudmFsdWVzWzFdICogeCArIHRoaXMudmFsdWVzWzVdICogeSArIHRoaXMudmFsdWVzWzldICogejtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTRdICs9IHRoaXMudmFsdWVzWzJdICogeCArIHRoaXMudmFsdWVzWzZdICogeSArIHRoaXMudmFsdWVzWzEwXSAqIHo7XG4gICAgICAgIHRoaXMudmFsdWVzWzE1XSArPSB0aGlzLnZhbHVlc1szXSAqIHggKyB0aGlzLnZhbHVlc1s3XSAqIHkgKyB0aGlzLnZhbHVlc1sxMV0gKiB6O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNjYWxlKHZlY3RvcjogdmVjMyk6IG1hdDQge1xuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yLnksXG4gICAgICAgICAgICB6ID0gdmVjdG9yLno7XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gKj0geDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gKj0geDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gKj0geDtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gKj0geDtcblxuICAgICAgICB0aGlzLnZhbHVlc1s0XSAqPSB5O1xuICAgICAgICB0aGlzLnZhbHVlc1s1XSAqPSB5O1xuICAgICAgICB0aGlzLnZhbHVlc1s2XSAqPSB5O1xuICAgICAgICB0aGlzLnZhbHVlc1s3XSAqPSB5O1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzhdICo9IHo7XG4gICAgICAgIHRoaXMudmFsdWVzWzldICo9IHo7XG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSAqPSB6O1xuICAgICAgICB0aGlzLnZhbHVlc1sxMV0gKj0gejtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByb3RhdGUoYW5nbGU6IG51bWJlciwgYXhpczogdmVjMyk6IG1hdDQge1xuICAgICAgICBsZXQgeCA9IGF4aXMueCxcbiAgICAgICAgICAgIHkgPSBheGlzLnksXG4gICAgICAgICAgICB6ID0gYXhpcy56O1xuXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcblxuICAgICAgICBpZiAoIWxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChsZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IDEgLyBsZW5ndGg7XG4gICAgICAgICAgICB4ICo9IGxlbmd0aDtcbiAgICAgICAgICAgIHkgKj0gbGVuZ3RoO1xuICAgICAgICAgICAgeiAqPSBsZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xuXG4gICAgICAgIGNvbnN0IHQgPSAxLjAgLSBjO1xuXG4gICAgICAgIGNvbnN0IGEwMCA9IHRoaXMudmFsdWVzWzBdLCBhMDEgPSB0aGlzLnZhbHVlc1sxXSwgYTAyID0gdGhpcy52YWx1ZXNbMl0sIGEwMyA9IHRoaXMudmFsdWVzWzNdLFxuICAgICAgICAgICAgYTEwID0gdGhpcy52YWx1ZXNbNF0sIGExMSA9IHRoaXMudmFsdWVzWzVdLCBhMTIgPSB0aGlzLnZhbHVlc1s2XSwgYTEzID0gdGhpcy52YWx1ZXNbN10sXG4gICAgICAgICAgICBhMjAgPSB0aGlzLnZhbHVlc1s4XSwgYTIxID0gdGhpcy52YWx1ZXNbOV0sIGEyMiA9IHRoaXMudmFsdWVzWzEwXSwgYTIzID0gdGhpcy52YWx1ZXNbMTFdO1xuXG4gICAgICAgIGNvbnN0IGIwMCA9IHggKiB4ICogdCArIGMsIGIwMSA9IHkgKiB4ICogdCArIHogKiBzLCBiMDIgPSB6ICogeCAqIHQgLSB5ICogcyxcbiAgICAgICAgICAgIGIxMCA9IHggKiB5ICogdCAtIHogKiBzLCBiMTEgPSB5ICogeSAqIHQgKyBjLCBiMTIgPSB6ICogeSAqIHQgKyB4ICogcyxcbiAgICAgICAgICAgIGIyMCA9IHggKiB6ICogdCArIHkgKiBzLCBiMjEgPSB5ICogeiAqIHQgLSB4ICogcywgYjIyID0geiAqIHogKiB0ICsgYztcblxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcblxuICAgICAgICB0aGlzLnZhbHVlc1s0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbNV0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XG4gICAgICAgIHRoaXMudmFsdWVzWzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xuICAgICAgICB0aGlzLnZhbHVlc1s3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcblxuICAgICAgICB0aGlzLnZhbHVlc1s4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gICAgICAgIHRoaXMudmFsdWVzWzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcbiAgICAgICAgdGhpcy52YWx1ZXNbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcnVzdHVtKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIHRvcDogbnVtYmVyLCBuZWFyOiBudW1iZXIsIGZhcjogbnVtYmVyKTogbWF0NCB7XG4gICAgICAgIGNvbnN0IHJsID0gKHJpZ2h0IC0gbGVmdCksXG4gICAgICAgICAgICB0YiA9ICh0b3AgLSBib3R0b20pLFxuICAgICAgICAgICAgZm4gPSAoZmFyIC0gbmVhcik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcbiAgICAgICAgICAgIChuZWFyICogMikgLyBybCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcblxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIChuZWFyICogMikgLyB0YixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAocmlnaHQgKyBsZWZ0KSAvIHJsLFxuICAgICAgICAgICAgKHRvcCArIGJvdHRvbSkgLyB0YixcbiAgICAgICAgICAgIC0oZmFyICsgbmVhcikgLyBmbixcbiAgICAgICAgICAgIC0xLFxuXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIC0oZmFyICogbmVhciAqIDIpIC8gZm4sXG4gICAgICAgICAgICAwXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBwZXJzcGVjdGl2ZShmb3Y6IG51bWJlciwgYXNwZWN0OiBudW1iZXIsIG5lYXI6IG51bWJlciwgZmFyOiBudW1iZXIpOiBtYXQ0IHtcbiAgICAgICAgY29uc3QgdG9wID0gbmVhciAqIE1hdGgudGFuKGZvdiAqIE1hdGguUEkgLyAzNjAuMCksXG4gICAgICAgICAgICByaWdodCA9IHRvcCAqIGFzcGVjdDtcblxuICAgICAgICByZXR1cm4gbWF0NC5mcnVzdHVtKC1yaWdodCwgcmlnaHQsIC10b3AsIHRvcCwgbmVhciwgZmFyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3J0aG9ncmFwaGljKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIHRvcDogbnVtYmVyLCBuZWFyOiBudW1iZXIsIGZhcjogbnVtYmVyKTogbWF0NCB7XG4gICAgICAgIGNvbnN0IHJsID0gKHJpZ2h0IC0gbGVmdCksXG4gICAgICAgICAgICB0YiA9ICh0b3AgLSBib3R0b20pLFxuICAgICAgICAgICAgZm4gPSAoZmFyIC0gbmVhcik7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBtYXQ0KFtcbiAgICAgICAgICAgIDIgLyBybCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcblxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDIgLyB0YixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIC0yIC8gZm4sXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAtKGxlZnQgKyByaWdodCkgLyBybCxcbiAgICAgICAgICAgIC0odG9wICsgYm90dG9tKSAvIHRiLFxuICAgICAgICAgICAgLShmYXIgKyBuZWFyKSAvIGZuLFxuICAgICAgICAgICAgMVxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbG9va0F0KHBvc2l0aW9uOiB2ZWMzLCB0YXJnZXQ6IHZlYzMsIHVwOiB2ZWMzID0gdmVjMy51cCk6IG1hdDQge1xuICAgICAgICBpZiAocG9zaXRpb24uZXF1YWxzKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlkZW50aXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeiA9IHZlYzMuZGlmZmVyZW5jZShwb3NpdGlvbiwgdGFyZ2V0KS5ub3JtYWxpemUoKTtcblxuICAgICAgICBjb25zdCB4ID0gdmVjMy5jcm9zcyh1cCwgeikubm9ybWFsaXplKCk7XG4gICAgICAgIGNvbnN0IHkgPSB2ZWMzLmNyb3NzKHosIHgpLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgbWF0NChbXG4gICAgICAgICAgICB4LngsXG4gICAgICAgICAgICB5LngsXG4gICAgICAgICAgICB6LngsXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICB4LnksXG4gICAgICAgICAgICB5LnksXG4gICAgICAgICAgICB6LnksXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICB4LnosXG4gICAgICAgICAgICB5LnosXG4gICAgICAgICAgICB6LnosXG4gICAgICAgICAgICAwLFxuXG4gICAgICAgICAgICAtdmVjMy5kb3QoeCwgcG9zaXRpb24pLFxuICAgICAgICAgICAgLXZlYzMuZG90KHksIHBvc2l0aW9uKSxcbiAgICAgICAgICAgIC12ZWMzLmRvdCh6LCBwb3NpdGlvbiksXG4gICAgICAgICAgICAxXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9kdWN0KG0xOiBtYXQ0LCBtMjogbWF0NCwgcmVzdWx0OiBtYXQ0ID0gbnVsbCk6IG1hdDQge1xuICAgICAgICBjb25zdCBhMDAgPSBtMS5hdCgwKSwgYTAxID0gbTEuYXQoMSksIGEwMiA9IG0xLmF0KDIpLCBhMDMgPSBtMS5hdCgzKSxcbiAgICAgICAgICAgIGExMCA9IG0xLmF0KDQpLCBhMTEgPSBtMS5hdCg1KSwgYTEyID0gbTEuYXQoNiksIGExMyA9IG0xLmF0KDcpLFxuICAgICAgICAgICAgYTIwID0gbTEuYXQoOCksIGEyMSA9IG0xLmF0KDkpLCBhMjIgPSBtMS5hdCgxMCksIGEyMyA9IG0xLmF0KDExKSxcbiAgICAgICAgICAgIGEzMCA9IG0xLmF0KDEyKSwgYTMxID0gbTEuYXQoMTMpLCBhMzIgPSBtMS5hdCgxNCksIGEzMyA9IG0xLmF0KDE1KTtcblxuICAgICAgICBjb25zdCBiMDAgPSBtMi5hdCgwKSwgYjAxID0gbTIuYXQoMSksIGIwMiA9IG0yLmF0KDIpLCBiMDMgPSBtMi5hdCgzKSxcbiAgICAgICAgICAgIGIxMCA9IG0yLmF0KDQpLCBiMTEgPSBtMi5hdCg1KSwgYjEyID0gbTIuYXQoNiksIGIxMyA9IG0yLmF0KDcpLFxuICAgICAgICAgICAgYjIwID0gbTIuYXQoOCksIGIyMSA9IG0yLmF0KDkpLCBiMjIgPSBtMi5hdCgxMCksIGIyMyA9IG0yLmF0KDExKSxcbiAgICAgICAgICAgIGIzMCA9IG0yLmF0KDEyKSwgYjMxID0gbTIuYXQoMTMpLCBiMzIgPSBtMi5hdCgxNCksIGIzMyA9IG0yLmF0KDE1KTtcblxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwICsgYjAzICogYTMwLFxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSArIGIwMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIgKyBiMDMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjAwICogYTAzICsgYjAxICogYTEzICsgYjAyICogYTIzICsgYjAzICogYTMzLFxuXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwICsgYjEzICogYTMwLFxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSArIGIxMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIgKyBiMTMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjEwICogYTAzICsgYjExICogYTEzICsgYjEyICogYTIzICsgYjEzICogYTMzLFxuXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwICsgYjIzICogYTMwLFxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSArIGIyMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjIgKyBiMjMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjIwICogYTAzICsgYjIxICogYTEzICsgYjIyICogYTIzICsgYjIzICogYTMzLFxuXG4gICAgICAgICAgICAgICAgYjMwICogYTAwICsgYjMxICogYTEwICsgYjMyICogYTIwICsgYjMzICogYTMwLFxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMSArIGIzMSAqIGExMSArIGIzMiAqIGEyMSArIGIzMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDIgKyBiMzEgKiBhMTIgKyBiMzIgKiBhMjIgKyBiMzMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjMwICogYTAzICsgYjMxICogYTEzICsgYjMyICogYTIzICsgYjMzICogYTMzXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgbWF0NChbXG4gICAgICAgICAgICAgICAgYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwICsgYjAzICogYTMwLFxuICAgICAgICAgICAgICAgIGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMSArIGIwMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjIgKyBiMDMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjAwICogYTAzICsgYjAxICogYTEzICsgYjAyICogYTIzICsgYjAzICogYTMzLFxuXG4gICAgICAgICAgICAgICAgYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwICsgYjEzICogYTMwLFxuICAgICAgICAgICAgICAgIGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMSArIGIxMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjIgKyBiMTMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjEwICogYTAzICsgYjExICogYTEzICsgYjEyICogYTIzICsgYjEzICogYTMzLFxuXG4gICAgICAgICAgICAgICAgYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwICsgYjIzICogYTMwLFxuICAgICAgICAgICAgICAgIGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMSArIGIyMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjIgKyBiMjMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjIwICogYTAzICsgYjIxICogYTEzICsgYjIyICogYTIzICsgYjIzICogYTMzLFxuXG4gICAgICAgICAgICAgICAgYjMwICogYTAwICsgYjMxICogYTEwICsgYjMyICogYTIwICsgYjMzICogYTMwLFxuICAgICAgICAgICAgICAgIGIzMCAqIGEwMSArIGIzMSAqIGExMSArIGIzMiAqIGEyMSArIGIzMyAqIGEzMSxcbiAgICAgICAgICAgICAgICBiMzAgKiBhMDIgKyBiMzEgKiBhMTIgKyBiMzIgKiBhMjIgKyBiMzMgKiBhMzIsXG4gICAgICAgICAgICAgICAgYjMwICogYTAzICsgYjMxICogYTEzICsgYjMyICogYTIzICsgYjMzICogYTMzXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBpZGVudGl0eSA9IG5ldyBtYXQ0KCkuc2V0SWRlbnRpdHkoKTtcblxufVxuXG5cblxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcblxuaW1wb3J0IHsgZXBzaWxvbiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgdmVjNCB7XG5cbiAgICBwcml2YXRlIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XG5cbiAgICBnZXQgeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG4gICAgfVxuXG4gICAgZ2V0IHkoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdO1xuICAgIH1cblxuICAgIGdldCB6KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1syXTtcbiAgICB9XG5cbiAgICBnZXQgdygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbM107XG4gICAgfVxuXG4gICAgZ2V0IHh5KCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgeHl6KCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCB4eXp3KCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1syXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzNdXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgc2V0IHgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHNldCB5KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgeih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHcodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHNldCB4eSh2YWx1ZXM6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcbiAgICB9XG5cbiAgICBzZXQgeHl6KHZhbHVlczogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcbiAgICB9XG5cbiAgICBzZXQgeHl6dyh2YWx1ZXM6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWVzWzBdO1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlc1sxXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZXNbMl07XG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWVzWzNdO1xuICAgIH1cblxuICAgIGdldCByKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcbiAgICB9XG5cbiAgICBnZXQgZygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMV07XG4gICAgfVxuXG4gICAgZ2V0IGIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzJdO1xuICAgIH1cblxuICAgIGdldCBhKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1szXTtcbiAgICB9XG5cbiAgICBnZXQgcmcoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCByZ2IoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IHJnYmEoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbMF0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1sxXSxcbiAgICAgICAgICAgIHRoaXMudmFsdWVzWzJdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbM11cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBzZXQgcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGcodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHNldCBiKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgYSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHJnKHZhbHVlczogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xuICAgIH1cblxuICAgIHNldCByZ2IodmFsdWVzOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IHZhbHVlc1swXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB2YWx1ZXNbMV07XG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gdmFsdWVzWzJdO1xuICAgIH1cblxuICAgIHNldCByZ2JhKHZhbHVlczogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSB2YWx1ZXNbMF07XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gdmFsdWVzWzFdO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IHZhbHVlc1syXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSB2YWx1ZXNbM107XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodmFsdWVzOiBudW1iZXJbXSA9IG51bGwpIHtcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy54eXp3ID0gdmFsdWVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXQoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMueCA9IDA7XG4gICAgICAgIHRoaXMueSA9IDA7XG4gICAgICAgIHRoaXMueiA9IDA7XG4gICAgICAgIHRoaXMudyA9IDA7XG4gICAgfVxuXG4gICAgY29weShkZXN0OiB2ZWM0ID0gbnVsbCk6IHZlYzQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgdmVjNCgpO1xuXG4gICAgICAgIGRlc3QueCA9IHRoaXMueDtcbiAgICAgICAgZGVzdC55ID0gdGhpcy55O1xuICAgICAgICBkZXN0LnogPSB0aGlzLno7XG4gICAgICAgIGRlc3QudyA9IHRoaXMudztcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBuZWdhdGUoZGVzdDogdmVjNCA9IG51bGwpOiB2ZWM0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gdGhpcztcblxuICAgICAgICBkZXN0LnggPSAtdGhpcy54O1xuICAgICAgICBkZXN0LnkgPSAtdGhpcy55O1xuICAgICAgICBkZXN0LnogPSAtdGhpcy56O1xuICAgICAgICBkZXN0LncgPSAtdGhpcy53O1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGVxdWFscyh2ZWN0b3I6IHZlYzQsIHRocmVzaG9sZCA9IGVwc2lsb24pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMueCAtIHZlY3Rvci54KSA+IHRocmVzaG9sZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy55IC0gdmVjdG9yLnkpID4gdGhyZXNob2xkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnogLSB2ZWN0b3IueikgPiB0aHJlc2hvbGQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudyAtIHZlY3Rvci53KSA+IHRocmVzaG9sZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnNxdWFyZWRMZW5ndGgoKSk7XG4gICAgfVxuXG4gICAgc3F1YXJlZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy54LFxuICAgICAgICAgICAgeSA9IHRoaXMueSxcbiAgICAgICAgICAgIHogPSB0aGlzLnosXG4gICAgICAgICAgICB3ID0gdGhpcy53O1xuXG4gICAgICAgIHJldHVybiAoeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xuICAgIH1cblxuICAgIGFkZCh2ZWN0b3I6IHZlYzQpOiB2ZWM0IHtcbiAgICAgICAgdGhpcy54ICs9IHZlY3Rvci54O1xuICAgICAgICB0aGlzLnkgKz0gdmVjdG9yLnk7XG4gICAgICAgIHRoaXMueiArPSB2ZWN0b3IuejtcbiAgICAgICAgdGhpcy53ICs9IHZlY3Rvci53O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN1YnRyYWN0KHZlY3RvcjogdmVjNCk6IHZlYzQge1xuICAgICAgICB0aGlzLnggLT0gdmVjdG9yLng7XG4gICAgICAgIHRoaXMueSAtPSB2ZWN0b3IueTtcbiAgICAgICAgdGhpcy56IC09IHZlY3Rvci56O1xuICAgICAgICB0aGlzLncgLT0gdmVjdG9yLnc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHkodmVjdG9yOiB2ZWM0KTogdmVjNCB7XG4gICAgICAgIHRoaXMueCAqPSB2ZWN0b3IueDtcbiAgICAgICAgdGhpcy55ICo9IHZlY3Rvci55O1xuICAgICAgICB0aGlzLnogKj0gdmVjdG9yLno7XG4gICAgICAgIHRoaXMudyAqPSB2ZWN0b3IudztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkaXZpZGUodmVjdG9yOiB2ZWM0KTogdmVjNCB7XG4gICAgICAgIHRoaXMueCAvPSB2ZWN0b3IueDtcbiAgICAgICAgdGhpcy55IC89IHZlY3Rvci55O1xuICAgICAgICB0aGlzLnogLz0gdmVjdG9yLno7XG4gICAgICAgIHRoaXMudyAvPSB2ZWN0b3IudztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzY2FsZSh2YWx1ZTogbnVtYmVyLCBkZXN0OiB2ZWM0ID0gbnVsbCk6IHZlYzQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSB0aGlzO1xuXG4gICAgICAgIGRlc3QueCAqPSB2YWx1ZTtcbiAgICAgICAgZGVzdC55ICo9IHZhbHVlO1xuICAgICAgICBkZXN0LnogKj0gdmFsdWU7XG4gICAgICAgIGRlc3QudyAqPSB2YWx1ZTtcblxuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBub3JtYWxpemUoZGVzdDogdmVjNCA9IG51bGwpOiB2ZWM0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gdGhpcztcblxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcblxuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRlc3QueCAqPSAwO1xuICAgICAgICAgICAgZGVzdC55ICo9IDA7XG4gICAgICAgICAgICBkZXN0LnogKj0gMDtcbiAgICAgICAgICAgIGRlc3QudyAqPSAwO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aCA9IDEuMCAvIGxlbmd0aDtcblxuICAgICAgICBkZXN0LnggKj0gbGVuZ3RoO1xuICAgICAgICBkZXN0LnkgKj0gbGVuZ3RoO1xuICAgICAgICBkZXN0LnogKj0gbGVuZ3RoO1xuICAgICAgICBkZXN0LncgKj0gbGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIG11bHRpcGx5TWF0NChtYXRyaXg6IG1hdDQsIGRlc3Q6IHZlYzQgPSBudWxsKTogdmVjNCB7XG4gICAgICAgIGlmICghZGVzdCkgZGVzdCA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tdWx0aXBseVZlYzQodGhpcywgZGVzdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG1peCh2ZWN0b3I6IHZlYzQsIHZlY3RvcjI6IHZlYzQsIHRpbWU6IG51bWJlciwgZGVzdDogdmVjNCA9IG51bGwpOiB2ZWM0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzQoKTtcblxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCArIHRpbWUgKiAodmVjdG9yMi54IC0gdmVjdG9yLngpO1xuICAgICAgICBkZXN0LnkgPSB2ZWN0b3IueSArIHRpbWUgKiAodmVjdG9yMi55IC0gdmVjdG9yLnkpO1xuICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHRpbWUgKiAodmVjdG9yMi56IC0gdmVjdG9yLnopO1xuICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyArIHRpbWUgKiAodmVjdG9yMi53IC0gdmVjdG9yLncpO1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBzdW0odmVjdG9yOiB2ZWM0LCB2ZWN0b3IyOiB2ZWM0LCBkZXN0OiB2ZWM0ID0gbnVsbCk6IHZlYzQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgdmVjNCgpO1xuXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICsgdmVjdG9yMi54LFxuICAgICAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKyB2ZWN0b3IyLnksXG4gICAgICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiArIHZlY3RvcjIueixcbiAgICAgICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICsgdmVjdG9yMi53XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpZmZlcmVuY2UodmVjdG9yOiB2ZWM0LCB2ZWN0b3IyOiB2ZWM0LCBkZXN0OiB2ZWM0ID0gbnVsbCk6IHZlYzQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgdmVjNCgpO1xuXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54IC0gdmVjdG9yMi54LFxuICAgICAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgLSB2ZWN0b3IyLnksXG4gICAgICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAtIHZlY3RvcjIueixcbiAgICAgICAgICAgIGRlc3QudyA9IHZlY3Rvci53IC0gdmVjdG9yMi53XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIHByb2R1Y3QodmVjdG9yOiB2ZWM0LCB2ZWN0b3IyOiB2ZWM0LCBkZXN0OiB2ZWM0ID0gbnVsbCk6IHZlYzQge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgdmVjNCgpO1xuXG4gICAgICAgIGRlc3QueCA9IHZlY3Rvci54ICogdmVjdG9yMi54LFxuICAgICAgICAgICAgZGVzdC55ID0gdmVjdG9yLnkgKiB2ZWN0b3IyLnksXG4gICAgICAgICAgICBkZXN0LnogPSB2ZWN0b3IueiAqIHZlY3RvcjIueixcbiAgICAgICAgICAgIGRlc3QudyA9IHZlY3Rvci53ICogdmVjdG9yMi53XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIHF1b3RpZW50KHZlY3RvcjogdmVjNCwgdmVjdG9yMjogdmVjNCwgZGVzdDogdmVjNCA9IG51bGwpOiB2ZWM0IHtcbiAgICAgICAgaWYgKCFkZXN0KSBkZXN0ID0gbmV3IHZlYzQoKTtcblxuICAgICAgICBkZXN0LnggPSB2ZWN0b3IueCAvIHZlY3RvcjIueCxcbiAgICAgICAgICAgIGRlc3QueSA9IHZlY3Rvci55IC8gdmVjdG9yMi55LFxuICAgICAgICAgICAgZGVzdC56ID0gdmVjdG9yLnogLyB2ZWN0b3IyLnosXG4gICAgICAgICAgICBkZXN0LncgPSB2ZWN0b3IudyAvIHZlY3RvcjIud1xuXG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyB6ZXJvID0gbmV3IHZlYzQoWzAsIDAsIDAsIDFdKTtcbn1cblxuXG5cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTggTWF0dGhpYXMgRmVyY2hcbiAqXG4gKiBQcm9qZWN0IGhvbWVwYWdlOiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGhpYXNmZXJjaC90c21cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuICogd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4gKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuICpcbiAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuICpcbiAqICAgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4gKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4gKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuICpcbiAqICAgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90XG4gKiAgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4gKlxuICogICAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlXG4gKiAgICBkaXN0cmlidXRpb24uXG4gKi9cblxuaW1wb3J0IHZlYzIgZnJvbSBcIi4vdmVjMlwiO1xuaW1wb3J0IHZlYzMgZnJvbSBcIi4vdmVjM1wiO1xuaW1wb3J0IHZlYzQgZnJvbSBcIi4vdmVjNFwiO1xuaW1wb3J0IG1hdDIgZnJvbSBcIi4vbWF0MlwiO1xuaW1wb3J0IG1hdDMgZnJvbSBcIi4vbWF0M1wiO1xuaW1wb3J0IG1hdDQgZnJvbSBcIi4vbWF0NFwiO1xuaW1wb3J0IHF1YXQgZnJvbSBcIi4vcXVhdFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgdmVjMiwgdmVjMywgdmVjNCwgXG4gICAgbWF0MiwgbWF0MywgbWF0NCwgXG4gICAgcXVhdFxufTtcblxuXG4iLCJpbXBvcnQgdmVjMiBmcm9tICcuL3ZlYzInO1xuXG5pbXBvcnQgeyBlcHNpbG9uIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBtYXQyIHtcblxuICAgIHByaXZhdGUgdmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSg0KTtcblxuICAgIGNvbnN0cnVjdG9yKHZhbHVlczogbnVtYmVyW10gPSBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCh2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXQoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF07XG4gICAgfVxuXG4gICAgaW5pdCh2YWx1ZXM6IG51bWJlcltdKTogbWF0MiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpXSA9IHZhbHVlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlc2V0KCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaV0gPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29weShkZXN0OiBtYXQyID0gbnVsbCk6IG1hdDIge1xuICAgICAgICBpZiAoIWRlc3QpIGRlc3QgPSBuZXcgbWF0MigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBkZXN0LnZhbHVlc1tpXSA9IHRoaXMudmFsdWVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgYWxsKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgZGF0YTogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzLnZhbHVlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHJvdyhpbmRleDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKiAyICsgMF0sXG4gICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRleCAqIDIgKyAxXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGNvbChpbmRleDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXhdLFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kZXggKyAyXVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGVxdWFscyhtYXRyaXg6IG1hdDIsIHRocmVzaG9sZCA9IGVwc2lsb24pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnZhbHVlc1tpXSAtIG1hdHJpeC5hdChpKSkgPiB0aHJlc2hvbGQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZGV0ZXJtaW5hbnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdICogdGhpcy52YWx1ZXNbM10gLSB0aGlzLnZhbHVlc1syXSAqIHRoaXMudmFsdWVzWzFdO1xuICAgIH1cblxuICAgIHNldElkZW50aXR5KCk6IG1hdDIge1xuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IDE7XG4gICAgICAgIHRoaXMudmFsdWVzWzFdID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSAwO1xuICAgICAgICB0aGlzLnZhbHVlc1szXSA9IDE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdHJhbnNwb3NlKCk6IG1hdDIge1xuICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy52YWx1ZXNbMV07XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSB0aGlzLnZhbHVlc1syXTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSB0ZW1wO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGludmVyc2UoKTogbWF0MiB7XG4gICAgICAgIGxldCBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XG5cbiAgICAgICAgaWYgKCFkZXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGRldCA9IDEuMCAvIGRldDtcblxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1swXVxuXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gZGV0ICogKHRoaXMudmFsdWVzWzNdKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBkZXQgKiAoLXRoaXMudmFsdWVzWzFdKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBkZXQgKiAoLXRoaXMudmFsdWVzWzJdKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBkZXQgKiBhMTE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbXVsdGlwbHkobWF0cml4OiBtYXQyKTogbWF0MiB7XG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgYTEyID0gdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICBhMjEgPSB0aGlzLnZhbHVlc1syXSxcbiAgICAgICAgICAgIGEyMiA9IHRoaXMudmFsdWVzWzNdO1xuXG4gICAgICAgIHRoaXMudmFsdWVzWzBdID0gYTExICogbWF0cml4LmF0KDApICsgYTEyICogbWF0cml4LmF0KDIpO1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGExMSAqIG1hdHJpeC5hdCgxKSArIGExMiAqIG1hdHJpeC5hdCgzKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbMl0gPSBhMjEgKiBtYXRyaXguYXQoMCkgKyBhMjIgKiBtYXRyaXguYXQoMik7XG4gICAgICAgIHRoaXMudmFsdWVzWzNdID0gYTIxICogbWF0cml4LmF0KDEpICsgYTIyICogbWF0cml4LmF0KDMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJvdGF0ZShhbmdsZTogbnVtYmVyKTogbWF0MiB7XG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMudmFsdWVzWzBdLFxuICAgICAgICAgICAgYTEyID0gdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICBhMjEgPSB0aGlzLnZhbHVlc1syXSxcbiAgICAgICAgICAgIGEyMiA9IHRoaXMudmFsdWVzWzNdO1xuXG4gICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcblxuICAgICAgICB0aGlzLnZhbHVlc1swXSA9IGExMSAqIGNvcyArIGExMiAqIHNpbjtcbiAgICAgICAgdGhpcy52YWx1ZXNbMV0gPSBhMTEgKiAtc2luICsgYTEyICogY29zO1xuICAgICAgICB0aGlzLnZhbHVlc1syXSA9IGEyMSAqIGNvcyArIGEyMiAqIHNpbjtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBhMjEgKiAtc2luICsgYTIyICogY29zO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG11bHRpcGx5VmVjMih2ZWN0b3I6IHZlYzIsIHJlc3VsdDogdmVjMiA9IG51bGwpOiB2ZWMyIHtcbiAgICAgICAgY29uc3QgeCA9IHZlY3Rvci54LFxuICAgICAgICAgICAgeSA9IHZlY3Rvci55O1xuXG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdC54eSA9IFtcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzNdXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWMyKFtcbiAgICAgICAgICAgICAgICB4ICogdGhpcy52YWx1ZXNbMF0gKyB5ICogdGhpcy52YWx1ZXNbMV0sXG4gICAgICAgICAgICAgICAgeCAqIHRoaXMudmFsdWVzWzJdICsgeSAqIHRoaXMudmFsdWVzWzNdXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjYWxlKHZlY3RvcjogdmVjMik6IG1hdDIge1xuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLnZhbHVlc1swXSxcbiAgICAgICAgICAgIGExMiA9IHRoaXMudmFsdWVzWzFdLFxuICAgICAgICAgICAgYTIxID0gdGhpcy52YWx1ZXNbMl0sXG4gICAgICAgICAgICBhMjIgPSB0aGlzLnZhbHVlc1szXTtcblxuICAgICAgICBjb25zdCB4ID0gdmVjdG9yLngsXG4gICAgICAgICAgICB5ID0gdmVjdG9yLnk7XG5cbiAgICAgICAgdGhpcy52YWx1ZXNbMF0gPSBhMTEgKiB4O1xuICAgICAgICB0aGlzLnZhbHVlc1sxXSA9IGExMiAqIHk7XG4gICAgICAgIHRoaXMudmFsdWVzWzJdID0gYTIxICogeDtcbiAgICAgICAgdGhpcy52YWx1ZXNbM10gPSBhMjIgKiB5O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9kdWN0KG0xOiBtYXQyLCBtMjogbWF0MiwgcmVzdWx0OiBtYXQyID0gbnVsbCk6IG1hdDIge1xuICAgICAgICBjb25zdCBhMTEgPSBtMS5hdCgwKSxcbiAgICAgICAgICAgIGExMiA9IG0xLmF0KDEpLFxuICAgICAgICAgICAgYTIxID0gbTEuYXQoMiksXG4gICAgICAgICAgICBhMjIgPSBtMS5hdCgzKTtcblxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQuaW5pdChbXG4gICAgICAgICAgICAgICAgYTExICogbTIuYXQoMCkgKyBhMTIgKiBtMi5hdCgyKSxcbiAgICAgICAgICAgICAgICBhMTEgKiBtMi5hdCgxKSArIGExMiAqIG0yLmF0KDMpLFxuICAgICAgICAgICAgICAgIGEyMSAqIG0yLmF0KDApICsgYTIyICogbTIuYXQoMiksXG4gICAgICAgICAgICAgICAgYTIxICogbTIuYXQoMSkgKyBhMjIgKiBtMi5hdCgzKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IG1hdDIoW1xuICAgICAgICAgICAgICAgIGExMSAqIG0yLmF0KDApICsgYTEyICogbTIuYXQoMiksXG4gICAgICAgICAgICAgICAgYTExICogbTIuYXQoMSkgKyBhMTIgKiBtMi5hdCgzKSxcbiAgICAgICAgICAgICAgICBhMjEgKiBtMi5hdCgwKSArIGEyMiAqIG0yLmF0KDIpLFxuICAgICAgICAgICAgICAgIGEyMSAqIG0yLmF0KDEpICsgYTIyICogbTIuYXQoMylcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlkZW50aXR5ID0gbmV3IG1hdDIoKS5zZXRJZGVudGl0eSgpO1xuXG59XG5cblxuXG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +"use strict"; +/* + * Copyright (c) 2012, 2018 Matthias Ferch + * + * Project homepage: https://github.com/matthiasferch/tsm + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +var mat2_1 = require("./mat2"); +var mat3_1 = require("./mat3"); +var mat4_1 = require("./mat4"); +var quat_1 = require("./quat"); +var vec2_1 = require("./vec2"); +var vec3_1 = require("./vec3"); +var vec4_1 = require("./vec4"); +exports.default = { + vec2: vec2_1.default, vec3: vec3_1.default, vec4: vec4_1.default, + mat2: mat2_1.default, mat3: mat3_1.default, mat4: mat4_1.default, + quat: quat_1.default, +}; +//# sourceMappingURL=tsm.js.map \ No newline at end of file diff --git a/package.json b/package.json index fccd09c..990088e 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,23 @@ { - "name": "tsm", + "name": "@tlaukkan/tsm", "version": "0.8.0", - "description": "A TypeScript vector and matrix math library", + "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", - "module": "src/tsm.js", + "main": "src/tsm.js", + "types": "src/tsm.d.ts", "scripts": { "test": "mocha -r ts-node/register test/**/*.spec.ts", "lint": "tslint src/*.ts -t verbose", - "build": "webpack", - "watch": "webpack --watch" + "build": "tsc" }, "devDependencies": { "@types/chai": "^4.1.4", "@types/mocha": "^5.2.5", "chai": "^4.1.2", "mocha": "^5.2.0", - "ts-loader": "^5.1.0", "ts-node": "^7.0.1", "tslint": "^5.11.0", - "typescript": "^3.0.3", - "webpack": "^4.18.0", - "webpack-cli": "^3.1.0" + "typescript": "^3.0.3" }, "dependencies": {} } diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 22e1f97..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,23 +0,0 @@ -const path = require('path'); - -module.exports = { - entry: './src/tsm.ts', - devtool: 'inline-source-map', - module: { - rules: [ - { - test: /\.ts$/, - use: 'ts-loader', - exclude: /node_modules/ - } - ] - }, - resolve: { - extensions: ['.ts'] - }, - output: { - library: 'tsm', - filename: 'tsm.js', - path: path.resolve(__dirname, 'dist') - } -}; \ No newline at end of file From 451b9b7c426be2aa6111667a9be645aed92cd830 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:19:31 +0300 Subject: [PATCH 02/10] 0.8.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 990088e..7fa75cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tlaukkan/tsm", - "version": "0.8.0", + "version": "0.8.1", "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", "main": "src/tsm.js", From 26ec29a60371ac114b0b3a6e9a7a62c751d3ed79 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:22:53 +0300 Subject: [PATCH 03/10] Adding typescript definitions. --- dist/tsm.js | 39 --------------------------------------- tsconfig.json | 3 ++- 2 files changed, 2 insertions(+), 40 deletions(-) delete mode 100644 dist/tsm.js diff --git a/dist/tsm.js b/dist/tsm.js deleted file mode 100644 index e3258dc..0000000 --- a/dist/tsm.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; -/* - * Copyright (c) 2012, 2018 Matthias Ferch - * - * Project homepage: https://github.com/matthiasferch/tsm - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -var mat2_1 = require("./mat2"); -var mat3_1 = require("./mat3"); -var mat4_1 = require("./mat4"); -var quat_1 = require("./quat"); -var vec2_1 = require("./vec2"); -var vec3_1 = require("./vec3"); -var vec4_1 = require("./vec4"); -exports.default = { - vec2: vec2_1.default, vec3: vec3_1.default, vec4: vec4_1.default, - mat2: mat2_1.default, mat3: mat3_1.default, mat4: mat4_1.default, - quat: quat_1.default, -}; -//# sourceMappingURL=tsm.js.map \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 052fe96..6a8bd4a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,9 +6,10 @@ "./test/**/*.spec.ts" ], "compilerOptions": { + "declaration": true, "outDir": "./dist/", "module": "commonjs", "target": "es5", - "sourceMap": true, + "sourceMap": true } } \ No newline at end of file From 2be9f38f7a2d44dd1883208de2f96549d9f22cce Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:23:24 +0300 Subject: [PATCH 04/10] Adding typescript definitions. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8073570..e4d484a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ tsm: A Typescript vector and matrix math library ================================================= -This is node packaged version of the library. +This is new packaging of the library for node + TypeScript. tsm is a a collection of vector, matrix and quaternion classes written in Typescript. From 53c101ebe23dafd2609a1dbc351ce42c2bebdfe0 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:23:37 +0300 Subject: [PATCH 05/10] 0.8.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7fa75cb..b0eeef6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tlaukkan/tsm", - "version": "0.8.1", + "version": "0.8.2", "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", "main": "src/tsm.js", From bb9c8fbc217bef6c339ead93f34b27df5a19a460 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:25:41 +0300 Subject: [PATCH 06/10] Adding typescript definitions. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b0eeef6..9a2bb68 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "scripts": { "test": "mocha -r ts-node/register test/**/*.spec.ts", "lint": "tslint src/*.ts -t verbose", - "build": "tsc" + "build": "tsc", + "prepublishOnly": "npm run build" }, "devDependencies": { "@types/chai": "^4.1.4", From 06983cd78ca3fca7036e5bf538da80c0986550b8 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:25:45 +0300 Subject: [PATCH 07/10] 0.8.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a2bb68..0804a54 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tlaukkan/tsm", - "version": "0.8.2", + "version": "0.8.3", "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", "main": "src/tsm.js", From db83fd2f282920c63a67453004c397224bb70d1b Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:32:43 +0300 Subject: [PATCH 08/10] Adding typescript definitions. --- package.json | 4 ++-- src/index.ts | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 src/index.ts diff --git a/package.json b/package.json index 0804a54..877f79e 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.8.3", "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", - "main": "src/tsm.js", - "types": "src/tsm.d.ts", + "main": "src/index.js", + "types": "src/index.d.ts", "scripts": { "test": "mocha -r ts-node/register test/**/*.spec.ts", "lint": "tslint src/*.ts -t verbose", diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..b2b68ba --- /dev/null +++ b/src/index.ts @@ -0,0 +1,7 @@ +export { default as mat2 } from './mat2' +export { default as mat3 } from './mat3' +export { default as mat4 } from './mat4' +export { default as quat } from './quat' +export { default as vec2 } from './vec2' +export { default as vec3 } from './vec3' +export { default as vec4 } from './vec4' From c9ea9e51da15f59c452fa2aceed53a4d4921f761 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:32:58 +0300 Subject: [PATCH 09/10] 0.8.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 877f79e..74fc5cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tlaukkan/tsm", - "version": "0.8.3", + "version": "0.8.4", "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", "main": "src/index.js", From 11a38a00183008a3ecf3bae95f28d6fe35ba1031 Mon Sep 17 00:00:00 2001 From: "Tommi S.E. Laukkanen" Date: Sun, 7 Oct 2018 21:35:23 +0300 Subject: [PATCH 10/10] Adding typescript definitions. --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 74fc5cc..1966671 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.8.4", "description": "A node version of the TypeScript vector and matrix math library.", "author": "Matthias Ferch", - "main": "src/index.js", - "types": "src/index.d.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { "test": "mocha -r ts-node/register test/**/*.spec.ts", "lint": "tslint src/*.ts -t verbose",