diff --git a/examples/gui/data/js/controls.js b/examples/gui/data/js/controls.js index b2248d4..c945d0b 100644 --- a/examples/gui/data/js/controls.js +++ b/examples/gui/data/js/controls.js @@ -67,10 +67,7 @@ function colorClass(colorId) { return "alizarin"; case C_NONE: - return ""; - case C_DARK: return "dark"; - default: return ""; } @@ -108,24 +105,24 @@ function handleVisibilityChange() { function start() { document.addEventListener("visibilitychange", handleVisibilityChange, false); websock = new WebSocket("ws://" + window.location.hostname + "/ws"); - websock.onopen = function (evt) { + websock.onopen = function(evt) { console.log("websock open"); $("#conStatus").addClass("color-green"); $("#conStatus").text("Connected"); websockConnected = true; }; - websock.onclose = function (evt) { + websock.onclose = function(evt) { console.log("websock close"); conStatusError(); }; - websock.onerror = function (evt) { + websock.onerror = function(evt) { console.log(evt); conStatusError(); }; - var handleEvent = function (evt) { + var handleEvent = function(evt) { //console.log(evt); var data = JSON.parse(evt.data); var e = document.body; @@ -146,42 +143,42 @@ function start() { case UI_LABEL: $("#row").append( "
" + - data.label + - "

" + - data.value + - "
" + colorClass(data.color) + + "'>
" + + data.label + + "

" + + data.value + + "" ); break; case UI_BUTTON: $("#row").append( "
" + - data.label + - "

" + colorClass(data.color) + + "'>
" + + data.label + + "

" ); $("#" + data.id).on({ - touchstart: function (e) { + touchstart: function(e) { e.preventDefault(); buttonclick(data.id, true); } }); $("#" + data.id).on({ - touchend: function (e) { + touchend: function(e) { e.preventDefault(); buttonclick(data.id, false); } @@ -206,16 +203,16 @@ function start() { } $("#row").append( "
" + - data.label + - "

" + - label + - input + - "" + - "
" + data.id + + "' class='one columns card tcenter " + + colorClass(data.color) + + "'>
" + + data.label + + "

" + + label + + input + + "" + + "" ); break; case UI_CPAD: @@ -227,106 +224,106 @@ function start() { ", false)' href='#' id='pc" + data.id + "'>OK"; - //NO BREAK + //NO BREAK case UI_PAD: $("#row").append( "
" + - data.label + - "

" + - "" + - "
" + colorClass(data.color) + + "'>
" + + data.label + + "

" + + "" + + "" ); $("#pf" + data.id).on({ - touchstart: function (e) { + touchstart: function(e) { e.preventDefault(); padclick(FOR, data.id, true); } }); $("#pf" + data.id).on({ - touchend: function (e) { + touchend: function(e) { e.preventDefault(); padclick(FOR, data.id, false); } }); $("#pl" + data.id).on({ - touchstart: function (e) { + touchstart: function(e) { e.preventDefault(); padclick(LEFT, data.id, true); } }); $("#pl" + data.id).on({ - touchend: function (e) { + touchend: function(e) { e.preventDefault(); padclick(LEFT, data.id, false); } }); $("#pr" + data.id).on({ - touchstart: function (e) { + touchstart: function(e) { e.preventDefault(); padclick(RIGHT, data.id, true); } }); $("#pr" + data.id).on({ - touchend: function (e) { + touchend: function(e) { e.preventDefault(); padclick(RIGHT, data.id, false); } }); $("#pb" + data.id).on({ - touchstart: function (e) { + touchstart: function(e) { e.preventDefault(); padclick(BACK, data.id, true); } }); $("#pb" + data.id).on({ - touchend: function (e) { + touchend: function(e) { e.preventDefault(); padclick(BACK, data.id, false); } }); $("#pc" + data.id).on({ - touchstart: function (e) { + touchstart: function(e) { e.preventDefault(); padclick(CENTER, data.id, true); } }); $("#pc" + data.id).on({ - touchend: function (e) { + touchend: function(e) { e.preventDefault(); padclick(CENTER, data.id, false); } @@ -343,23 +340,23 @@ function start() { case UI_SLIDER: $("#row").append( "
" + - "
" + - data.label + - "

" + - "
" + - "" + - "
" + - "
" + colorClass(data.color) + + "'>" + + "
" + + data.label + + "

" + + "
" + + "" + + "
" + + "" ); $("#row").append( "" @@ -373,21 +370,21 @@ function start() { case UI_NUMBER: $("#row").append( "
" + - "
" + - data.label + - "

" + - "" + - "
" + colorClass(data.color) + + "'>" + + "
" + + data.label + + "

" + + "" + + "" ); break; @@ -398,21 +395,21 @@ function start() { case UI_TEXT_INPUT: $("#row").append( "
" + - "
" + - data.label + - "

" + - "" + - "
" + colorClass(data.color) + + "'>" + + "
" + + data.label + + "

" + + "" + + "" ); break; @@ -487,4 +484,4 @@ function switcher(number, state) { $("#sl" + number).removeClass("checked"); $("#sl" + number).prop("checked", false); } -} \ No newline at end of file +} diff --git a/examples/gui/data/js/controls.min.js b/examples/gui/data/js/controls.min.js index 1424368..d9cf5e7 100644 --- a/examples/gui/data/js/controls.min.js +++ b/examples/gui/data/js/controls.min.js @@ -1,4 +1,4 @@ -const UI_INITIAL_GUI=100;const UI_TITEL=0;const UI_LABEL=1;const UPDATE_LABEL=6;const UI_BUTTON=2;const UI_SWITCHER=3;const UPDATE_SWITCHER=7;const UI_PAD=4;const UI_CPAD=5;const UI_SLIDER=8;const UPDATE_SLIDER=9;const UI_NUMBER=10;const UPDATE_NUMBER=11;const UI_TEXT_INPUT=12;const UPDATE_TEXT_INPUT=13;const UI_GRAPH=14;const CLEAR_GRAPH=15;const ADD_GRAPH_POINT=16;const FOR=0;const BACK=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_NONE=7;const C_DARK=8;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"";case C_DARK:return"dark";default:return"";}} +const UI_INITIAL_GUI=100;const UI_TITEL=0;const UI_LABEL=1;const UPDATE_LABEL=6;const UI_BUTTON=2;const UI_SWITCHER=3;const UPDATE_SWITCHER=7;const UI_PAD=4;const UI_CPAD=5;const UI_SLIDER=8;const UPDATE_SLIDER=9;const UI_NUMBER=10;const UPDATE_NUMBER=11;const UI_TEXT_INPUT=12;const UPDATE_TEXT_INPUT=13;const UI_GRAPH=14;const CLEAR_GRAPH=15;const ADD_GRAPH_POINT=16;const FOR=0;const BACK=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_NONE=7;const C_DARK=8;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}} var websock;var websockConnected=false;function restart(){$(document).add("*").off();$("#row").html("");websock.close();start();} function conStatusError(){websockConnected=false;$("#conStatus").removeClass("color-green");$("#conStatus").addClass("color-red");$("#conStatus").html("Error / No Connection ↻");$("#conStatus").off();$("#conStatus").on({click:restart});} function handleVisibilityChange(){if(!websockConnected&&!document.hidden){restart();}} diff --git a/library.json b/library.json index 70be018..2cad59d 100644 --- a/library.json +++ b/library.json @@ -6,13 +6,16 @@ "type": "git", "url": "https://github.com/s00500/ESPUI.git" }, - "authors": [{ - "name": "Lukas Bachschwell", - "email": "lukas@lbsfilm.at", - "url": "https://lbsfilm.at", - "maintainer": true - }], - "dependencies": [{ + "authors": [ + { + "name": "Lukas Bachschwell", + "email": "lukas@lbsfilm.at", + "url": "https://lbsfilm.at", + "maintainer": true + } + ], + "dependencies": [ + { "name": "ESP Async WebServer", "authors": "Hristo Gochkov", "frameworks": "arduino" @@ -23,7 +26,7 @@ "frameworks": "arduino" } ], - "version": "1.6.1", + "version": "1.6.2", "frameworks": "arduino", "platforms": "*" -} \ No newline at end of file +} diff --git a/library.properties b/library.properties index 4bf9593..6fa28d3 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=ESPUI -version=1.6.1 +version=1.6.2 author=Lukas Bachschwell maintainer=Lukas Bachschwell sentence=ESP32 and ESP8266 Web Interface Library diff --git a/src/ESPUI.h b/src/ESPUI.h index b662010..cb459e7 100644 --- a/src/ESPUI.h +++ b/src/ESPUI.h @@ -99,7 +99,6 @@ typedef struct Control { #define COLOR_CARROT 5 #define COLOR_ALIZARIN 6 #define COLOR_NONE 7 -#define COLOR_DARK 8 class ESPUIClass { public: diff --git a/src/dataControlsJS.h b/src/dataControlsJS.h index 14ccc1c..7fc61b5 100644 --- a/src/dataControlsJS.h +++ b/src/dataControlsJS.h @@ -1,5 +1,5 @@ const char JS_CONTROLS[] PROGMEM = R"=====( -const UI_INITIAL_GUI=100;const UI_TITEL=0;const UI_LABEL=1;const UPDATE_LABEL=6;const UI_BUTTON=2;const UI_SWITCHER=3;const UPDATE_SWITCHER=7;const UI_PAD=4;const UI_CPAD=5;const UI_SLIDER=8;const UPDATE_SLIDER=9;const UI_NUMBER=10;const UPDATE_NUMBER=11;const UI_TEXT_INPUT=12;const UPDATE_TEXT_INPUT=13;const UI_GRAPH=14;const CLEAR_GRAPH=15;const ADD_GRAPH_POINT=16;const FOR=0;const BACK=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_NONE=7;const C_DARK=8;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"";case C_DARK:return"dark";default:return"";}} +const UI_INITIAL_GUI=100;const UI_TITEL=0;const UI_LABEL=1;const UPDATE_LABEL=6;const UI_BUTTON=2;const UI_SWITCHER=3;const UPDATE_SWITCHER=7;const UI_PAD=4;const UI_CPAD=5;const UI_SLIDER=8;const UPDATE_SLIDER=9;const UI_NUMBER=10;const UPDATE_NUMBER=11;const UI_TEXT_INPUT=12;const UPDATE_TEXT_INPUT=13;const UI_GRAPH=14;const CLEAR_GRAPH=15;const ADD_GRAPH_POINT=16;const FOR=0;const BACK=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_NONE=7;const C_DARK=8;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}} var websock;var websockConnected=false;function restart(){$(document).add("*").off();$("#row").html("");websock.close();start();} function conStatusError(){websockConnected=false;$("#conStatus").removeClass("color-green");$("#conStatus").addClass("color-red");$("#conStatus").html("Error / No Connection ↻");$("#conStatus").off();$("#conStatus").on({click:restart});} function handleVisibilityChange(){if(!websockConnected&&!document.hidden){restart();}} @@ -143,4 +143,4 @@ function padclick(type,number,isdown){switch(type){case CENTER:if(isdown)websock function switcher(number,state){if(state==null){if($("#s"+number).is(":checked")){websock.send("sactive:"+number);$("#sl"+number).addClass("checked");}else{websock.send("sinactive:"+number);$("#sl"+number).removeClass("checked");}}else if(state==1){$("#sl"+number).addClass("checked");$("#sl"+number).prop("checked",true);}else if(state==0){$("#sl"+number).removeClass("checked");$("#sl"+number).prop("checked",false);}} )====="; -const uint8_t JS_CONTROLS_GZIP[2122] PROGMEM = { 31,139,8,0,125,24,117,92,2,255,213,89,209,114,219,184,21,125,207,87,112,153,157,72,172,29,217,78,154,237,86,52,61,163,200,74,172,70,43,187,178,188,233,244,69,3,145,80,196,49,5,178,32,40,197,245,232,55,250,33,253,164,126,73,47,0,2,4,105,210,178,173,73,103,250,98,147,23,23,7,7,231,94,92,128,144,31,147,148,89,55,195,217,112,60,156,14,123,163,217,231,155,161,119,114,124,236,250,170,97,58,156,14,70,158,97,24,245,62,130,225,68,25,174,206,123,211,65,110,252,165,240,250,120,51,157,94,142,189,119,133,229,250,235,112,218,191,24,76,188,247,229,174,218,254,167,194,247,170,119,238,253,177,120,237,243,247,15,6,212,104,120,14,29,126,173,0,73,235,159,11,191,241,205,111,31,193,114,114,92,118,84,230,19,99,150,131,191,77,65,131,171,155,169,119,242,174,236,109,54,189,47,122,124,158,244,174,46,188,19,197,178,63,26,244,38,202,168,168,246,206,207,165,105,118,117,57,28,67,127,37,208,167,203,137,150,244,99,175,255,69,203,57,26,124,154,106,209,38,195,207,23,83,45,87,127,48,158,2,107,61,224,108,122,51,249,235,205,229,240,122,160,161,250,179,193,111,131,73,111,116,174,241,250,179,171,1,244,154,12,127,135,174,239,180,241,235,96,218,187,190,186,232,141,12,248,217,245,205,248,211,232,242,107,105,140,126,111,50,185,156,106,237,251,179,222,104,248,247,222,100,56,214,177,238,207,198,151,227,129,14,94,127,118,222,155,124,129,208,44,50,226,179,48,38,150,31,71,49,237,71,40,77,219,226,113,24,56,247,249,131,55,206,86,115,76,181,221,77,55,33,243,151,134,31,74,177,57,211,46,197,44,163,196,134,63,255,200,226,48,197,182,155,187,228,19,87,14,120,133,41,138,2,221,92,168,160,60,18,204,48,165,225,26,83,237,84,168,162,156,54,152,161,52,89,162,136,105,39,173,146,242,73,51,178,136,226,141,129,35,69,83,237,62,162,52,46,250,43,1,85,51,138,194,127,34,26,18,237,192,229,84,141,218,200,69,85,198,0,209,91,219,13,240,2,101,17,43,60,183,219,87,107,68,173,13,158,167,177,127,235,26,207,253,152,16,236,51,28,120,11,20,165,184,8,13,197,41,67,148,181,157,251,159,219,65,236,103,43,76,152,211,65,65,208,182,255,96,59,157,120,177,104,59,238,207,109,251,53,141,55,240,190,100,171,168,109,219,142,155,227,118,252,40,78,49,184,228,40,238,246,149,17,117,114,205,16,203,210,1,204,158,194,8,13,92,56,186,246,133,49,40,94,197,107,44,211,197,22,121,240,246,27,197,152,216,206,3,87,224,89,242,163,56,168,241,146,164,5,11,235,200,26,199,86,206,128,147,124,243,250,215,95,222,127,112,107,122,21,83,47,89,73,251,222,143,66,255,182,155,43,183,45,205,121,137,72,16,225,223,195,52,156,135,81,200,238,250,96,248,6,250,220,135,139,246,79,213,249,191,121,243,147,146,188,179,12,131,0,19,231,94,199,131,7,83,195,170,24,105,119,152,248,96,13,15,163,48,101,152,192,250,177,215,122,76,95,140,105,31,214,115,57,20,162,235,0,122,4,111,172,175,120,126,13,207,152,181,237,77,218,61,58,178,15,54,33,9,226,77,39,138,125,196,9,116,150,113,202,8,90,225,3,251,104,147,26,225,143,73,156,96,226,41,162,109,188,102,124,105,147,52,142,48,244,254,6,128,210,211,226,126,79,136,96,83,164,25,254,14,236,180,116,5,133,34,155,24,205,176,187,53,168,137,220,124,10,55,225,8,144,213,140,45,161,97,110,123,4,141,27,234,16,248,42,148,161,16,17,171,32,240,214,0,49,228,253,229,250,114,220,73,16,133,213,4,13,29,110,115,68,95,236,233,168,207,227,224,78,216,124,120,195,212,131,37,159,151,75,238,222,97,119,9,206,11,102,121,59,239,138,102,224,198,104,28,165,157,69,76,7,8,58,225,8,115,88,239,76,176,128,90,242,93,50,188,231,238,93,65,40,101,80,151,190,133,139,59,229,236,108,93,99,50,109,221,9,102,234,184,115,138,209,173,171,8,136,99,67,87,147,103,33,139,96,46,156,73,132,230,56,18,33,94,161,144,92,96,20,64,233,204,215,105,225,80,197,19,7,140,110,81,139,80,2,41,5,117,234,52,8,215,16,66,72,34,175,197,54,49,223,109,178,21,73,45,168,186,129,197,164,84,150,125,240,202,216,133,114,61,224,221,57,120,101,183,206,78,151,31,172,48,240,90,224,37,154,194,64,152,213,171,160,3,150,211,163,229,7,240,133,42,114,118,154,38,136,136,62,81,185,147,98,34,250,88,226,239,219,13,69,73,129,182,70,81,134,5,26,199,56,59,61,2,254,103,118,117,182,242,244,180,99,186,144,149,47,156,110,227,220,96,106,243,140,49,40,58,49,89,197,89,138,161,14,16,175,37,109,162,242,181,75,19,62,180,248,186,115,90,202,61,75,30,117,150,213,167,245,152,218,133,62,18,167,80,136,139,97,31,228,125,100,45,102,113,230,47,69,121,236,22,11,203,185,199,157,132,98,158,151,231,114,143,132,149,104,146,202,33,14,5,117,168,180,205,208,32,249,75,128,243,34,187,125,176,40,212,81,183,203,151,156,208,222,179,79,101,174,112,73,210,72,147,56,40,114,73,46,114,11,216,64,145,14,64,41,81,4,66,146,100,204,43,229,67,72,32,184,194,110,241,98,224,181,68,151,121,252,93,10,158,86,82,53,38,125,206,90,13,192,183,145,82,180,72,22,69,16,171,124,92,21,7,23,246,178,34,80,158,103,31,219,206,253,243,166,194,167,240,63,163,175,121,111,95,53,172,166,135,201,248,67,23,24,180,228,70,49,87,209,38,12,188,197,110,168,7,252,3,168,171,234,254,41,82,4,161,168,47,66,186,106,149,87,107,130,2,153,143,242,139,225,208,218,185,100,119,245,80,235,118,73,241,194,107,189,150,1,73,252,202,18,190,252,114,122,132,206,108,77,154,115,254,81,5,251,113,129,237,83,130,214,134,72,124,231,107,201,134,44,215,57,10,207,64,199,122,221,224,235,236,57,162,213,185,215,43,182,168,40,246,159,127,253,155,75,6,9,16,238,102,37,190,6,159,195,171,190,67,61,51,186,15,51,254,209,250,28,98,181,254,245,188,162,125,120,241,47,235,231,240,170,245,175,231,53,223,197,235,72,38,154,204,103,97,128,148,44,47,113,190,54,120,74,188,112,75,43,229,95,253,158,86,143,254,132,93,173,22,219,216,214,4,120,180,63,117,145,9,13,220,163,125,185,151,192,171,228,233,254,228,229,250,106,96,79,247,101,95,70,175,210,159,239,79,95,100,123,3,251,249,190,236,75,224,85,242,254,254,228,243,141,170,129,190,191,47,253,10,124,195,129,206,184,250,20,27,157,153,177,197,231,140,56,40,213,117,212,167,193,154,35,149,62,212,40,10,199,142,139,129,132,245,160,225,228,193,33,83,92,131,190,116,231,229,47,111,211,40,12,118,238,194,162,150,61,251,211,73,244,82,199,174,180,225,243,137,222,174,52,9,249,239,109,16,166,62,197,12,171,247,39,112,51,207,146,148,223,126,180,172,85,8,251,195,49,252,71,223,189,214,201,49,60,73,205,91,213,207,143,150,89,170,171,69,187,34,43,16,11,19,6,110,54,231,61,19,67,93,11,150,237,214,235,242,65,216,113,193,11,62,253,242,30,181,89,33,195,39,167,57,227,151,97,109,62,166,129,227,28,22,84,15,109,152,133,173,18,180,156,8,242,154,251,199,28,193,246,8,190,12,75,202,238,34,126,198,231,144,221,121,132,252,91,87,110,173,36,91,85,146,66,70,144,136,171,226,230,128,193,142,46,239,190,148,171,124,43,127,21,192,62,126,212,124,206,54,127,29,16,178,9,46,122,73,195,80,141,43,218,252,5,225,255,77,113,126,187,86,145,252,9,34,243,94,47,149,184,162,149,36,176,67,103,117,223,173,110,221,196,141,92,219,190,33,183,4,78,125,34,73,172,152,90,162,162,235,65,183,230,29,222,10,167,41,2,234,198,21,150,121,123,91,202,26,249,34,111,232,128,134,167,179,33,111,16,36,139,155,208,84,68,153,8,194,93,251,0,254,31,216,93,237,236,154,55,133,208,86,186,52,54,116,172,27,84,106,243,216,168,236,37,163,154,215,22,210,255,48,76,249,241,89,92,86,231,143,229,113,230,220,102,192,139,237,168,226,146,37,134,131,49,156,222,88,121,152,14,43,3,230,183,152,198,5,166,220,126,187,77,76,18,127,55,149,196,47,113,49,114,16,142,180,205,200,139,39,32,47,154,144,249,161,167,25,250,9,250,37,243,38,104,126,150,109,134,142,158,0,29,53,65,139,131,102,51,54,125,2,54,173,193,46,253,130,161,14,45,121,228,225,172,199,176,200,52,241,228,121,226,178,134,191,139,173,174,200,247,48,109,219,221,252,6,202,118,244,143,72,249,184,41,2,248,53,54,134,86,59,165,234,111,252,192,160,64,220,45,159,65,21,41,36,59,177,202,191,76,21,112,2,207,42,230,114,194,127,77,219,77,163,234,147,208,56,41,218,213,137,182,130,125,252,16,187,129,214,14,120,125,162,253,47,92,221,13,122,1,32,0,0 }; +const uint8_t JS_CONTROLS_GZIP[2118] PROGMEM = { 31,139,8,0,29,85,117,92,2,255,213,89,225,114,219,184,17,254,159,167,224,49,55,145,88,59,178,157,52,215,171,104,122,70,145,149,88,141,78,118,101,249,210,233,31,13,68,66,17,199,20,200,130,160,20,215,163,215,232,131,244,145,250,36,93,0,4,8,210,164,101,91,147,206,244,143,68,46,22,31,62,236,46,22,11,208,143,73,202,172,155,225,108,56,30,78,135,189,209,236,243,205,208,59,57,62,118,125,213,48,29,78,7,35,207,16,140,122,31,65,112,162,4,87,231,189,233,32,23,254,82,104,125,188,153,78,47,199,222,187,66,114,253,117,56,237,95,12,38,222,251,114,87,45,255,83,161,123,213,59,247,254,88,188,246,249,251,7,3,106,52,60,135,14,191,86,128,164,244,207,133,222,248,230,183,143,32,57,57,46,43,42,241,137,49,203,193,223,166,96,131,171,155,169,119,242,174,172,109,54,189,47,122,124,158,244,174,46,188,19,197,178,63,26,244,38,74,168,168,246,206,207,165,104,118,117,57,28,67,127,101,160,79,151,19,109,210,143,189,254,23,109,206,209,224,211,84,27,109,50,252,124,49,213,230,234,15,198,83,96,173,7,156,77,111,38,127,189,185,28,94,15,52,84,127,54,248,109,48,233,141,206,53,94,127,118,53,128,94,147,225,239,208,245,157,22,126,29,76,123,215,87,23,189,145,1,63,187,190,25,127,26,93,126,45,141,209,239,77,38,151,83,109,251,254,172,55,26,254,189,55,25,142,181,175,251,179,241,229,120,160,157,215,159,157,247,38,95,192,53,139,140,248,44,140,137,229,199,81,76,251,17,74,211,182,120,28,6,206,125,254,224,141,179,213,28,83,45,119,211,77,200,252,165,161,135,82,108,206,180,75,49,203,40,177,225,231,31,89,28,166,216,118,115,149,124,226,74,1,175,48,69,81,160,155,11,43,40,141,4,51,76,105,184,198,84,43,21,86,81,74,27,204,80,154,44,81,196,180,146,182,146,210,73,51,178,136,226,141,129,35,141,166,218,125,68,105,92,244,87,6,84,205,40,10,255,137,104,72,180,2,55,167,106,12,16,189,181,221,0,47,80,22,49,37,180,221,237,246,213,26,81,107,131,231,105,236,223,186,198,115,63,38,4,251,12,7,222,2,69,41,46,188,64,113,202,16,101,109,231,254,231,118,16,251,217,10,19,230,116,80,16,180,237,63,216,78,39,94,44,218,142,251,115,219,126,77,227,13,188,47,217,42,106,219,182,227,230,184,29,63,138,83,12,42,57,138,187,125,101,56,152,92,51,196,178,116,0,19,165,48,66,3,23,142,174,117,97,12,138,87,241,26,203,200,176,133,203,223,126,163,24,19,219,121,160,10,60,75,122,20,7,53,90,146,180,96,97,29,89,227,216,202,25,112,146,111,94,255,250,203,251,15,110,77,175,98,234,37,41,105,223,251,81,232,223,118,115,203,109,75,115,94,34,18,68,248,247,48,13,231,97,20,178,187,62,8,190,129,125,238,195,69,251,167,234,252,223,188,249,73,153,188,179,12,131,0,19,231,94,251,131,59,83,195,42,31,105,117,152,248,96,13,15,163,48,101,152,192,82,177,215,122,76,95,140,105,31,214,115,57,20,70,215,14,244,8,222,88,95,241,252,26,158,49,107,219,155,180,123,116,100,31,108,66,18,196,155,78,20,251,136,19,232,44,227,148,17,180,194,7,246,209,38,53,220,31,147,56,193,196,83,68,219,120,205,248,42,38,105,28,97,232,253,13,0,165,166,197,245,158,224,193,38,79,51,252,29,216,105,211,21,20,138,104,98,52,195,238,214,160,38,98,243,41,220,132,34,64,86,35,182,132,134,185,236,17,52,46,168,67,224,171,80,186,66,120,172,130,192,91,3,196,144,247,151,235,203,113,39,65,20,86,19,52,116,184,204,17,125,177,167,189,62,143,131,59,33,243,225,13,83,15,150,124,158,25,185,122,135,221,37,56,207,141,229,157,187,43,154,129,27,163,113,148,118,22,49,29,32,232,132,35,204,97,189,51,193,2,114,201,119,201,240,158,171,119,5,161,148,65,10,250,22,46,238,148,178,179,117,141,201,180,117,39,152,169,227,206,41,70,183,174,34,32,42,132,174,38,207,66,22,193,92,56,147,8,205,113,36,92,188,66,33,185,192,40,128,44,153,175,211,66,161,138,39,106,137,110,145,139,80,2,33,5,121,234,52,8,215,224,66,8,34,175,197,54,49,223,88,178,21,73,45,72,176,129,197,164,169,44,251,224,149,177,225,228,246,128,119,231,224,149,221,58,59,93,126,176,194,192,107,129,150,104,10,3,33,86,175,130,14,72,78,143,150,31,64,23,178,200,217,105,154,32,34,250,68,229,78,138,137,232,99,137,223,183,27,138,146,2,109,141,162,12,11,52,142,113,118,122,4,252,207,236,234,108,101,161,180,99,186,16,149,47,156,110,227,220,96,106,243,140,49,72,58,49,89,197,89,138,33,15,16,175,37,101,34,243,181,75,19,62,180,248,186,115,90,74,61,75,30,85,150,217,167,245,152,181,11,251,72,156,194,66,220,24,246,65,222,71,230,98,22,103,254,82,164,199,110,177,176,156,123,220,73,40,230,113,121,46,247,72,88,137,38,169,28,226,80,80,135,76,219,12,13,38,127,9,112,158,100,183,15,22,133,170,106,187,124,201,9,219,123,246,169,140,21,110,146,52,210,36,14,138,88,146,139,220,2,54,144,164,3,176,148,72,2,33,73,50,230,149,226,33,36,224,92,33,183,120,50,240,90,162,203,60,254,46,13,158,86,66,53,38,125,206,90,13,192,183,145,146,183,72,22,69,224,171,124,92,229,7,23,246,178,194,81,158,103,31,219,206,253,243,166,194,167,240,63,163,175,121,111,95,53,172,166,135,193,248,67,23,24,180,228,66,49,87,209,38,4,188,197,110,200,7,252,172,211,85,121,255,20,41,130,144,212,23,33,93,181,202,171,53,65,129,140,71,121,56,56,180,118,46,217,93,61,212,186,93,82,188,240,90,175,165,67,18,191,178,132,47,191,156,30,161,51,91,147,230,156,127,84,194,126,220,192,246,41,65,107,195,72,124,231,107,201,134,44,183,115,20,158,129,29,235,237,6,7,177,231,24,173,78,189,222,98,139,138,197,254,243,175,127,115,147,65,0,132,187,89,137,131,223,115,120,213,119,168,103,70,247,97,198,207,167,207,33,86,171,95,207,43,218,135,23,63,68,63,135,87,173,126,61,175,249,46,94,71,50,208,100,60,11,1,132,100,121,137,243,181,193,67,226,133,91,90,41,254,234,247,180,122,244,39,236,106,181,216,198,182,38,192,163,253,169,139,72,104,224,30,237,203,189,4,94,37,79,247,39,47,215,87,3,123,186,47,251,50,122,149,254,124,127,250,34,218,27,216,207,247,101,95,2,175,146,247,247,39,159,111,84,13,244,253,125,233,87,224,27,10,58,227,150,83,108,116,102,196,22,199,25,81,40,213,117,212,213,96,77,73,165,139,26,69,225,216,113,49,144,176,30,52,156,60,40,50,197,141,231,75,119,94,254,242,54,141,194,96,231,46,44,114,217,179,143,78,162,151,42,187,210,134,227,19,189,93,105,18,242,239,109,16,166,62,197,12,171,247,39,112,51,107,73,202,111,63,90,214,42,132,253,225,24,254,209,119,175,117,114,12,79,210,230,173,234,241,163,101,166,234,106,210,174,152,21,136,133,9,3,53,155,243,158,137,161,174,5,203,118,235,117,185,16,118,92,208,130,163,95,222,163,54,42,164,251,228,52,103,252,50,172,205,199,52,112,156,195,130,234,161,13,179,176,85,128,150,3,65,222,104,255,152,18,108,15,231,75,183,164,236,46,226,53,62,135,236,206,35,228,223,186,114,107,37,217,170,18,20,210,131,68,220,10,55,59,12,118,116,121,247,165,84,229,91,249,84,0,251,248,81,115,157,109,126,8,16,102,19,92,244,146,134,161,26,87,180,249,177,224,255,205,226,252,118,173,98,242,39,24,153,247,122,169,137,43,182,146,4,118,216,89,221,119,171,91,55,113,35,215,182,111,200,45,129,170,79,4,137,21,83,75,100,116,61,232,214,188,195,91,225,52,69,64,221,184,194,50,111,111,75,81,35,95,228,13,29,208,240,116,52,228,13,130,100,113,19,154,10,47,19,65,184,107,31,192,255,129,221,213,202,174,121,83,8,109,165,75,99,195,142,117,131,74,219,60,54,42,123,201,168,230,181,133,212,63,12,83,94,62,139,203,234,252,177,60,206,156,203,12,120,177,29,85,84,178,196,80,48,134,211,27,43,119,211,97,101,192,252,22,211,184,192,148,219,111,183,137,73,226,239,166,146,248,37,46,70,12,66,73,219,140,188,120,2,242,162,9,153,23,61,205,208,79,176,95,50,111,130,230,181,108,51,116,244,4,232,168,9,90,20,154,205,216,244,9,216,180,6,187,244,5,67,21,45,185,231,161,214,99,88,68,154,120,242,60,113,89,195,223,197,86,87,196,123,152,182,237,110,126,3,101,59,250,35,82,62,110,138,0,126,141,141,161,213,78,169,250,27,31,24,20,136,187,229,51,168,34,133,100,39,86,249,203,84,1,39,240,172,98,46,39,252,107,218,110,26,85,157,132,198,73,209,174,42,218,10,246,241,67,236,6,90,59,224,117,69,251,95,108,56,37,174,236,31,0,0 };