amr-recorder
Version:
amr 音频录制与播放(微信语音所用的格式)
1 lines • 451 kB
JavaScript
!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).BenzAMRRecorder=i()}(this,(function(){function e(e,i){if(!(e instanceof i))throw new TypeError("Cannot call a class as a function")}function i(e,i){for(var r=0;r<i.length;r++){var n=i[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function r(e,r,n){return r&&i(e.prototype,r),n&&i(e,n),e}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n={exports:{}};!function(e,i){e.exports=function(){var e=function(){var e,i=0,r=[],n=[];function t(i){e=i.sampleRate}function f(e){r.push(e[0]),n.push(e[1]),i+=e[0].length}function o(e){var t=w(s(u(r,i),u(n,i))),f=new Blob([t],{type:e});self.postMessage({type:"blob",data:f})}function a(){var e=[];e.push(u(r,i)),e.push(u(n,i)),self.postMessage({type:"buffer",data:e})}function l(){i=0,r=[],n=[]}function u(e,i){for(var r=new Float32Array(i),n=0,t=0;t<e.length;t++)r.set(e[t],n),n+=e[t].length;return r}function s(e,i){for(var r=e.length+i.length,n=new Float32Array(r),t=0,f=0;t<r;)n[t++]=e[f],n[t++]=i[f],f++;return n}function c(e,i,r){for(var n=0;n<r.length;n++,i+=2){var t=Math.max(-1,Math.min(1,r[n]));e.setInt16(i,t<0?32768*t:32767*t,!0)}}function h(e,i,r){for(var n=0;n<r.length;n++)e.setUint8(i+n,r.charCodeAt(n))}function w(i){var r=new ArrayBuffer(44+2*i.length),n=new DataView(r);return h(n,0,"RIFF"),n.setUint32(4,36+2*i.length,!0),h(n,8,"WAVE"),h(n,12,"fmt "),n.setUint32(16,16,!0),n.setUint16(20,1,!0),n.setUint16(22,2,!0),n.setUint32(24,e,!0),n.setUint32(28,4*e,!0),n.setUint16(32,4,!0),n.setUint16(34,16,!0),h(n,36,"data"),n.setUint32(40,2*i.length,!0),c(n,44,i),n}self.onmessage=function(e){switch(e.data.command){case"init":t(e.data.config);break;case"record":f(e.data.buffer);break;case"exportWAV":o(e.data.type);break;case"getBuffer":a();break;case"clear":l()}}}.toString().replace(/^\s*function.*?\(\)\s*{/,"").replace(/}\s*$/,""),i=function(i,r){var n=r||{},t=n.bufferLen||4096;this.context=i.context,this.node=(this.context.createScriptProcessor||this.context.createJavaScriptNode).call(this.context,t,2,2);var f=new Worker((window.URL||window.webkitURL).createObjectURL(new Blob([e],{type:"text/javascript"})));f.onmessage=function(e){"blob"===e.data.type?a(e.data.data):o(e.data.data)},f.postMessage({command:"init",config:{sampleRate:this.context.sampleRate}});var o,a,l=!1;this.node.onaudioprocess=function(e){l&&f.postMessage({command:"record",buffer:[e.inputBuffer.getChannelData(0),e.inputBuffer.getChannelData(1)]})},this.configure=function(e){for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i])},this.record=function(){l=!0},this.stop=function(){l=!1},this.clear=function(){f.postMessage({command:"clear"})},this.getBuffer=function(e){o=e||n.callback,f.postMessage({command:"getBuffer"})},this.exportWAV=function(e,i){if(a=e||n.callback,i=i||n.type||"audio/wav",!a)throw new Error("Callback not set");f.postMessage({command:"exportWAV",type:i})},this.release=function(){this.stop(),this.clear(),this.configure=this.record=this.stop=this.clear=this.getBuffer=this.exportWAV=function(){},i.disconnect(this.node),this.node.onaudioprocess=null,this.node.disconnect(),f.terminate()},i.connect(this.node),this.node.connect(this.context.destination)};return i.forceDownload=function(e,i){var r=(window.URL||window.webkitURL).createObjectURL(e),n=window.document.createElement("a");n.href=r,n.download=i||"output.wav";var t=document.createEvent("Event");t.initEvent("click",!0,!0),n.dispatchEvent(t)},i}()}(n);var t=n.exports,f=window.AudioContext||window.webkitAudioContext||window.mozAudioContext,o=null,a=!0;f||(a=!1,console.warn("Web Audio API is Unsupported."));var l=function(){function i(){e(this,i),this.o=null,this.u=null,this.k=null,this.p=!1,this.g=null}return r(i,[{key:"playPcm",value:function(e,i,r,n){o&&"closed"!==o.state||(o=new f),"interrupted"!==o.state&&"suspended"!==o.state||o.resume(),i=i||8e3,this.stopPcm();var t,a=n&&n>.001?e.slice(i*n):e;if(!a.length)return r();this.g=o.createBufferSource();try{t=o.createBuffer(1,a.length,i)}catch(l){i<11025?(t=o.createBuffer(1,a.length,4*i),this.g.playbackRate.value=.25):(t=o.createBuffer(1,a.length,2*i),this.g.playbackRate.value=.5)}t.copyToChannel?t.copyToChannel(a,0,0):t.getChannelData(0).set(a),this.g.buffer=t,this.g.loop=!1,this.g.connect(o.destination),this.g.onended=r,this.g.start()}},{key:"stopPcm",value:function(){this.g&&(this.g.stop(),this.g=null)}},{key:"stopPcmSilently",value:function(){this.g.onended=null,this.stopPcm()}},{key:"initRecorder",value:function(){var e=this;return new Promise((function(i,r){var n=function(r){e.o=r,e.u=o.createMediaStreamSource(r),e.k=new t(e.u),e.p=!1,i()},f=function(e){r(e)};e.k?i():window.navigator.mediaDevices&&window.navigator.mediaDevices.getUserMedia?window.navigator.mediaDevices.getUserMedia({audio:!0}).then(n).catch(f):window.navigator.getUserMedia?window.navigator.getUserMedia({audio:!0},n,f):f()}))}},{key:"isRecording",value:function(){return this.k&&this.p}},{key:"startRecord",value:function(){this.k&&(this.k.clear(),this.k.record(),this.p=!0)}},{key:"stopRecord",value:function(){this.k&&(this.k.stop(),this.p=!1)}},{key:"generateRecordSamples",value:function(){var e=this;return new Promise((function(i){e.k&&e.k.getBuffer((function(e){i(e[0])}))}))}},{key:"releaseRecord",value:function(){this.o&&this.o.getTracks&&(this.o.getTracks().forEach((function(e){e.stop()})),this.o=null),this.k&&(this.k.release(),this.k=null)}}],[{key:"isPlaySupported",value:function(){return a}},{key:"isRecordSupported",value:function(){return!!(window.navigator.mediaDevices&&window.navigator.mediaDevices.getUserMedia||window.navigator.getUserMedia)}},{key:"getCtxSampleRate",value:function(){return o&&o.sampleRate||0}},{key:"getCtxTime",value:function(){return o&&o.currentTime||0}},{key:"decodeAudioArrayBufferByContext",value:function(e){return new Promise((function(i,r){o.decodeAudioData(e,(function(e){var r=e.numberOfChannels,n=new Float32Array(e.length);switch(r){default:case 1:n=e.getChannelData(0);break;case 2:for(var t=e.getChannelData(0),f=e.getChannelData(1),o=0,a=n.length;o<a;o++)n[o]=.5*(t[o]+f[o]);break;case 4:for(var l=e.getChannelData(0),u=e.getChannelData(1),s=e.getChannelData(2),c=e.getChannelData(3),h=0,w=n.length;h<w;h++)n[h]=.25*(l[h]+u[h]+s[h]+c[h]);break;case 6:for(var d=e.getChannelData(0),v=e.getChannelData(1),b=e.getChannelData(2),k=e.getChannelData(4),m=e.getChannelData(5),y=0,p=n.length;y<p;y++)n[y]=.7071*(d[y]+v[y])+b[y]+.5*(k[y]+m[y])}i(n)}),r)}))}}]),i}(),u=function(){var e=function(){var e,i={toWAV:function(e){var i=this.A(e);if(!i)return null;var r=new Uint8Array(i.buffer,i.byteOffset,i.byteLength),n=new Uint8Array(r.length+this.WAV_HEADER_SIZE),t=0,f=function(e){var i=new Uint8Array(2);new Int16Array(i.buffer)[0]=e,n.set(i,t),t+=2},o=function(e){var i=new Uint8Array(4);new Int32Array(i.buffer)[0]=e,n.set(i,t),t+=4},a=function(e){var i=new TextEncoder("utf-8").encode(e);n.set(i,t),t+=i.length};a("RIFF"),o(36+r.length),a("WAVEfmt "),o(16);return f(1),f(1),o(8e3),o(16e3),f(2),f(16),a("data"),o(r.length),n.set(r,t),n},decode:function(e){var i=this.A(e);if(!i)return null;for(var r=new Float32Array(i.length),n=0;n<r.length;n++)r[n]=i[n]/32768;return r},A:function(i){if(String.fromCharCode.apply(null,i.subarray(0,this.AMR_HEADER.length))!==this.AMR_HEADER)return null;var r=this.Decoder_Interface_init();if(!r)return null;var n=new Int16Array(Math.floor(i.length/6*this.PCM_BUFFER_COUNT)),t=e.S(this.AMR_BUFFER_COUNT),f=new Uint8Array(e.HEAPU8.buffer,t,this.AMR_BUFFER_COUNT);t=e.S(2*this.PCM_BUFFER_COUNT);for(var o=new Int16Array(e.HEAPU8.buffer,t,this.PCM_BUFFER_COUNT),a=6,l=0;a+1<i.length&&l+1<n.length;){var u=this.SIZES[i[a]>>3&15];if(a+u+1>i.length)break;if(f.set(i.subarray(a,a+u+1)),this.Decoder_Interface_Decode(r,f.byteOffset,o.byteOffset,0),l+this.PCM_BUFFER_COUNT>n.length){var s=new Int16Array(2*n.length);s.set(n.subarray(0,l)),n=s}n.set(o,l),l+=this.PCM_BUFFER_COUNT,a+=u+1}return e._(f.byteOffset),e._(o.byteOffset),this.Decoder_Interface_exit(r),n.subarray(0,l)},encode:function(i,r,n){if(r<8e3)return console.error("pcmSampleRate should not be less than 8000."),null;void 0===n&&(n=this.Mode.MR795);var t=this.Encoder_Interface_init();if(!t)return null;var f=e.S(2*this.PCM_BUFFER_COUNT),o=new Int16Array(e.HEAPU8.buffer,f,this.PCM_BUFFER_COUNT);f=e.S(this.AMR_BUFFER_COUNT);for(var a=new Uint8Array(e.HEAPU8.buffer,f,this.AMR_BUFFER_COUNT),l=r/8e3,u=Math.floor(i.length/l),s=new Int16Array(u),c=0;c<u;c++)s[c]=32767*i[Math.floor(c*l)];var h=this.SIZES[n]+1,w=new Uint8Array(Math.ceil(u/this.PCM_BUFFER_COUNT*h)+this.AMR_HEADER.length);w.set(new TextEncoder("utf-8").encode(this.AMR_HEADER));for(var d=0,v=this.AMR_HEADER.length;d+this.PCM_BUFFER_COUNT<s.length&&v+h<w.length;){o.set(s.subarray(d,d+this.PCM_BUFFER_COUNT));var b=this.Encoder_Interface_Encode(t,n,o.byteOffset,a.byteOffset,0);if(b!=h){console.error([b,h]);break}w.set(a.subarray(0,b),v),d+=this.PCM_BUFFER_COUNT,v+=b}return e._(o.byteOffset),e._(a.byteOffset),this.Encoder_Interface_exit(t),w.subarray(0,v)},Decoder_Interface_init:function(){return console.warn("Decoder_Interface_init not initialized."),0},Decoder_Interface_exit:function(e){console.warn("Decoder_Interface_exit not initialized.")},Decoder_Interface_Decode:function(e,i,r,n){console.warn("Decoder_Interface_Decode not initialized.")},Encoder_Interface_init:function(e){return console.warn("Encoder_Interface_init not initialized."),0},Encoder_Interface_exit:function(e){console.warn("Encoder_Interface_exit not initialized.")},Encoder_Interface_Encode:function(e,i,r,n,t){console.warn("Encoder_Interface_Encode not initialized.")},Mode:{MR475:0,MR515:1,MR59:2,MR67:3,MR74:4,MR795:5,MR102:6,MR122:7,MRDTX:8},SIZES:[12,13,15,17,19,20,26,31,5,6,5,5,0,0,0,0],AMR_BUFFER_COUNT:32,PCM_BUFFER_COUNT:160,AMR_HEADER:"#!AMR\n",WAV_HEADER_SIZE:44};(e={canvas:{},print:function(e){console.log(e)},R:function(){return i.Decoder_Interface_init=e.D,i.Decoder_Interface_exit=e.M,i.Decoder_Interface_Decode=e.O,i.Encoder_Interface_init=e.T,i.Encoder_Interface_exit=e.N,i.Encoder_Interface_Encode=e.I,0}})||(e=(void 0!==e?e:null)||{});var r={};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);var t="object"==typeof window,f="function"==typeof importScripts,o=!1,a=!t&&!o&&!f;if(a)e.print||(e.print=print),"undefined"!=typeof printErr&&(e.printErr=printErr),"undefined"!=typeof read?e.read=read:e.read=function(){throw"no read() available (jsc?)"},e.readBinary=function(e){if("function"==typeof readbuffer)return new Uint8Array(readbuffer(e));var i=read(e,"binary");return k("object"==typeof i),i},"undefined"!=typeof scriptArgs?e.arguments=scriptArgs:void 0!==arguments&&(e.arguments=arguments);else{if(!t&&!f)throw"Unknown runtime environment. Where are we?";if(e.read=function(e){var i=new XMLHttpRequest;return i.open("GET",e,!1),i.send(null),i.responseText},void 0!==arguments&&(e.arguments=arguments),"undefined"!=typeof console)e.print||(e.print=function(e){console.log(e)}),e.printErr||(e.printErr=function(e){console.log(e)});else{var l=!1;e.print||(e.print=l&&"undefined"!=typeof dump?function(e){dump(e)}:function(e){})}f&&(e.load=importScripts),void 0===e.setWindowTitle&&(e.setWindowTitle=function(e){document.title=e})}function u(e){eval.call(null,e)}for(var n in!e.load&&e.read&&(e.load=function(i){u(e.read(i))}),e.print||(e.print=function(){}),e.printErr||(e.printErr=e.print),e.arguments||(e.arguments=[]),e.thisProgram||(e.thisProgram="./this.program"),e.print=e.print,e.printErr=e.printErr,e.preRun=[],e.postRun=[],r)r.hasOwnProperty(n)&&(e[n]=r[n]);var s={setTempRet0:function(e){w=e},getTempRet0:function(){return w},stackSave:function(){return oe},stackRestore:function(e){oe=e},getNativeTypeSize:function(e){switch(e){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if("*"===e[e.length-1])return s.QUANTUM_SIZE;if("i"===e[0]){var i=parseInt(e.substr(1));return k(i%8==0),i/8}return 0}},getNativeFieldSize:function(e){return Math.max(s.getNativeTypeSize(e),s.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(e,i){return"double"===i||"i64"===i?7&e&&(k(4==(7&e)),e+=4):k(0==(3&e)),e},getAlignSize:function(e,i,r){return r||"i64"!=e&&"double"!=e?e?Math.min(i||(e?s.getNativeFieldSize(e):0),s.QUANTUM_SIZE):Math.min(i,8):8},dynCall:function(i,r,n){return n&&n.length?(n.splice||(n=Array.prototype.slice.call(n)),n.splice(0,0,r),e["dynCall_"+i].apply(null,n)):e["dynCall_"+i].call(null,r)},functionPointers:[],addFunction:function(e){for(var i=0;i<s.functionPointers.length;i++)if(!s.functionPointers[i])return s.functionPointers[i]=e,2*(1+i);throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."},removeFunction:function(e){s.functionPointers[(e-2)/2]=null},warnOnce:function(i){s.warnOnce.shown||(s.warnOnce.shown={}),s.warnOnce.shown[i]||(s.warnOnce.shown[i]=1,e.printErr(i))},funcWrappers:{},getFuncWrapper:function(e,i){k(i),s.funcWrappers[i]||(s.funcWrappers[i]={});var r=s.funcWrappers[i];return r[e]||(r[e]=function(){return s.dynCall(i,e,arguments)}),r[e]},getCompilerSetting:function(e){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"},stackAlloc:function(e){var i=oe;return oe=(oe=oe+e|0)+15&-16,i},staticAlloc:function(e){var i=ne;return ne=(ne=ne+e|0)+15&-16,i},dynamicAlloc:function(e){var i=le;if((le=(le=le+e|0)+15&-16)>=he&&!ue())return le=i,0;return i},alignMemory:function(e,i){return e=Math.ceil(e/(i||16))*(i||16)},makeBigInt:function(e,i,r){return r?+(e>>>0)+4294967296*+(i>>>0):+(e>>>0)+4294967296*+(0|i)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};e.Runtime=s;var c,h,w,d,v,b=!1;function k(e,i){e||pi("Assertion failed: "+i)}function m(i){var r=e["_"+i];if(!r)try{r=[eval][0]("_"+i)}catch(n){}return k(r,"Cannot call unknown function "+i+" (perhaps LLVM optimizations or closure removed it?)"),r}function y(e,i,r,n){switch("*"===(r=r||"i8").charAt(r.length-1)&&(r="i32"),r){case"i1":case"i8":V[e>>0]=i;break;case"i16":Y[e>>1]=i;break;case"i32":Z[e>>2]=i;break;case"i64":h=[i>>>0,(c=i,+Ce(c)>=1?c>0?(0|Ue(+xe(c/4294967296),4294967295))>>>0:~~+Be((c-+(~~c>>>0))/4294967296)>>>0:0)],Z[e>>2]=h[0],Z[e+4>>2]=h[1];break;case"float":J[e>>2]=i;break;case"double":ee[e>>3]=i;break;default:pi("invalid type for setValue: "+r)}}function p(e,i,r){switch("*"===(i=i||"i8").charAt(i.length-1)&&(i="i32"),i){case"i1":case"i8":return V[e>>0];case"i16":return Y[e>>1];case"i32":case"i64":return Z[e>>2];case"float":return J[e>>2];case"double":return ee[e>>3];default:pi("invalid type for setValue: "+i)}return null}!function(){var e={stackSave:function(){s.stackSave()},stackRestore:function(){s.stackRestore()},arrayToC:function(e){var i=s.stackAlloc(e.length);return Fe(e,i),i},stringToC:function(e){var i=0;return null!=e&&0!==e&&Le(e,i=s.stackAlloc(1+(e.length<<2))),i}},i={string:e.stringToC,array:e.arrayToC};v=function(e,r,n,t,f){var o=m(e),a=[],l=0;if(t)for(var u=0;u<t.length;u++){var c=i[n[u]];c?(0===l&&(l=s.stackSave()),a[u]=c(t[u])):a[u]=t[u]}var h=o.apply(null,a);if("string"===r&&(h=M(h)),0!==l){if(f&&f.async)return void EmterpreterAsync.asyncFinalizers.push((function(){s.stackRestore(l)}));s.stackRestore(l)}return h};var r=/^function\s\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function n(e){var i=e.toString().match(r);return i?{arguments:(i=i.slice(1))[0],body:i[1],returnValue:i[2]}:{}}var t={};for(var f in e)e.hasOwnProperty(f)&&(t[f]=n(e[f]));d=function(e,i,r){r=r||[];var f=m(e),o=r.every((function(e){return"number"===e})),a="string"!==i;if(a&&o)return f;var l=r.map((function(e,i){return"$"+i})),u="(function("+l.join(",")+") {",s=r.length;if(!o){u+="var stack = "+t.stackSave.body+";";for(var c=0;c<s;c++){var h=l[c],w=r[c];if("number"!==w){var d=t[w+"ToC"];u+="var "+d.arguments+" = "+h+";",u+=d.body+";",u+=h+"="+d.returnValue+";"}}}(u+="var ret = "+n((function(){return f})).returnValue+"("+l.join(",")+");",a)||(u+="ret = "+n((function(){return M})).returnValue+"(ret);");return o||(u+=t.stackRestore.body.replace("()","(stack)")+";"),u+="return ret})",[eval][0](u)}}(),e.ccall=v,e.cwrap=d,e.setValue=y,e.getValue=p;var E=0,g=1,A=2,S=3,_=4;function R(e,i,r,n){var t,f;"number"==typeof e?(t=!0,f=e):(t=!1,f=e.length);var o,a="string"==typeof i?i:null;if(o=r==_?n:[di,s.stackAlloc,s.staticAlloc,s.dynamicAlloc][void 0===r?A:r](Math.max(f,a?1:i.length)),t){var l;n=o;for(k(0==(3&o)),l=o+(-4&f);n<l;n+=4)Z[n>>2]=0;for(l=o+f;n<l;)V[n++>>0]=0;return o}if("i8"===a)return e.subarray||e.slice?K.set(e,o):K.set(new Uint8Array(e),o),o;for(var u,c,h,w=0;w<f;){var d=e[w];"function"==typeof d&&(d=s.getFunctionIndex(d)),0!==(u=a||i[w])?("i64"==u&&(u="i32"),y(o+w,d,u),h!==u&&(c=s.getNativeTypeSize(u),h=u),w+=c):w++}return o}function D(e){return te?Ge.called&&pe?di(e):s.dynamicAlloc(e):s.staticAlloc(e)}function M(i,r){if(0===r||!i)return"";for(var n,t=0,f=0;t|=n=K[i+f>>0],(0!=n||r)&&(f++,!r||f!=r););r||(r=f);var o="";if(t<128){for(var a,l=1024;r>0;)a=String.fromCharCode.apply(String,K.subarray(i,i+Math.min(r,l))),o=o?o+a:a,i+=l,r-=l;return o}return e.UTF8ToString(i)}function O(e){for(var i="";;){var r=V[e++>>0];if(!r)return i;i+=String.fromCharCode(r)}}function T(e,i){return Pe(e,i,!1)}function N(e,i){for(var r,n,t,f,o,a="";;){if(!(r=e[i++]))return a;if(128&r)if(n=63&e[i++],192!=(224&r))if(t=63&e[i++],224==(240&r)?r=(15&r)<<12|n<<6|t:(f=63&e[i++],240==(248&r)?r=(7&r)<<18|n<<12|t<<6|f:(o=63&e[i++],r=248==(252&r)?(3&r)<<24|n<<18|t<<12|f<<6|o:(1&r)<<30|n<<24|t<<18|f<<12|o<<6|63&e[i++])),r<65536)a+=String.fromCharCode(r);else{var l=r-65536;a+=String.fromCharCode(55296|l>>10,56320|1023&l)}else a+=String.fromCharCode((31&r)<<6|n);else a+=String.fromCharCode(r)}}function I(e){return N(K,e)}function L(e,i,r,n){if(!(n>0))return 0;for(var t=r,f=r+n-1,o=0;o<e.length;++o){var a=e.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++o)),a<=127){if(r>=f)break;i[r++]=a}else if(a<=2047){if(r+1>=f)break;i[r++]=192|a>>6,i[r++]=128|63&a}else if(a<=65535){if(r+2>=f)break;i[r++]=224|a>>12,i[r++]=128|a>>6&63,i[r++]=128|63&a}else if(a<=2097151){if(r+3>=f)break;i[r++]=240|a>>18,i[r++]=128|a>>12&63,i[r++]=128|a>>6&63,i[r++]=128|63&a}else if(a<=67108863){if(r+4>=f)break;i[r++]=248|a>>24,i[r++]=128|a>>18&63,i[r++]=128|a>>12&63,i[r++]=128|a>>6&63,i[r++]=128|63&a}else{if(r+5>=f)break;i[r++]=252|a>>30,i[r++]=128|a>>24&63,i[r++]=128|a>>18&63,i[r++]=128|a>>12&63,i[r++]=128|a>>6&63,i[r++]=128|63&a}}return i[r]=0,r-t}function F(e,i,r){return L(e,K,i,r)}function P(e){for(var i=0,r=0;r<e.length;++r){var n=e.charCodeAt(r);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&e.charCodeAt(++r)),n<=127?++i:i+=n<=2047?2:n<=65535?3:n<=2097151?4:n<=67108863?5:6}return i}function C(e){for(var i=0,r="";;){var n=Y[e+2*i>>1];if(0==n)return r;++i,r+=String.fromCharCode(n)}}function B(e,i,r){if(void 0===r&&(r=2147483647),r<2)return 0;for(var n=i,t=(r-=2)<2*e.length?r/2:e.length,f=0;f<t;++f){var o=e.charCodeAt(f);Y[i>>1]=o,i+=2}return Y[i>>1]=0,i-n}function x(e){return 2*e.length}function U(e){for(var i=0,r="";;){var n=Z[e+4*i>>2];if(0==n)return r;if(++i,n>=65536){var t=n-65536;r+=String.fromCharCode(55296|t>>10,56320|1023&t)}else r+=String.fromCharCode(n)}}function z(e,i,r){if(void 0===r&&(r=2147483647),r<4)return 0;for(var n=i,t=n+r-4,f=0;f<e.length;++f){var o=e.charCodeAt(f);if(o>=55296&&o<=57343)o=65536+((1023&o)<<10)|1023&e.charCodeAt(++f);if(Z[i>>2]=o,(i+=4)+4>t)break}return Z[i>>2]=0,i-n}function j(e){for(var i=0,r=0;r<e.length;++r){var n=e.charCodeAt(r);n>=55296&&n<=57343&&++r,i+=4}return i}function H(i){var r=!!e.___cxa_demangle;if(r)try{var n=di(i.length);Le(i.substr(1),n);var t=di(4),f=e.___cxa_demangle(n,0,0,t);if(0===p(t,"i32")&&f)return M(f)}catch(h){}finally{n&&si(n),t&&si(t),f&&si(f)}var o=3,a={v:"void",b:"bool",c:"char",s:"short",i:"int",l:"long",f:"float",d:"double",w:"wchar_t",a:"signed char",h:"unsigned char",t:"unsigned short",j:"unsigned int",m:"unsigned long",x:"long long",y:"unsigned long long",z:"..."},l=[],u=!0;var c=i;try{if("Object._main"==i||"_main"==i)return"main()";if("number"==typeof i&&(i=M(i)),"_"!==i[0])return i;if("_"!==i[1])return i;if("Z"!==i[2])return i;switch(i[3]){case"n":return"operator new()";case"d":return"operator delete()"}c=function e(r,n,t){n=n||1/0;var f,s="",c=[];if("N"===i[o]){if(f=function(){o++,"K"===i[o]&&o++;for(var e=[];"E"!==i[o];)if("S"!==i[o])if("C"!==i[o]){var r=parseInt(i.substr(o)),n=r.toString().length;if(!r||!n){o--;break}var t=i.substr(o+n,r);e.push(t),l.push(t),o+=n+r}else e.push(e[e.length-1]),o+=2;else{o++;var f=i.indexOf("_",o),a=i.substring(o,f)||0;e.push(l[a]||"?"),o=f+1}return o++,e}().join("::"),0==--n)return r?[f]:f}else if(("K"===i[o]||u&&"L"===i[o])&&o++,v=parseInt(i.substr(o))){var h=v.toString().length;f=i.substr(o+h,v),o+=h+v}if(u=!1,"I"===i[o]){o++;var w=e(!0);s+=e(!0,1,!0)[0]+" "+f+"<"+w.join(", ")+">"}else s=f;e:for(;o<i.length&&n-- >0;){var d=i[o++];if(d in a)c.push(a[d]);else switch(d){case"P":c.push(e(!0,1,!0)[0]+"*");break;case"R":c.push(e(!0,1,!0)[0]+"&");break;case"L":o++;var v=i.indexOf("E",o)-o;c.push(i.substr(o,v)),o+=v+2;break;case"A":if(v=parseInt(i.substr(o)),o+=v.toString().length,"_"!==i[o])throw"?";o++,c.push(e(!0,1,!0)[0]+" ["+v+"]");break;case"E":break e;default:s+="?"+d;break e}}return t||1!==c.length||"void"!==c[0]||(c=[]),r?(s&&c.push(s+"?"),c):s+"("+c.join(", ")+")"}()}catch(h){c+="?"}return c.indexOf("?")>=0&&!r&&s.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),c}function W(e){return e.replace(/__Z[\w\d_]+/g,(function(e){var i=H(e);return e===i?e:e+" ["+i+"]"}))}function q(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(i){e=i}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}function G(){return W(q())}e.ALLOC_NORMAL=E,e.ALLOC_STACK=g,e.ALLOC_STATIC=A,e.ALLOC_DYNAMIC=S,e.ALLOC_NONE=_,e.allocate=R,e.getMemory=D,e.Pointer_stringify=M,e.AsciiToString=O,e.stringToAscii=T,e.UTF8ArrayToString=N,e.UTF8ToString=I,e.stringToUTF8Array=L,e.stringToUTF8=F,e.lengthBytesUTF8=P,e.UTF16ToString=C,e.stringToUTF16=B,e.lengthBytesUTF16=x,e.UTF32ToString=U,e.stringToUTF32=z,e.lengthBytesUTF32=j,e.stackTrace=G;var X,V,K,Y,Q,Z,$,J,ee,ie=4096;function re(e){return e%4096>0&&(e+=4096-e%4096),e}var ne=0,te=!1,fe=0,oe=0,ae=0,le=0;function ue(){pi("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+he+", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")}for(var se,ce=e.TOTAL_STACK||65536,he=e.TOTAL_MEMORY||524288,we=65536;we<he||we<2*ce;)we<16777216?we*=2:we+=16777216;function de(e){for(;e.length>0;){var i=e.shift();if("function"!=typeof i){var r=i.func;"number"==typeof r?void 0===i.arg?s.dynCall("v",r):s.dynCall("vi",r,[i.arg]):r(void 0===i.arg?null:i.arg)}else i()}}we!==he&&(e.printErr("increasing TOTAL_MEMORY to "+we+" to be compliant with the asm.js spec (and given that TOTAL_STACK="+ce+")"),he=we),k("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support"),se=new ArrayBuffer(he),V=new Int8Array(se),Y=new Int16Array(se),Z=new Int32Array(se),K=new Uint8Array(se),Q=new Uint16Array(se),$=new Uint32Array(se),J=new Float32Array(se),ee=new Float64Array(se),Z[0]=255,k(255===K[0]&&0===K[3],"Typed arrays 2 must be run on a little-endian system"),e.HEAP=X,e.buffer=se,e.HEAP8=V,e.HEAP16=Y,e.HEAP32=Z,e.HEAPU8=K,e.HEAPU16=Q,e.HEAPU32=$,e.HEAPF32=J,e.HEAPF64=ee;var ve=[],be=[],ke=[],me=[],ye=[],pe=!1;function Ee(){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)Re(e.preRun.shift());de(ve)}function ge(){pe||(pe=!0,de(be))}function Ae(){de(ke)}function Se(){de(me)}function _e(){if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;)Te(e.postRun.shift());de(ye)}function Re(e){ve.unshift(e)}function De(e){be.unshift(e)}function Me(e){ke.unshift(e)}function Oe(e){me.unshift(e)}function Te(e){ye.unshift(e)}function Ne(e,i,r){var n=r>0?r:P(e)+1,t=new Array(n),f=L(e,t,0,t.length);return i&&(t.length=f),t}function Ie(e){for(var i=[],r=0;r<e.length;r++){var n=e[r];n>255&&(n&=255),i.push(String.fromCharCode(n))}return i.join("")}function Le(e,i,r){for(var n=Ne(e,r),t=0;t<n.length;){var f=n[t];V[i+t>>0]=f,t+=1}}function Fe(e,i){for(var r=0;r<e.length;r++)V[i++>>0]=e[r]}function Pe(e,i,r){for(var n=0;n<e.length;++n)V[i++>>0]=e.charCodeAt(n);r||(V[i>>0]=0)}e.addOnPreRun=Re,e.addOnInit=De,e.addOnPreMain=Me,e.addOnExit=Oe,e.addOnPostRun=Te,e.intArrayFromString=Ne,e.intArrayToString=Ie,e.writeStringToMemory=Le,e.writeArrayToMemory=Fe,e.writeAsciiToMemory=Pe,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,i){var r=65535&e,n=65535&i;return r*n+((e>>>16)*n+r*(i>>>16)<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var i=0;i<32;i++)if(e&1<<31-i)return i;return 32}),Math.clz32=Math.clz32;var Ce=Math.abs,Be=Math.ceil,xe=Math.floor,Ue=Math.min,ze=0,je=null;function He(i){ze++,e.monitorRunDependencies&&e.monitorRunDependencies(ze)}function We(i){if(ze--,e.monitorRunDependencies&&e.monitorRunDependencies(ze),0==ze&&je){var r=je;je=null,r()}}e.addRunDependency=He,e.removeRunDependency=We,e.preloadedImages={},e.preloadedAudios={},ne=8+31776,be.push(),R([154,14,0,0,188,14,0,0,226,14,0,0,8,15,0,0,46,15,0,0,84,15,0,0,130,15,0,0,208,15,0,0,66,16,0,0,108,16,0,0,42,17,0,0,248,17,0,0,228,18,0,0,240,19,0,0,24,21,0,0,86,22,0,0,238,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,13,0,15,0,17,0,19,0,20,0,26,0,31,0,5,0,6,0,5,0,5,0,0,0,0,0,0,0,0,0,1,252,146,252,36,253,182,253,72,254,218,254,108,255,0,0,0,0,32,78,32,78,32,78,32,78,32,78,80,70,0,64,0,32,0,0,0,0,255,127,112,125,112,125,112,125,112,125,112,125,153,89,255,127,112,125,112,125,102,102,102,38,153,25,153,25,154,89,185,62,232,43,188,30,132,21,16,15,139,10,97,7,42,5,157,3,0,96,0,72,0,54,128,40,96,30,200,22,22,17,209,12,157,9,54,7,102,70,184,38,75,21,182,11,113,6,139,3,243,1,18,1,151,0,83,0,154,89,185,62,232,43,188,30,132,21,16,15,139,10,97,7,42,5,157,3,44,3,128,0,30,2,140,0,57,11,111,4,218,8,74,13,19,8,51,2,133,49,135,2,36,16,6,7,225,21,165,20,9,30,118,1,151,14,185,1,160,42,78,10,31,46,190,9,10,80,29,3,98,20,163,2,68,26,162,32,162,20,160,6,208,5,172,1,250,22,196,1,212,20,232,15,255,13,244,4,165,9,133,3,22,62,237,3,134,58,199,12,91,40,250,18,51,14,229,7,36,10,67,3,72,48,28,19,174,47,168,6,120,52,68,6,158,35,37,9,128,15,2,6,103,21,208,38,211,14,161,1,79,5,158,1,56,14,33,6,59,31,213,13,141,44,133,2,104,33,123,2,216,15,97,5,224,64,236,23,156,44,188,2,215,7,95,2,127,48,42,6,111,43,46,18,112,53,172,6,214,46,205,4,60,31,129,28,175,51,83,22,124,9,135,4,25,8,149,7,74,24,233,23,218,13,12,7,221,34,10,7,231,33,44,6,111,54,248,13,1,52,93,24,254,23,106,4,106,23,198,6,61,55,54,18,7,44,249,12,194,47,15,6,107,54,199,11,217,19,224,40,228,36,50,26,153,6,171,2,156,5,26,5,44,28,93,15,242,15,153,10,113,30,192,2,222,58,34,3,155,24,92,20,241,16,237,20,20,26,29,2,174,23,114,2,83,53,116,14,234,44,104,9,28,63,204,2,145,47,239,2,129,31,225,44,170,24,208,8,114,17,240,1,125,28,11,2,229,39,249,14,202,32,221,11,211,32,198,3,148,55,88,7,255,33,33,21,11,64,255,18,252,28,187,7,201,23,206,4,155,36,46,17,222,56,35,13,247,52,57,11,107,51,185,5,158,21,142,6,82,51,179,57,170,28,88,2,38,5,36,2,156,16,211,13,60,39,60,9,91,41,110,2,32,51,157,2,46,55,198,13,175,19,56,38,234,59,107,2,43,12,78,2,58,64,197,11,182,60,72,16,177,60,75,6,45,60,204,4,151,62,83,36,110,29,112,19,198,7,189,4,183,44,133,4,224,48,143,21,3,37,84,10,36,30,242,7,224,51,191,8,139,62,229,19,130,31,105,26,99,39,133,5,138,19,43,9,235,48,87,23,22,59,83,11,88,71,241,8,211,61,223,9,137,63,14,40,59,57,55,44,5,7,81,1,43,12,141,1,182,13,112,11,240,17,110,10,95,29,116,2,151,44,144,2,58,23,131,9,144,25,199,28,46,32,61,3,160,15,95,3,48,39,188,9,185,62,223,13,28,71,30,4,215,23,174,5,252,22,220,30,64,73,140,13,72,7,32,2,238,35,171,2,103,45,64,16,242,17,108,6,86,12,133,4,81,62,0,10,61,48,149,14,12,68,140,20,218,23,212,7,101,11,206,6,83,64,137,20,147,65,144,6,53,67,223,6,165,18,159,12,218,28,147,23,6,56,28,39,195,15,186,1,98,16,202,1,254,35,194,8,3,29,121,16,60,50,33,3,178,43,57,3,104,49,36,8,156,50,154,25,33,37,228,3,229,25,217,3,41,41,198,9,185,59,142,19,58,49,7,8,124,60,117,6,66,63,9,27,151,55,158,22,66,10,60,3,239,21,150,6,95,53,146,22,84,14,18,6,49,44,73,10,42,38,179,5,179,54,125,18,25,62,147,24,134,24,78,7,230,30,237,8,82,66,219,17,192,64,9,15,144,59,7,9,151,62,172,12,123,56,144,69,71,46,203,10,189,7,127,5,120,5,108,3,239,16,219,13,39,17,114,16,29,21,168,2,53,68,13,3,101,25,254,19,155,31,253,29,187,28,26,3,141,32,158,4,193,58,88,12,80,58,223,11,197,79,112,3,209,56,84,3,49,48,116,57,248,26,128,7,129,16,165,3,26,32,63,4,163,41,244,15,98,39,181,17,175,10,72,3,177,80,57,4,71,65,78,23,1,62,226,17,119,42,14,10,189,14,142,4,183,56,204,15,219,80,67,10,115,59,174,10,170,59,138,8,113,24,154,12,69,51,24,76,28,28,162,3,158,9,82,6,163,17,20,12,28,54,181,16,220,40,65,3,187,67,42,3,251,65,241,8,186,60,25,32,35,53,148,6,125,12,42,7,76,62,4,11,196,61,207,20,110,66,134,9,148,65,46,5,55,61,220,31,206,45,108,33,178,14,5,8,91,37,37,5,249,52,134,26,195,47,144,7,244,31,222,13,231,51,242,6,171,63,199,25,163,63,78,30,73,33,247,9,57,28,85,10,93,71,65,29,245,65,200,8,218,69,68,11,113,67,0,13,201,36,194,78,34,43,128,32,6,5,108,2,151,5,71,2,105,23,241,8,138,15,42,14,24,20,240,2,97,52,62,3,177,21,44,11,244,45,20,23,241,41,48,2,70,21,52,2,9,52,192,11,170,46,99,14,175,77,30,3,97,38,216,2,95,53,44,34,223,28,237,11,211,9,10,3,162,23,65,3,69,25,210,19,113,32,159,9,253,23,73,7,204,59,238,4,72,56,195,17,95,53,163,17,65,12,167,11,175,9,235,4,240,58,39,18,22,60,47,10,156,56,88,9,174,48,233,9,115,29,133,11,109,50,28,47,92,21,172,2,69,12,210,2,217,19,250,4,188,49,104,16,198,59,169,2,139,30,80,2,134,25,229,7,94,64,33,34,52,52,114,3,21,21,131,3,64,57,130,8,149,57,131,16,190,55,18,5,105,54,237,7,117,60,58,29,199,61,220,17,217,9,221,7,198,19,12,7,39,20,182,25,218,27,13,14,168,42,75,6,209,45,172,6,7,66,127,13,140,63,240,25,90,36,239,3,153,36,58,8,238,74,173,19,153,48,173,16,47,62,52,5,253,59,184,13,122,46,61,55,229,62,198,26,218,7,225,2,195,14,93,3,190,44,64,11,236,13,212,13,97,35,217,4,103,48,128,3,98,33,21,18,41,45,144,22,193,31,77,2,26,32,76,2,40,73,171,14,173,50,77,12,113,61,246,2,250,64,242,2,118,59,130,43,255,61,160,8,65,18,98,2,234,39,166,2,153,59,50,16,97,22,255,12,185,32,134,6,150,77,17,9,90,60,135,21,230,54,105,21,96,22,72,11,156,29,66,5,48,56,205,20,108,63,110,15,14,59,160,14,202,59,155,5,5,57,230,15,13,48,80,61,193,29,163,6,122,8,116,3,107,17,215,17,174,70,234,12,198,49,47,3,78,58,139,3,168,58,185,16,158,60,176,32,74,70,63,4,54,9,97,3,153,63,203,14,63,61,244,17,228,63,254,5,200,64,162,8,193,65,225,37,57,62,161,17,205,12,61,4,171,37,139,8,197,46,180,23,239,35,110,17,251,34,93,6,49,40,246,11,97,64,35,20,106,60,154,27,110,53,239,9,153,20,229,8,106,65,69,24,15,65,80,13,80,79,35,13,0,73,193,7,92,55,67,50,50,59,87,61,121,17,252,3,145,6,118,3,215,16,205,16,248,34,73,14,5,23,123,4,127,45,172,5,14,62,179,8,230,17,244,25,17,27,181,4,76,24,31,3,127,48,81,13,96,62,37,15,147,77,61,8,217,37,93,8,150,57,126,34,144,56,39,10,25,7,214,4,91,30,45,3,135,74,58,17,178,21,16,8,103,14,28,11,27,68,208,8,57,65,134,17,71,63,12,21,92,31,203,10,77,13,71,8,18,68,101,21,130,53,226,10,167,77,160,10,138,35,40,15,252,70,225,18,184,67,175,47,252,19,228,3,71,19,220,3,160,38,9,12,126,23,251,20,9,62,131,6,213,32,159,4,239,58,62,9,65,77,90,27,187,46,26,6,111,28,104,4,219,65,252,5,146,61,5,21,116,57,17,8,137,78,107,8,6,67,53,32,247,69,174,24,91,21,224,5,4,16,14,10,13,68,154,26,41,22,72,11,252,64,54,13,15,35,39,7,191,78,129,18,94,76,126,28,2,26,221,10,208,44,249,12,197,75,190,19,190,73,114,18,55,64,69,9,206,79,34,17,89,44,158,103,73,45,252,11,50,11,30,6,244,19,46,4,142,37,51,19,75,19,208,13,117,29,110,3,237,80,83,3,26,27,43,17,159,65,53,30,153,39,251,3,117,38,196,3,134,60,115,15,99,60,102,13,175,73,214,3,152,78,195,3,236,65,87,50,254,55,104,16,199,25,196,4,6,36,46,3,46,66,14,20,29,22,34,19,112,21,6,7,34,79,122,15,109,66,34,24,9,70,41,23,149,36,92,13,50,29,179,7,81,76,57,20,59,74,190,11,70,64,204,14,198,62,63,9,216,33,183,10,229,36,246,102,104,42,7,5,227,13,241,3,230,21,38,14,253,75,136,21,165,48,29,3,154,80,143,3,67,60,250,11,141,66,35,40,195,73,73,10,73,15,244,4,63,76,43,13,132,70,110,20,91,75,142,6,52,76,100,12,152,70,2,42,241,64,189,26,62,12,250,8,117,42,133,9,220,60,1,27,53,49,53,13,108,43,225,12,122,65,120,9,165,73,59,26,19,67,159,38,199,49,45,10,233,34,68,12,89,74,84,30,171,71,40,15,251,79,98,14,146,76,52,13,244,50,173,75,30,41,84,90,1,0,3,0,0,0,1,0,2,0,4,0,82,120,26,113,81,106,240,99,241,93,78,88,2,83,7,78,89,73,242,68,51,115,174,103,80,93,251,83,149,75,6,68,56,61,25,55,150,49,161,44,205,76,21,46,166,27,151,16,244,9,249,5,149,3,38,2,74,1,198,0,249,79,26,80,59,80,92,80,125,80,164,80,197,80,236,80,13,81,52,81,85,81,124,81,157,81,196,81,236,81,19,82,58,82,97,82,137,82,176,82,215,82,255,82,38,83,84,83,123,83,169,83,208,83,254,83,38,84,84,84,129,84,175,84,221,84,11,85,57,85,103,85,149,85,201,85,247,85,43,86,89,86,142,86,194,86,247,86,43,87,95,87,148,87,200,87,3,88,56,88,115,88,174,88,233,88,36,89,95,89,154,89,219,89,22,90,88,90,153,90,212,90,28,91,94,91,159,91,231,91,48,92,113,92,192,92,8,93,80,93,159,93,237,93,60,94,138,94,224,94,46,95,131,95,217,95,52,96,138,96,229,96,72,97,163,97,6,98,104,98,209,98,51,99,156,99,11,100,123,100,234,100,96,101,214,101,76,102,201,102,76,103,207,103,82,104,220,104,108,105,252,105,147,106,48,107,205,107,113,108,27,109,204,109,125,110,59,111,249,111,197,112,150,113,111,114,84,115,64,116,50,117,50,118,63,119,88,120,225,122,255,127,255,127,255,127,255,127,255,127,255,127,255,127,225,122,88,120,63,119,50,118,50,117,64,116,84,115,111,114,150,113,197,112,249,111,59,111,125,110,204,109,27,109,113,108,205,107,48,107,147,106,252,105,108,105,220,104,82,104,207,103,76,103,201,102,76,102,214,101,96,101,234,100,123,100,11,100,156,99,51,99,209,98,104,98,6,98,163,97,72,97,229,96,138,96,52,96,217,95,131,95,46,95,224,94,138,94,60,94,237,93,159,93,80,93,8,93,192,92,113,92,48,92,231,91,159,91,94,91,28,91,212,90,153,90,88,90,22,90,219,89,154,89,95,89,36,89,233,88,174,88,115,88,56,88,3,88,200,87,148,87,95,87,43,87,247,86,194,86,142,86,89,86,43,86,247,85,201,85,149,85,103,85,57,85,11,85,221,84,175,84,129,84,84,84,38,84,254,83,208,83,169,83,123,83,84,83,38,83,255,82,215,82,176,82,137,82,97,82,58,82,19,82,236,81,196,81,157,81,124,81,85,81,52,81,13,81,236,80,197,80,164,80,125,80,92,80,59,80,26,80,249,79,210,79,177,79,145,79,112,79,13,0,14,0,16,0,18,0,20,0,21,0,27,0,32,0,6,0,7,0,6,0,6,0,0,0,0,0,0,0,1,0,13,0,14,0,16,0,18,0,19,0,21,0,26,0,31,0,6,0,6,0,6,0,6,0,0,0,0,0,0,0,1,0,79,115,156,110,74,97,126,77,72,54,9,31,195,10,153,251,125,242,48,239,127,240,173,244,231,249,176,254,22,2,202,3,255,3,55,3,4,2,220,0,0,0,125,255,62,255,41,255,0,0,216,127,107,127,182,126,187,125,123,124,248,122,53,121,53,119,250,116,137,114,128,46,128,67,0,120,0,101,128,94,64,113,64,95,192,28,64,76,192,57,84,0,1,0,254,255,2,0,5,0,10,0,5,0,9,0,20,0,84,0,1,0,254,255,2,0,5,0,10,0,5,0,9,0,20,0,84,0,1,0,254,255,2,0,3,0,6,0,5,0,9,0,20,0,84,0,1,0,254,255,2,0,3,0,6,0,5,0,9,0,20,0,84,0,1,0,254,255,2,0,3,0,6,0,5,0,9,0,20,0,84,0,1,0,254,255,2,0,3,0,6,0,10,0,19,0,20,0,84,0,1,0,254,255,2,0,3,0,6,0,5,0,9,0,20,0,94,0,0,0,253,255,3,0,3,0,6,0,5,0,9,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,19,0,19,0,19,0,19,0,23,0,39,0,57,0,5,0,8,0,8,0,7,0,8,0,7,0,2,0,8,0,4,0,7,0,2,0,4,0,7,0,2,0,8,0,4,0,7,0,2,0,8,0,8,0,7,0,8,0,7,0,2,0,6,0,4,0,7,0,2,0,6,0,4,0,7,0,2,0,6,0,4,0,7,0,2,0,6,0,8,0,9,0,9,0,8,0,9,0,2,0,6,0,4,0,9,0,2,0,6,0,8,0,9,0,2,0,6,0,4,0,9,0,2,0,6,0,8,0,9,0,9,0,8,0,11,0,3,0,7,0,4,0,11,0,3,0,7,0,8,0,11,0,3,0,7,0,4,0,11,0,3,0,7,0,8,0,9,0,9,0,8,0,13,0,4,0,7,0,5,0,13,0,4,0,7,0,8,0,13,0,4,0,7,0,5,0,13,0,4,0,7,0,9,0,9,0,9,0,8,0,13,0,4,0,4,0,5,0,6,0,13,0,4,0,4,0,5,0,8,0,13,0,4,0,4,0,5,0,6,0,13,0,4,0,4,0,5,0,8,0,9,0,9,0,8,0,1,0,1,0,1,0,1,0,10,0,10,0,7,0,7,0,5,0,1,0,1,0,1,0,1,0,10,0,10,0,7,0,7,0,8,0,1,0,1,0,1,0,1,0,10,0,10,0,7,0,7,0,5,0,1,0,1,0,1,0,1,0,10,0,10,0,7,0,7,0,7,0,8,0,9,0,8,0,6,0,9,0,4,0,4,0,4,0,4,0,4,0,4,0,3,0,3,0,3,0,3,0,3,0,5,0,6,0,4,0,4,0,4,0,4,0,4,0,4,0,3,0,3,0,3,0,3,0,3,0,5,0,9,0,4,0,4,0,4,0,4,0,4,0,4,0,3,0,3,0,3,0,3,0,3,0,5,0,6,0,4,0,4,0,4,0,4,0,4,0,4,0,3,0,3,0,3,0,3,0,3,0,5,0,3,0,8,0,9,0,9,0,6,0,95,0,103,0,118,0,134,0,148,0,159,0,204,0,244,0,39,0,43,0,38,0,37,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,23,0,24,0,25,0,26,0,27,0,28,0,48,0,49,0,61,0,62,0,82,0,83,0,47,0,46,0,45,0,44,0,81,0,80,0,79,0,78,0,17,0,18,0,20,0,22,0,77,0,76,0,75,0,74,0,29,0,30,0,43,0,42,0,41,0,40,0,38,0,39,0,16,0,19,0,21,0,50,0,51,0,59,0,60,0,63,0,64,0,72,0,73,0,84,0,85,0,93,0,94,0,32,0,33,0,35,0,36,0,53,0,54,0,56,0,57,0,66,0,67,0,69,0,70,0,87,0,88,0,90,0,91,0,34,0,55,0,68,0,89,0,37,0,58,0,71,0,92,0,31,0,52,0,65,0,86,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0,0,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,23,0,24,0,25,0,26,0,27,0,46,0,65,0,84,0,45,0,44,0,43,0,64,0,63,0,62,0,83,0,82,0,81,0,102,0,101,0,100,0,42,0,61,0,80,0,99,0,28,0,47,0,66,0,85,0,18,0,41,0,60,0,79,0,98,0,29,0,48,0,67,0,17,0,20,0,22,0,40,0,59,0,78,0,97,0,21,0,30,0,49,0,68,0,86,0,19,0,16,0,87,0,39,0,38,0,58,0,57,0,77,0,35,0,54,0,73,0,92,0,76,0,96,0,95,0,36,0,55,0,74,0,93,0,32,0,51,0,33,0,52,0,70,0,71,0,89,0,90,0,31,0,50,0,69,0,88,0,37,0,56,0,75,0,94,0,34,0,53,0,72,0,91,0,0,0,1,0,4,0,5,0,3,0,6,0,7,0,2,0,13,0,15,0,8,0,9,0,11,0,12,0,14,0,10,0,16,0,28,0,74,0,29,0,75,0,27,0,73,0,26,0,72,0,30,0,76,0,51,0,97,0,50,0,71,0,96,0,117,0,31,0,77,0,52,0,98,0,49,0,70,0,95,0,116,0,53,0,99,0,32,0,78,0,33,0,79,0,48,0,69,0,94,0,115,0,47,0,68,0,93,0,114,0,46,0,67,0,92,0,113,0,19,0,21,0,23,0,22,0,18,0,17,0,20,0,24,0,111,0,43,0,89,0,110,0,64,0,65,0,44,0,90,0,25,0,45,0,66,0,91,0,112,0,54,0,100,0,40,0,61,0,86,0,107,0,39,0,60,0,85,0,106,0,36,0,57,0,82,0,103,0,35,0,56,0,81,0,102,0,34,0,55,0,80,0,101,0,42,0,63,0,88,0,109,0,41,0,62,0,87,0,108,0,38,0,59,0,84,0,105,0,37,0,58,0,83,0,104,0,0,0,1,0,4,0,3,0,5,0,6,0,13,0,7,0,2,0,8,0,9,0,11,0,15,0,12,0,14,0,10,0,28,0,82,0,29,0,83,0,27,0,81,0,26,0,80,0,30,0,84,0,16,0,55,0,109,0,56,0,110,0,31,0,85,0,57,0,111,0,48,0,73,0,102,0,127,0,32,0,86,0,51,0,76,0,105,0,130,0,52,0,77,0,106,0,131,0,58,0,112,0,33,0,87,0,19,0,23,0,53,0,78,0,107,0,132,0,21,0,22,0,18,0,17,0,20,0,24,0,25,0,50,0,75,0,104,0,129,0,47,0,72,0,101,0,126,0,54,0,79,0,108,0,133,0,46,0,71,0,100,0,125,0,128,0,103,0,74,0,49,0,45,0,70,0,99,0,124,0,42,0,67,0,96,0,121,0,39,0,64,0,93,0,118,0,38,0,63,0,92,0,117,0,35,0,60,0,89,0,114,0,34,0,59,0,88,0,113,0,44,0,69,0,98,0,123,0,43,0,68,0,97,0,122,0,41,0,66,0,95,0,120,0,40,0,65,0,94,0,119,0,37,0,62,0,91,0,116,0,36,0,61,0,90,0,115,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,26,0,87,0,27,0,88,0,28,0,89,0,29,0,90,0,30,0,91,0,51,0,80,0,112,0,141,0,52,0,81,0,113,0,142,0,54,0,83,0,115,0,144,0,55,0,84,0,116,0,145,0,58,0,119,0,59,0,120,0,21,0,22,0,23,0,17,0,18,0,19,0,31,0,60,0,92,0,121,0,56,0,85,0,117,0,146,0,20,0,24,0,25,0,50,0,79,0,111,0,140,0,57,0,86,0,118,0,147,0,49,0,78,0,110,0,139,0,48,0,77,0,53,0,82,0,114,0,143,0,109,0,138,0,47,0,76,0,108,0,137,0,32,0,33,0,61,0,62,0,93,0,94,0,122,0,123,0,41,0,42,0,43,0,44,0,45,0,46,0,70,0,71,0,72,0,73,0,74,0,75,0,102,0,103,0,104,0,105,0,106,0,107,0,131,0,132,0,133,0,134,0,135,0,136,0,34,0,63,0,95,0,124,0,35,0,64,0,96,0,125,0,36,0,65,0,97,0,126,0,37,0,66,0,98,0,127,0,38,0,67,0,99,0,128,0,39,0,68,0,100,0,129,0,40,0,69,0,101,0,130,0,8,0,7,0,6,0,5,0,4,0,3,0,2,0,14,0,16,0,9,0,10,0,12,0,13,0,15,0,11,0,17,0,20,0,22,0,24,0,23,0,19,0,18,0,21,0,56,0,88,0,122,0,154,0,57,0,89,0,123,0,155,0,58,0,90,0,124,0,156,0,52,0,84,0,118,0,150,0,53,0,85,0,119,0,151,0,27,0,93,0,28,0,94,0,29,0,95,0,30,0,96,0,31,0,97,0,61,0,127,0,62,0,128,0,63,0,129,0,59,0,91,0,125,0,157,0,32,0,98,0,64,0,130,0,1,0,0,0,25,0,26,0,33,0,99,0,34,0,100,0,65,0,131,0,66,0,132,0,54,0,86,0,120,0,152,0,60,0,92,0,126,0,158,0,55,0,87,0,121,0,153,0,117,0,116,0,115,0,46,0,78,0,112,0,144,0,43,0,75,0,109,0,141,0,40,0,72,0,106,0,138,0,36,0,68,0,102,0,134,0,114,0,149,0,148,0,147,0,146,0,83,0,82,0,81,0,80,0,51,0,50,0,49,0,48,0,47,0,45,0,44,0,42,0,39,0,35,0,79,0,77,0,76,0,74,0,71,0,67,0,113,0,111,0,110,0,108,0,105,0,101,0,145,0,143,0,142,0,140,0,137,0,133,0,41,0,73,0,107,0,139,0,37,0,69,0,103,0,135,0,38,0,70,0,104,0,136,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0,0,0,16,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,26,0,27,0,28,0,29,0,30,0,31,0,115,0,116,0,117,0,118,0,119,0,120,0,72,0,73,0,161,0,162,0,65,0,68,0,69,0,108,0,111,0,112,0,154,0,157,0,158,0,197,0,200,0,201,0,32,0,33,0,121,0,122,0,74,0,75,0,163,0,164,0,66,0,109,0,155,0,198,0,19,0,23,0,21,0,22,0,18,0,17,0,20,0,24,0,25,0,37,0,36,0,35,0,34,0,80,0,79,0,78,0,77,0,126,0,125,0,124,0,123,0,169,0,168,0,167,0,166,0,70,0,67,0,71,0,113,0,110,0,114,0,159,0,156,0,160,0,202,0,199,0,203,0,76,0,165,0,81,0,82,0,92,0,91,0,93,0,83,0,95,0,85,0,84,0,94,0,101,0,102,0,96,0,104,0,86,0,103,0,87,0,97,0,127,0,128,0,138,0,137,0,139,0,129,0,141,0,131,0,130,0,140,0,147,0,148,0,142,0,150,0,132,0,149,0,133,0,143,0,170,0,171,0,181,0,180,0,182,0,172,0,184,0,174,0,173,0,183,0,190,0,191,0,185,0,193,0,175,0,192,0,176,0,186,0,38,0,39,0,49,0,48,0,50,0,40,0,52,0,42,0,41,0,51,0,58,0,59,0,53,0,61,0,43,0,60,0,44,0,54,0,194,0,179,0,189,0,196,0,177,0,195,0,178,0,187,0,188,0,151,0,136,0,146,0,153,0,134,0,152,0,135,0,144,0,145,0,105,0,90,0,100,0,107,0,88,0,106,0,89,0,98,0,99,0,62,0,47,0,57,0,64,0,45,0,63,0,46,0,55,0,56,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,23,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,24,0,25,0,26,0,27,0,28,0,38,0,141,0,39,0,142,0,40,0,143,0,41,0,144,0,42,0,145,0,43,0,146,0,44,0,147,0,45,0,148,0,46,0,149,0,47,0,97,0,150,0,200,0,48,0,98,0,151,0,201,0,49,0,99,0,152,0,202,0,86,0,136,0,189,0,239,0,87,0,137,0,190,0,240,0,88,0,138,0,191,0,241,0,91,0,194,0,92,0,195,0,93,0,196,0,94,0,197,0,95,0,198,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,50,0,100,0,153,0,203,0,89,0,139,0,192,0,242,0,51,0,101,0,154,0,204,0,55,0,105,0,158,0,208,0,90,0,140,0,193,0,243,0,59,0,109,0,162,0,212,0,63,0,113,0,166,0,216,0,67,0,117,0,170,0,220,0,36,0,37,0,54,0,53,0,52,0,58,0,57,0,56,0,62,0,61,0,60,0,66,0,65,0,64,0,70,0,69,0,68,0,104,0,103,0,102,0,108,0,107,0,106,0,112,0,111,0,110,0,116,0,115,0,114,0,120,0,119,0,118,0,157,0,156,0,155,0,161,0,160,0,159,0,165,0,164,0,163,0,169,0,168,0,167,0,173,0,172,0,171,0,207,0,206,0,205,0,211,0,210,0,209,0,215,0,214,0,213,0,219,0,218,0,217,0,223,0,222,0,221,0,73,0,72,0,71,0,76,0,75,0,74,0,79,0,78,0,77,0,82,0,81,0,80,0,85,0,84,0,83,0,123,0,122,0,121,0,126,0,125,0,124,0,129,0,128,0,127,0,132,0,131,0,130,0,135,0,134,0,133,0,176,0,175,0,174,0,179,0,178,0,177,0,182,0,181,0,180,0,185,0,184,0,183,0,188,0,187,0,186,0,226,0,225,0,224,0,229,0,228,0,227,0,232,0,231,0,230,0,235,0,234,0,233,0,238,0,237,0,236,0,96,0,199,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,1,0,3,0,2,0,4,0,1,0,4,0,1,0,4,0,0,0,205,12,156,25,0,32,102,38,205,44,0,48,51,51,102,54,154,57,205,60,0,64,51,67,102,70,154,73,205,76,159,0,64,241,53,167,206,0,190,242,52,176,12,1,67,244,88,185,93,1,201,245,133,194,163,1,215,246,223,200,226,1,166,247,189,205,42,2,116,248,147,210,125,2,66,249,109,215,221,2,18,250,77,220,74,3,222,250,30,225,201,3,174,251,0,230,90,4,124,252,216,234,1,5,74,253,179,239,193,5,25,254,141,244,158,6,231,254,104,249,156,7,181,255,67,254,193,8,133,0,33,3,17,10,83,1,252,7,147,11,33,2,213,12,80,13,240,2,178,17,79,15,190,3,140,22,155,17,141,4,104,27,63,20,91,5,67,32,72,23,41,6,29,37,199,26,248,6,249,41,203,30,199,7,212,46,105,35,149,8,175,51,185,40,100,9,138,56,222,48,113,10,224,62,135,63,244,11,253,71,150,82,120,13,27,81,93,107,252,14,57,90,93,107,252,14,57,90,0,0,1,0,3,0,2,0,6,0,4,0,5,0,7,0,0,0,1,0,3,0,2,0,5,0,6,0,4,0,7,0,248,127,211,127,76,127,108,126,51,125,163,123,188,121,127,119,239,116,12,114,217,110,89,107,141,103,121,99,31,95,130,90,166,85,141,80,60,75,182,69,0,64,28,58,15,52,223,45,141,39,32,33,156,26,6,20,97,13,178,6,0,0,78,249,159,242,250,235,100,229,224,222,115,216,33,210,241,203,228,197,0,192,74,186,196,180,115,175,90,170,126,165,225,160,135,156,115,152,167,148,39,145,244,141,17,139,129,136,68,134,93,132,205,130,148,129,180,128,45,128,8,128,255,127,46,124,174,120,118,117,125,114,186,111,41,109,194,106,131,104,102,102,105,100,137,98,194,96,19,95,122,93,245,91,130,90,33,89,207,87,139,86,85,85,44,84,15,83,252,81,244,80,246,79,1,79,20,78,48,77,83,76,126,75,175,74,231,73,37,73,104,72,178,71,0,71,84,70,173,69,10,69,107,68,209,67,59,67,168,66,25,66,142,65,6,65,130,64,0,64,0,0,175,5,50,11,140,16,192,21,207,26,188,31,136,36,53,41,196,45,55,50,143,54,206,58,245,62,4,67,252,70,223,74,174,78,105,82,17,86,167,89,44,93,159,96,3,100,87,103,155,106,209,109,250,112,20,116,33,119,34,122,23,125,255,127,255,127,217,127,98,127,157,126,138,125,42,124,125,122,133,120,66,118,182,115,227,112,202,109,110,106,208,102,242,98,215,94,130,90,246,85,52,81,64,76,29,71,206,65,87,60,186,54,252,48,31,43,40,37,26,31,249,24,200,18,140,12,72,6,0,0,184,249,116,243,56,237,7,231,230,224,216,218,225,212,4,207,70,201,169,195,50,190,227,184,192,179,204,174,10,170,126,165,41,161,14,157,48,153,146,149,54,146,29,143,74,140,190,137,123,135,131,133,214,131,118,130,99,129,158,128,39,128,0,128,249,150,148,221,53,235,27,241,93,244,116,246,223,247,237,248,184,249,86,250,214,250,61,251,148,251,221,251,26,252,78,252,123,252,163,252,197,252,227,252,252,252,18,253,38,253,55,253,69,253,81,253,91,253,100,253,106,253,111,253,114,253,116,253,116,253,114,253,111,253,106,253,100,253,91,253,81,253,69,253,55,253,38,253,18,253,252,252,227,252,197,252,163,252,123,252,78,252,26,252,221,251,148,251,61,251,214,250,86,250,184,249,237,248,223,247,116,246,93,244,27,241,53,235,148,221,249,150,48,117,144,101,8,82,152,58,64,31,0,0,192,224,104,197,248,173,112,154,153,104,33,3,201,9,85,253,154,250,70,2,92,2,6,251,183,13,250,232,182,17,13,254,108,248,195,11,62,236,238,21,58,248,219,251,77,250,90,17,68,253,41,235,1,18,196,1,179,253,232,242,137,11,243,4,68,251,226,245,195,6,86,14,133,238,49,252,39,17,23,246,181,3,173,250,45,252,102,22,66,118,247,14,60,240,156,11,232,251,22,252,173,9,29,244,255,10,73,247,217,6,181,249,178,6,17,249,7,6,16,252,173,1,87,255,216,1,16,251,128,8,110,245,219,9,171,249,88,1,58,3,7,250,188,6,135,249,165,6,241,247,84,10,12,244,81,11,70,248,45,2,12,3,167,250,74,3,143,2,98,57,254,44,244,4,55,245,217,233,90,29,221,255,9,245,32,244,215,18,136,11,24,223,201,14,175,5,131,8,67,222,115,31,201,247,82,250,9,3,84,4,175,246,206,8,149,254,94,253,201,247,158,23,207,233,48,4,51,12,62,236,192,20,231,246,112,241,12,27,207,240,163,2,17,249,29,0,161,39,66,118,247,14,60,240,156,11,232,251,22,252,173,9,29,244,255,10,73,247,217,6,181,249,178,6,17,249,7,6,16,252,173,1,87,255,216,1,16,251,128,8,110,245,219,9,171,249,88,1,58,3,7,250,188,6,135,249,165,6,241,247,84,10,12,244,81,11,70,248,45,2,12,3,167,250,74,3,143,2,0,64,103,65,213,66,76,68,203,69,82,71,226,72,122,74,28,76,199,77,123,79,56,81,255,82,209,84,172,86,146,88,130,90,126,92,132,94,150,96,180,98,221,100,18,103,84,105,162,107,254,109,102,112,221,114,96,117,242,119,147,122,66,125,255,127,3,115,186,110,119,98,225,79,109,57,245,33,71,12,184,250,206,238,23,233,38,233,191,237,33,245,96,253,187,4,232,9,58,12,175,11,211,8,146,4,0,0,23,252,140,249,180,248,126,249,133,251,48,254,218,0,244,2,36,4,75,4,136,3,38,2,135,0,11,255,254,253,134,253,166,253,61,254,25,255,0,0,191,0,52,1,84,1,40,1,198,0,78,0,220,255,136,255,93,255,91,255,124,255,177,255,237,255,34,0,73,0,91,0,89,0,70,0,38,0,0,0,254,254,194,254,73,254,134,253,112,253,251,252,57,253,10,254,244,254,63,255,254,255,125,0,122,0,217,255,247,255,105,0,129,0,27,1,116,1,63,2,235,254,188,254,59,255,25,254,67,254,150,254,220,254,229,255,177,0,31,2,86,1,5,2,4,2,130,0,27,0,152,255,136,255,116,255,182,255,200,255,204,253,81,252,16,250,59,252,210,252,242,253,190,254,254,255,159,0,145,2,200,254,228,254,126,254,171,253,19,254,242,253,94,254,27,255,105,0,193,1,211,253,154,252,205,251,105,252,74,252,16,253,59,253,196,254,62,0,230,1,198,254,65,255,53,255,182,254,96,255,153,255,205,255,131,0,82,1,3,2,10,6,224,8,194,14,112,21,60,27,190,32,63,39,221,43,222,49,146,53,84,37,17,42,27,49,236,51,45,56,131,45,92,41,39,38,145,33,84,25,6,0,82,0,125,255,154,0,200,255,33,253,183,0,191,255,247,254,9,0,46,255,151,254,113,0,206,2,25,7,242,3,190,4,37,6,89,3,53,5,228,8,59,3,32,6,141,7,205,2,197,7,158,8,70,3,148,4,31,7,209,2,232,3,106,8,30,1,220,1,229,5,9,255,237,253,230,0,147,0,174,255,57,2,26,0,79,255,80,252,229,255,239,254,180,2,92,255,248,254,73,255,224,0,22,3,15,4,131,3,178,3,89,2,229,1,3,3,126,4,12,2,165,2,135,3,116,255,119,1,10,3,154,1,164,2,173,1,45,1,18,2,241,3,207,2,134,2,38,0,226,0,111,1,40,0,145,0,211,255,7,254,34,1,121,0,135,255,46,1,127,0,166,0,132,255,129,254,68,252,154,254,57,254,47,252,203,2,110,3,126,3,210,3,155,3,211,0,22