diff --git a/libs/js/banglejs/Bangle_setUI_F18.js b/libs/js/banglejs/Bangle_setUI_F18.js index 6c3482624..4a5894425 100644 --- a/libs/js/banglejs/Bangle_setUI_F18.js +++ b/libs/js/banglejs/Bangle_setUI_F18.js @@ -33,15 +33,15 @@ if (!mode) return; if (mode=="updown") { Bangle.btnWatches = [ - setWatch(function() { cb(-1); }, BTN1, {repeat:1,edge:"falling"}), - setWatch(function() { cb(1); }, BTN3, {repeat:1,edge:"falling"}), - setWatch(function() { cb(); }, BTN2, {repeat:1,edge:"falling"}) + setWatch(function() { cb(-1); }, BTN1, {repeat:1,edge:"rising"}), + setWatch(function() { cb(1); }, BTN3, {repeat:1,edge:"rising"}), + setWatch(function() { cb(); }, BTN2, {repeat:1,edge:"rising"}) ]; } else if (mode=="leftright") { Bangle.btnWatches = [ - setWatch(function() { cb(-1); }, BTN1, {repeat:1,edge:"falling"}), - setWatch(function() { cb(1); }, BTN3, {repeat:1,edge:"falling"}), - setWatch(function() { cb(); }, BTN2, {repeat:1,edge:"falling"}) + setWatch(function() { cb(-1); }, BTN1, {repeat:1,edge:"rising"}), + setWatch(function() { cb(1); }, BTN3, {repeat:1,edge:"rising"}), + setWatch(function() { cb(); }, BTN2, {repeat:1,edge:"rising"}) ]; Bangle.swipeHandler = d => {cb(d);}; Bangle.on("swipe", Bangle.swipeHandler); @@ -50,38 +50,43 @@ } else if (mode=="clock") { Bangle.CLOCK=1; Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN2, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN2, {repeat:1,edge:"rising"}) ]; } else if (mode=="clockupdown") { Bangle.CLOCK=1; Bangle.btnWatches = [ - setWatch(function() { cb(-1); }, BTN1, {repeat:1,edge:"falling"}), - setWatch(function() { cb(1); }, BTN3, {repeat:1,edge:"falling"}), - setWatch(Bangle.showLauncher, BTN2, {repeat:1,edge:"falling"}) + setWatch(function() { cb(-1); }, BTN1, {repeat:1,edge:"rising"}), + setWatch(function() { cb(1); }, BTN3, {repeat:1,edge:"rising"}), + setWatch(Bangle.showLauncher, BTN2, {repeat:1,edge:"rising"}) ]; } else if (mode=="custom") { - if (options.clock) Bangle.CLOCK=1; - if (options.touch) { - Bangle.touchHandler = options.touch; - Bangle.on("touch", Bangle.touchHandler); - } - if (options.swipe) { - Bangle.swipeHandler = options.swipe; - Bangle.on("swipe", Bangle.swipeHandler); - } - if (options.btn) { - Bangle.btnWatches = [ - setWatch(function() { options.btn(1); }, BTN1, {repeat:1,edge:"falling"}), - setWatch(function() { options.btn(2); }, BTN2, {repeat:1,edge:"falling"}), - setWatch(function() { options.btn(3); }, BTN3, {repeat:1,edge:"falling"}) - ]; - } else if (options.clock) { + if (options.clock) { Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN2, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN2, {repeat:1,edge:"rising"}) ]; } } else throw new Error("Unknown UI mode "+E.toJS(mode)); + if (options.clock) Bangle.CLOCK=1; + if (options.touch) { + Bangle.touchHandler = options.touch; + Bangle.on("touch", Bangle.touchHandler); + } + if (options.swipe) { + Bangle.swipeHandler = options.swipe; + Bangle.on("swipe", Bangle.swipeHandler); + } + if ((options.btn || options.btnRelease) && !Bangle.btnWatches) Bangle.btnWatches = []; + if (options.btn) Bangle.btnWatches.push( + setWatch(function() { options.btn(1); }, BTN1, {repeat:1,edge:"rising"}), + setWatch(function() { options.btn(2); }, BTN2, {repeat:1,edge:"rising"}), + setWatch(function() { options.btn(3); }, BTN3, {repeat:1,edge:"rising"}) + ); + if (options.btnRelease) Bangle.btnWatches.push( + setWatch(function() { options.btn(1); }, BTN1, {repeat:1,edge:"falling"}), + setWatch(function() { options.btn(2); }, BTN2, {repeat:1,edge:"falling"}), + setWatch(function() { options.btn(3); }, BTN3, {repeat:1,edge:"falling"}) + ); if (options.remove) // handler for removing the UI (intervals/etc) Bangle.uiRemove = options.remove; if (options.redraw) // handler for redrawing the UI @@ -96,7 +101,7 @@ btnWatch = setWatch(function() { btnWatch = undefined; options.back(); - }, BTN3, {edge:"falling"}); + }, BTN3, {edge:"rising"}); WIDGETS = Object.assign({back:{ area:"tl", width:24, draw:e=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),e.x,e.y), diff --git a/libs/js/banglejs/Bangle_setUI_F18.min.js b/libs/js/banglejs/Bangle_setUI_F18.min.js index 4573276e8..f6c674bd9 100644 --- a/libs/js/banglejs/Bangle_setUI_F18.min.js +++ b/libs/js/banglejs/Bangle_setUI_F18.min.js @@ -1,6 +1,6 @@ (function(b,d){var a={};if("object"==typeof b&&(a=b,b=a.mode,!b))throw Error("Missing mode in setUI({...})");var f=!0;global.WIDGETS&&WIDGETS.back&&(f=!1,WIDGETS.back.remove(b&&a.back));Bangle.btnWatches&&(Bangle.btnWatches.forEach(clearWatch),delete Bangle.btnWatches);Bangle.swipeHandler&&(Bangle.removeListener("swipe",Bangle.swipeHandler),delete Bangle.swipeHandler);Bangle.touchHandler&&(Bangle.removeListener("touch",Bangle.touchHandler),delete Bangle.touchHandler);delete Bangle.uiRedraw; -delete Bangle.CLOCK;if(Bangle.uiRemove){let c=Bangle.uiRemove;delete Bangle.uiRemove;c()}g.reset();if(b){if("updown"==b)Bangle.btnWatches=[setWatch(function(){d(-1)},BTN1,{repeat:1,edge:"falling"}),setWatch(function(){d(1)},BTN3,{repeat:1,edge:"falling"}),setWatch(function(){d()},BTN2,{repeat:1,edge:"falling"})];else if("leftright"==b)Bangle.btnWatches=[setWatch(function(){d(-1)},BTN1,{repeat:1,edge:"falling"}),setWatch(function(){d(1)},BTN3,{repeat:1,edge:"falling"}),setWatch(function(){d()},BTN2, -{repeat:1,edge:"falling"})],Bangle.swipeHandler=c=>{d(c)},Bangle.on("swipe",Bangle.swipeHandler),Bangle.touchHandler=c=>{d()},Bangle.on("touch",Bangle.touchHandler);else if("clock"==b)Bangle.CLOCK=1,Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN2,{repeat:1,edge:"falling"})];else if("clockupdown"==b)Bangle.CLOCK=1,Bangle.btnWatches=[setWatch(function(){d(-1)},BTN1,{repeat:1,edge:"falling"}),setWatch(function(){d(1)},BTN3,{repeat:1,edge:"falling"}),setWatch(Bangle.showLauncher,BTN2,{repeat:1,edge:"falling"})]; -else if("custom"==b)a.clock&&(Bangle.CLOCK=1),a.touch&&(Bangle.touchHandler=a.touch,Bangle.on("touch",Bangle.touchHandler)),a.swipe&&(Bangle.swipeHandler=a.swipe,Bangle.on("swipe",Bangle.swipeHandler)),a.btn?Bangle.btnWatches=[setWatch(function(){a.btn(1)},BTN1,{repeat:1,edge:"falling"}),setWatch(function(){a.btn(2)},BTN2,{repeat:1,edge:"falling"}),setWatch(function(){a.btn(3)},BTN3,{repeat:1,edge:"falling"})]:a.clock&&(Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN2,{repeat:1,edge:"falling"})]); -else throw Error("Unknown UI mode "+E.toJS(b));a.remove&&(Bangle.uiRemove=a.remove);a.redraw&&(Bangle.uiRedraw=a.redraw);if(a.back){var h=c=>{1==c&&a.back()};Bangle.on("touch",h);var e;void 0===Bangle.btnWatches&&(e=setWatch(function(){e=void 0;a.back()},BTN3,{edge:"falling"}));WIDGETS=Object.assign({back:{area:"tl",width:24,draw:c=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),c.x,c.y),remove:c=> -{e&&clearWatch(e);Bangle.removeListener("touch",h);c||g.reset().clearRect({x:WIDGETS.back.x,y:WIDGETS.back.y,w:24,h:24});delete WIDGETS.back;c||Bangle.drawWidgets()}}},global.WIDGETS);f&&Bangle.drawWidgets()}}}) \ No newline at end of file +delete Bangle.CLOCK;if(Bangle.uiRemove){let c=Bangle.uiRemove;delete Bangle.uiRemove;c()}g.reset();if(b){if("updown"==b)Bangle.btnWatches=[setWatch(function(){d(-1)},BTN1,{repeat:1,edge:"rising"}),setWatch(function(){d(1)},BTN3,{repeat:1,edge:"rising"}),setWatch(function(){d()},BTN2,{repeat:1,edge:"rising"})];else if("leftright"==b)Bangle.btnWatches=[setWatch(function(){d(-1)},BTN1,{repeat:1,edge:"rising"}),setWatch(function(){d(1)},BTN3,{repeat:1,edge:"rising"}),setWatch(function(){d()},BTN2,{repeat:1, +edge:"rising"})],Bangle.swipeHandler=c=>{d(c)},Bangle.on("swipe",Bangle.swipeHandler),Bangle.touchHandler=c=>{d()},Bangle.on("touch",Bangle.touchHandler);else if("clock"==b)Bangle.CLOCK=1,Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN2,{repeat:1,edge:"rising"})];else if("clockupdown"==b)Bangle.CLOCK=1,Bangle.btnWatches=[setWatch(function(){d(-1)},BTN1,{repeat:1,edge:"rising"}),setWatch(function(){d(1)},BTN3,{repeat:1,edge:"rising"}),setWatch(Bangle.showLauncher,BTN2,{repeat:1,edge:"rising"})]; +else if("custom"==b)a.clock&&(Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN2,{repeat:1,edge:"rising"})]);else throw Error("Unknown UI mode "+E.toJS(b));a.clock&&(Bangle.CLOCK=1);a.touch&&(Bangle.touchHandler=a.touch,Bangle.on("touch",Bangle.touchHandler));a.swipe&&(Bangle.swipeHandler=a.swipe,Bangle.on("swipe",Bangle.swipeHandler));!a.btn&&!a.btnRelease||Bangle.btnWatches||(Bangle.btnWatches=[]);a.btn&&Bangle.btnWatches.push(setWatch(function(){a.btn(1)},BTN1,{repeat:1,edge:"rising"}),setWatch(function(){a.btn(2)}, +BTN2,{repeat:1,edge:"rising"}),setWatch(function(){a.btn(3)},BTN3,{repeat:1,edge:"rising"}));a.btnRelease&&Bangle.btnWatches.push(setWatch(function(){a.btn(1)},BTN1,{repeat:1,edge:"falling"}),setWatch(function(){a.btn(2)},BTN2,{repeat:1,edge:"falling"}),setWatch(function(){a.btn(3)},BTN3,{repeat:1,edge:"falling"}));a.remove&&(Bangle.uiRemove=a.remove);a.redraw&&(Bangle.uiRedraw=a.redraw);if(a.back){var h=c=>{1==c&&a.back()};Bangle.on("touch",h);var e;void 0===Bangle.btnWatches&&(e=setWatch(function(){e= +void 0;a.back()},BTN3,{edge:"rising"}));WIDGETS=Object.assign({back:{area:"tl",width:24,draw:c=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),c.x,c.y),remove:c=>{e&&clearWatch(e);Bangle.removeListener("touch",h);c||g.reset().clearRect({x:WIDGETS.back.x,y:WIDGETS.back.y,w:24,h:24});delete WIDGETS.back;c||Bangle.drawWidgets()}}},global.WIDGETS);f&&Bangle.drawWidgets()}}}) \ No newline at end of file diff --git a/libs/js/banglejs/Bangle_setUI_Q3.js b/libs/js/banglejs/Bangle_setUI_Q3.js index 3a30c43a9..a6453da04 100644 --- a/libs/js/banglejs/Bangle_setUI_Q3.js +++ b/libs/js/banglejs/Bangle_setUI_Q3.js @@ -39,6 +39,7 @@ try{Bangle.buzz(30);}catch(e){} } if (mode=="updown") { + if (options.drag) throw new Error("Custom drag handler not supported in mode updown!") var dy = 0; Bangle.dragHandler = e=>{ dy += e.dy; @@ -52,9 +53,10 @@ Bangle.on('drag',Bangle.dragHandler); Bangle.touchHandler = d => {b();cb();}; Bangle.btnWatches = [ - setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"falling"}), + setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"rising"}), ]; } else if (mode=="leftright") { + if (options.drag) throw new Error("Custom drag handler not supported in mode leftright!") var dx = 0; Bangle.dragHandler = e=>{ dx += e.dx; @@ -68,12 +70,12 @@ Bangle.on('drag',Bangle.dragHandler); Bangle.touchHandler = d => {b();cb();}; Bangle.btnWatches = [ - setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"falling"}), + setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"rising"}), ]; } else if (mode=="clock") { Bangle.CLOCK=1; Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"rising"}) ]; } else if (mode=="clockupdown") { Bangle.CLOCK=1; @@ -82,31 +84,30 @@ b();cb((e.y > 88) ? 1 : -1); }; Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"rising"}) ]; } else if (mode=="custom") { - if (options.clock) Bangle.CLOCK=1; - if (options.touch) - Bangle.touchHandler = options.touch; - if (options.drag) { - Bangle.dragHandler = options.drag; - Bangle.on("drag", Bangle.dragHandler); - } - if (options.swipe) { - Bangle.swipeHandler = options.swipe; - Bangle.on("swipe", Bangle.swipeHandler); - } - if (options.btn) { - Bangle.btnWatches = [ - setWatch(function() { options.btn(1); }, BTN1, {repeat:1,edge:"falling"}) - ]; - } else if (options.clock) { + if (options.clock) { Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"rising"}) ]; } } else throw new Error("Unknown UI mode "+E.toJS(mode)); + if (options.clock) Bangle.CLOCK=1; + if (options.touch) + Bangle.touchHandler = options.touch; + if (options.drag) { + Bangle.dragHandler = options.drag; + Bangle.on("drag", Bangle.dragHandler); + } + if (options.swipe) { + Bangle.swipeHandler = options.swipe; + Bangle.on("swipe", Bangle.swipeHandler); + } + if ((options.btn || options.btnRelease) && !Bangle.btnWatches) Bangle.btnWatches = []; + if (options.btn) Bangle.btnWatches.push(setWatch(options.btn.bind(options), BTN1, {repeat:1,edge:"rising"})) + if (options.btnRelease) Bangle.btnWatches.push(setWatch(options.btnRelease.bind(options), BTN1, {repeat:1,edge:"falling"})) if (options.remove) // handler for removing the UI (intervals/etc) Bangle.uiRemove = options.remove; if (options.redraw) // handler for redrawing the UI @@ -133,7 +134,7 @@ btnWatch = setWatch(function() { btnWatch = undefined; options.back(); - }, BTN1, {edge:"falling"}); + }, BTN1, {edge:"rising"}); WIDGETS = Object.assign({back:{ area:"tl", width:24, draw:e=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),e.x,e.y), diff --git a/libs/js/banglejs/Bangle_setUI_Q3.min.js b/libs/js/banglejs/Bangle_setUI_Q3.min.js index 613765056..f3c841913 100644 --- a/libs/js/banglejs/Bangle_setUI_Q3.min.js +++ b/libs/js/banglejs/Bangle_setUI_Q3.min.js @@ -1,6 +1,7 @@ -(function(c,d){function k(){try{Bangle.buzz(30)}catch(a){}}var b={};if("object"==typeof c&&(b=c,c=b.mode,!c))throw Error("Missing mode in setUI({...})");var m=!0;global.WIDGETS&&WIDGETS.back&&(m=!1,WIDGETS.back.remove(c&&b.back));Bangle.btnWatches&&(Bangle.btnWatches.forEach(clearWatch),delete Bangle.btnWatches);Bangle.swipeHandler&&(Bangle.removeListener("swipe",Bangle.swipeHandler),delete Bangle.swipeHandler);Bangle.dragHandler&&(Bangle.removeListener("drag",Bangle.dragHandler), -delete Bangle.dragHandler);Bangle.touchHandler&&(Bangle.removeListener("touch",Bangle.touchHandler),delete Bangle.touchHandler);delete Bangle.uiRedraw;delete Bangle.CLOCK;if(Bangle.uiRemove){let a=Bangle.uiRemove;delete Bangle.uiRemove;a()}g.reset();if(c){if("updown"==c){var f=0;Bangle.dragHandler=a=>{f+=a.dy;for(a.b||(f=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k(); -d()},BTN1,{repeat:1,edge:"falling"})]}else if("leftright"==c){var h=0;Bangle.dragHandler=a=>{h+=a.dx;for(a.b||(h=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k();d()},BTN1,{repeat:1,edge:"falling"})]}else if("clock"==c)Bangle.CLOCK=1,Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN1,{repeat:1,edge:"falling"})];else if("clockupdown"==c)Bangle.CLOCK=1,Bangle.touchHandler= -(a,e)=>{120>e.x||(k(),d(88{36>e.y&&48>e.x&&(e.handled=!0,E.stopEventPropagation(),b.back())};Bangle.on("touch",n);if(Bangle.touchHandler){var p=Bangle.touchHandler;Bangle.touchHandler=(a,e)=>{e.handled||p(a,e)};Bangle.on("touch",Bangle.touchHandler)}var l;void 0===Bangle.btnWatches&&(l=setWatch(function(){l=void 0;b.back()},BTN1,{edge:"falling"})); -WIDGETS=Object.assign({back:{area:"tl",width:24,draw:a=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),a.x,a.y),remove:a=>{l&&clearWatch(l);Bangle.removeListener("touch",n);a||g.reset().clearRect({x:WIDGETS.back.x,y:WIDGETS.back.y,w:24,h:24});delete WIDGETS.back;a||Bangle.drawWidgets()}}},global.WIDGETS);m&&Bangle.drawWidgets()}else if(Bangle.touchHandler)Bangle.on("touch",Bangle.touchHandler)}}) \ No newline at end of file +(function(c,d){function k(){try{Bangle.buzz(30)}catch(b){}}var a={};if("object"==typeof c&&(a=c,c=a.mode,!c))throw Error("Missing mode in setUI({...})");var m=!0;global.WIDGETS&&WIDGETS.back&&(m=!1,WIDGETS.back.remove(c&&a.back));Bangle.btnWatches&&(Bangle.btnWatches.forEach(clearWatch),delete Bangle.btnWatches);Bangle.swipeHandler&&(Bangle.removeListener("swipe",Bangle.swipeHandler),delete Bangle.swipeHandler);Bangle.dragHandler&&(Bangle.removeListener("drag",Bangle.dragHandler), +delete Bangle.dragHandler);Bangle.touchHandler&&(Bangle.removeListener("touch",Bangle.touchHandler),delete Bangle.touchHandler);delete Bangle.uiRedraw;delete Bangle.CLOCK;if(Bangle.uiRemove){let b=Bangle.uiRemove;delete Bangle.uiRemove;b()}g.reset();if(c){if("updown"==c){if(a.drag)throw Error("Custom drag handler not supported in mode updown!");var f=0;Bangle.dragHandler=b=>{f+=b.dy;for(b.b||(f=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k();d()},BTN1,{repeat:1,edge:"rising"})]}else if("leftright"==c){if(a.drag)throw Error("Custom drag handler not supported in mode leftright!");var h=0;Bangle.dragHandler=b=>{h+=b.dx;for(b.b||(h=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k();d()},BTN1,{repeat:1,edge:"rising"})]}else if("clock"==c)Bangle.CLOCK= +1,Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN1,{repeat:1,edge:"rising"})];else if("clockupdown"==c)Bangle.CLOCK=1,Bangle.touchHandler=(b,e)=>{120>e.x||(k(),d(88{36>e.y&&48>e.x&&(e.handled=!0, +E.stopEventPropagation(),a.back())};Bangle.on("touch",n);if(Bangle.touchHandler){var p=Bangle.touchHandler;Bangle.touchHandler=(b,e)=>{e.handled||p(b,e)};Bangle.on("touch",Bangle.touchHandler)}var l;void 0===Bangle.btnWatches&&(l=setWatch(function(){l=void 0;a.back()},BTN1,{edge:"rising"}));WIDGETS=Object.assign({back:{area:"tl",width:24,draw:b=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),b.x, +b.y),remove:b=>{l&&clearWatch(l);Bangle.removeListener("touch",n);b||g.reset().clearRect({x:WIDGETS.back.x,y:WIDGETS.back.y,w:24,h:24});delete WIDGETS.back;b||Bangle.drawWidgets()}}},global.WIDGETS);m&&Bangle.drawWidgets()}else if(Bangle.touchHandler)Bangle.on("touch",Bangle.touchHandler)}}) \ No newline at end of file