diff --git a/.whitesource b/.whitesource new file mode 100644 index 0000000..9b3d393 --- /dev/null +++ b/.whitesource @@ -0,0 +1,8 @@ +########################################################## +#### WhiteSource "Bolt for Github" configuration file #### +########################################################## + +# Configuration # +#---------------# +ws.repo.scan=true +vulnerable.check.run.conclusion.level=failure diff --git a/CHANGELOG.md b/CHANGELOG.md index c897d8f..ef973c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ ##Changes +###0.0.7 + +* FIX: bug introduced in UTF8 handling + +###0.0.6 + +* FIX: ensure that code and paths being compiled are encoded in utf8 + ###0.0.5 * FIX: pathing issues on windows diff --git a/README.md b/README.md index 5e82024..4665e52 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,28 @@ The official Python language plugin for Light Table. -###License +## Python 2 vs Python 3 +### Linux + +Light Table v0.8.1 is using your system default Python, which on most Linux distributions in time of writing this means Python 2. +If you want to check what is your system default Python, try ```ls -l /usr/bin/python``` you'll probably get something like this: + + lrwxrwxrwx 1 root root 16 Lip 1 21:41 /usr/bin/python -> /usr/bin/python2 + +If you want that Light Table for eval use some other version of Python, put in your ```user.behaviors``` following: + + [:app :lt.plugins.python/python-exe "/usr/bin/pythonX"] + +where **X** is 3 or 3.5 or whatever Python version you have installed and you want to use with LightTable eval. + +##Terminology used + +For (maybe) unknown words like eval or REPL please check http://docs.lighttable.com/#what + +If by chance you see somewhere LT, it stands for Light Table, of course. + + +##License Copyright (C) 2013 Kodowa Inc. diff --git a/plugin.json b/plugin.json index e72d29d..39ef293 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "name": "Python", "author": "Kodowa", - "version": "0.0.5", + "version": "0.0.7", "source": "https://github.com/LightTable/Python", "desc": "Python language plugin for Light Table", "dependencies": { diff --git a/project.clj b/project.clj index ec7107d..04fcfc5 100644 --- a/project.clj +++ b/project.clj @@ -1,3 +1,3 @@ -(defproject com.lighttable/python "0.0.3" +(defproject com.lighttable/python "0.0.7" :description "Python language plugin for Light Table" :dependencies [[org.clojure/clojure "1.5.1"]]) diff --git a/py-src/ltmain.py b/py-src/ltmain.py index 574e7ee..44a9420 100644 --- a/py-src/ltmain.py +++ b/py-src/ltmain.py @@ -46,6 +46,22 @@ def asUnicode(s): except: return str(s) +def toUnicode(s, encoding='utf8'): + """Converts input to unicode if necessary. + + If `s` is bytes, it will be decoded using the `encoding` parameters. + + This function is used for preprocessing /source/ and /filename/ arguments + to the builtin function `compile`. + """ + # In Python2, str == bytes. + # In Python3, bytes remains unchanged, but str means unicode + # while unicode is not defined anymore + if type(s) == bytes: + return s.decode(encoding, 'ignore') + else: + return s + def findLoc(body, line, total): for i in range(len(body)): if body[i].lineno == line: @@ -184,11 +200,11 @@ def handleEval(data): loc = form[0] isEval = False try: - code= compile(code, data[2]["name"], 'eval') + code= compile(toUnicode(code), toUnicode(data[2]["name"]), 'eval') isEval = True except: try: - code= compile(code, data[2]["name"], 'exec') + code= compile(toUnicode(code), toUnicode(data[2]["name"]), 'exec') except: e = traceback.format_exc() send(data[0], "editor.eval.python.exception", {"ex": cleanTrace(e), "meta": loc}) @@ -254,11 +270,11 @@ def ipyEval(data): loc = form[0] isEval = False try: - compile(code, data[2]["name"], 'eval') + compile(toUnicode(code), toUnicode(data[2]["name"]), 'eval') isEval = True except: try: - compile(code, data[2]["name"], 'exec') + compile(toUnicode(code), toUnicode(data[2]["name"]), 'exec') except: e = traceback.format_exc() send(data[0], "editor.eval.python.exception", {"ex": cleanTrace(e), "meta": loc}) diff --git a/python.behaviors b/python.behaviors index 75028bd..3900d70 100644 --- a/python.behaviors +++ b/python.behaviors @@ -1,14 +1,22 @@ -{:+ {:app [(:lt.objs.plugins/load-js ["codemirror/python.js" "python_compiled.js"])] - :clients [:lt.plugins.python/ipython-error - :lt.plugins.python/pyzmq-error] - :editor.python [:lt.plugins.python/python-exception :lt.plugins.python/on-eval - :lt.plugins.python/on-eval.one - :lt.plugins.python/python-result - :lt.plugins.python/python-success - :lt.plugins.python/python-printer - :lt.plugins.python/python-watch - :lt.plugins.python/python-image - :lt.plugins.python/watch-src - [:lt.object/add-tag :watchable]] - :files [(:lt.objs.files/file-types [{:name "Python" :exts [:py :pyw] :mime "text/x-python" :tags [:editor.python]}])] - :python.lang [:lt.plugins.python/eval! :lt.plugins.python/connect]}} +[ + [:app :lt.objs.plugins/load-js ["codemirror/python.js" "python_compiled.js"]] + + [:clients :lt.plugins.python/ipython-error] + [:clients :lt.plugins.python/pyzmq-error] + + [:editor.python :lt.plugins.python/python-exception] + [:editor.python :lt.plugins.python/on-eval] + [:editor.python :lt.plugins.python/on-eval.one] + [:editor.python :lt.plugins.python/python-result] + [:editor.python :lt.plugins.python/python-success] + [:editor.python :lt.plugins.python/python-printer] + [:editor.python :lt.plugins.python/python-watch] + [:editor.python :lt.plugins.python/python-image] + [:editor.python :lt.plugins.python/watch-src] + [:editor.python :lt.object/add-tag :watchable] + + [:files :lt.objs.files/file-types [{:exts [:py :pyw], :mime "text/x-python", :tags [:editor.python], :name "Python"}]] + + [:python.lang :lt.plugins.python/eval!] + [:python.lang :lt.plugins.python/connect] +] diff --git a/python_compiled.js b/python_compiled.js index 4d82f37..c8536d9 100644 --- a/python_compiled.js +++ b/python_compiled.js @@ -1,7 +1,6 @@ if(!lt.util.load.provided_QMARK_('lt.plugins.python')) { goog.provide('lt.plugins.python'); goog.require('cljs.core'); -goog.require('lt.util.cljs'); goog.require('lt.objs.plugins'); goog.require('lt.objs.files'); goog.require('lt.objs.platform'); @@ -12,7 +11,6 @@ goog.require('lt.objs.notifos'); goog.require('lt.objs.proc'); goog.require('lt.objs.notifos'); goog.require('clojure.string'); -goog.require('lt.util.cljs'); goog.require('lt.objs.command'); goog.require('lt.objs.platform'); goog.require('lt.objs.files'); @@ -70,27 +68,27 @@ lt.object.behavior_STAR_.call(null,new cljs.core.Keyword("lt.plugins.python","on lt.object.object_STAR_.call(null,new cljs.core.Keyword("lt.plugins.python","connecting-notifier","lt.plugins.python/connecting-notifier",2640373121),new cljs.core.Keyword(null,"triggers","triggers",2516997421),cljs.core.PersistentVector.EMPTY,new cljs.core.Keyword(null,"behaviors","behaviors",607554515),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword("lt.plugins.python","on-exit","lt.plugins.python/on-exit",954908882),new cljs.core.Keyword("lt.plugins.python","on-error","lt.plugins.python/on-error",2440990976),new cljs.core.Keyword("lt.plugins.python","on-out","lt.plugins.python/on-out",772752070)], null),new cljs.core.Keyword(null,"init","init",1017141378),(function (this$,client){lt.object.merge_BANG_.call(null,this$,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"client","client",3951159101),client,new cljs.core.Keyword(null,"buffer","buffer",3930752946),""], null)); return null; })); -lt.plugins.python.run_py = (function run_py(p__7845){var map__7847 = p__7845;var map__7847__$1 = ((cljs.core.seq_QMARK_.call(null,map__7847))?cljs.core.apply.call(null,cljs.core.hash_map,map__7847):map__7847);var info = map__7847__$1;var venv = cljs.core.get.call(null,map__7847__$1,new cljs.core.Keyword(null,"venv","venv",1017520169));var client = cljs.core.get.call(null,map__7847__$1,new cljs.core.Keyword(null,"client","client",3951159101));var name = cljs.core.get.call(null,map__7847__$1,new cljs.core.Keyword(null,"name","name",1017277949));var project_path = cljs.core.get.call(null,map__7847__$1,new cljs.core.Keyword(null,"project-path","project-path",1907176907));var path = cljs.core.get.call(null,map__7847__$1,new cljs.core.Keyword(null,"path","path",1017337751));var n = lt.objs.notifos.working.call(null,"Connecting..");var obj = lt.object.create.call(null,new cljs.core.Keyword("lt.plugins.python","connecting-notifier","lt.plugins.python/connecting-notifier",2640373121),client);var env = (cljs.core.truth_(venv)?new cljs.core.PersistentArrayMap(null, 1, ["VIRTUAL_ENV",venv], null):cljs.core.PersistentArrayMap.EMPTY);var env__$1 = (cljs.core.truth_(new cljs.core.Keyword(null,"ipython-exe","ipython-exe",2513741372).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python)))?cljs.core.assoc.call(null,env,"LT_IPYTHON_PATH",new cljs.core.Keyword(null,"ipython-exe","ipython-exe",2513741372).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python))):env);return lt.objs.proc.exec.call(null,new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,"command","command",1964298941),(function (){var or__6364__auto__ = new cljs.core.Keyword(null,"python-exe","python-exe",2215073043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python));if(cljs.core.truth_(or__6364__auto__)) -{return or__6364__auto__; +lt.plugins.python.run_py = (function run_py(p__6365){var map__6367 = p__6365;var map__6367__$1 = ((cljs.core.seq_QMARK_.call(null,map__6367))?cljs.core.apply.call(null,cljs.core.hash_map,map__6367):map__6367);var info = map__6367__$1;var venv = cljs.core.get.call(null,map__6367__$1,new cljs.core.Keyword(null,"venv","venv",1017520169));var client = cljs.core.get.call(null,map__6367__$1,new cljs.core.Keyword(null,"client","client",3951159101));var name = cljs.core.get.call(null,map__6367__$1,new cljs.core.Keyword(null,"name","name",1017277949));var project_path = cljs.core.get.call(null,map__6367__$1,new cljs.core.Keyword(null,"project-path","project-path",1907176907));var path = cljs.core.get.call(null,map__6367__$1,new cljs.core.Keyword(null,"path","path",1017337751));var n = lt.objs.notifos.working.call(null,"Connecting..");var obj = lt.object.create.call(null,new cljs.core.Keyword("lt.plugins.python","connecting-notifier","lt.plugins.python/connecting-notifier",2640373121),client);var env = (cljs.core.truth_(venv)?new cljs.core.PersistentArrayMap(null, 1, ["VIRTUAL_ENV",venv], null):cljs.core.PersistentArrayMap.EMPTY);var env__$1 = (cljs.core.truth_(new cljs.core.Keyword(null,"ipython-exe","ipython-exe",2513741372).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python)))?cljs.core.assoc.call(null,env,"LT_IPYTHON_PATH",new cljs.core.Keyword(null,"ipython-exe","ipython-exe",2513741372).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python))):env);return lt.objs.proc.exec.call(null,new cljs.core.PersistentArrayMap(null, 5, [new cljs.core.Keyword(null,"command","command",1964298941),(function (){var or__4884__auto__ = new cljs.core.Keyword(null,"python-exe","python-exe",2215073043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python));if(cljs.core.truth_(or__4884__auto__)) +{return or__4884__auto__; } else -{var or__6364__auto____$1 = new cljs.core.Keyword(null,"venv-py","venv-py",1361849937).cljs$core$IFn$_invoke$arity$1(info);if(cljs.core.truth_(or__6364__auto____$1)) -{return or__6364__auto____$1; +{var or__4884__auto____$1 = new cljs.core.Keyword(null,"venv-py","venv-py",1361849937).cljs$core$IFn$_invoke$arity$1(info);if(cljs.core.truth_(or__4884__auto____$1)) +{return or__4884__auto____$1; } else {return "python"; } } -})(),new cljs.core.Keyword(null,"args","args",1016906831),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.python.py_path,lt.objs.clients.tcp.port,lt.objs.clients.__GT_id.call(null,client)], null),new cljs.core.Keyword(null,"cwd","cwd",1014003170),(function (){var or__6364__auto__ = venv;if(cljs.core.truth_(or__6364__auto__)) -{return or__6364__auto__; +})(),new cljs.core.Keyword(null,"args","args",1016906831),new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [lt.plugins.python.py_path,lt.objs.clients.tcp.port,lt.objs.clients.__GT_id.call(null,client)], null),new cljs.core.Keyword(null,"cwd","cwd",1014003170),(function (){var or__4884__auto__ = venv;if(cljs.core.truth_(or__4884__auto__)) +{return or__4884__auto__; } else {return project_path; } })(),new cljs.core.Keyword(null,"env","env",1014004831),env__$1,new cljs.core.Keyword(null,"obj","obj",1014014057),obj], null)); }); -lt.plugins.python.check_python = (function check_python(obj){return cljs.core.assoc.call(null,obj,new cljs.core.Keyword(null,"python","python",4335674446),(function (){var or__6364__auto__ = new cljs.core.Keyword(null,"python-exe","python-exe",2215073043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python));if(cljs.core.truth_(or__6364__auto__)) -{return or__6364__auto__; +lt.plugins.python.check_python = (function check_python(obj){return cljs.core.assoc.call(null,obj,new cljs.core.Keyword(null,"python","python",4335674446),(function (){var or__4884__auto__ = new cljs.core.Keyword(null,"python-exe","python-exe",2215073043).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,lt.plugins.python.python));if(cljs.core.truth_(or__4884__auto__)) +{return or__4884__auto__; } else -{var or__6364__auto____$1 = new cljs.core.Keyword(null,"venv-py","venv-py",1361849937).cljs$core$IFn$_invoke$arity$1(obj);if(cljs.core.truth_(or__6364__auto____$1)) -{return or__6364__auto____$1; +{var or__4884__auto____$1 = new cljs.core.Keyword(null,"venv-py","venv-py",1361849937).cljs$core$IFn$_invoke$arity$1(obj);if(cljs.core.truth_(or__4884__auto____$1)) +{return or__4884__auto____$1; } else {return lt.plugins.python.shell.which("python"); } @@ -100,11 +98,11 @@ lt.plugins.python.check_python = (function check_python(obj){return cljs.core.as lt.plugins.python.check_client = (function check_client(obj){return cljs.core.assoc.call(null,obj,new cljs.core.Keyword(null,"python-client","python-client",3592991054),lt.objs.files.exists_QMARK_.call(null,lt.plugins.python.py_path)); }); lt.plugins.python.find_project = (function find_project(obj){var p = new cljs.core.Keyword(null,"path","path",1017337751).cljs$core$IFn$_invoke$arity$1(obj);var roots = lt.objs.files.get_roots.call(null);var cur = p;var prev = "";while(true){ -if(cljs.core.truth_((function (){var or__6364__auto__ = cljs.core.empty_QMARK_.call(null,cur);if(or__6364__auto__) -{return or__6364__auto__; +if(cljs.core.truth_((function (){var or__4884__auto__ = cljs.core.empty_QMARK_.call(null,cur);if(or__4884__auto__) +{return or__4884__auto__; } else -{var or__6364__auto____$1 = roots.call(null,cur);if(cljs.core.truth_(or__6364__auto____$1)) -{return or__6364__auto____$1; +{var or__4884__auto____$1 = roots.call(null,cur);if(cljs.core.truth_(or__4884__auto____$1)) +{return or__4884__auto____$1; } else {return cljs.core._EQ_.call(null,cur,prev); } @@ -112,19 +110,19 @@ if(cljs.core.truth_((function (){var or__6364__auto__ = cljs.core.empty_QMARK_.c })())) {return cljs.core.assoc.call(null,obj,new cljs.core.Keyword(null,"project-path","project-path",1907176907),null); } else -{if(cljs.core.truth_((function (){var and__6352__auto__ = cljs.core.not.call(null,lt.objs.files.exists_QMARK_.call(null,lt.objs.files.join.call(null,cur,"__init__.py")));if(and__6352__auto__) +{if(cljs.core.truth_((function (){var and__4872__auto__ = cljs.core.not.call(null,lt.objs.files.exists_QMARK_.call(null,lt.objs.files.join.call(null,cur,"__init__.py")));if(and__4872__auto__) {return lt.objs.files.dir_QMARK_.call(null,cur); } else -{return and__6352__auto__; +{return and__4872__auto__; } })())) {return cljs.core.assoc.call(null,obj,new cljs.core.Keyword(null,"project-path","project-path",1907176907),cur); } else {{ -var G__7889 = lt.objs.files.parent.call(null,cur); -var G__7890 = cur; -cur = G__7889; -prev = G__7890; +var G__6409 = lt.objs.files.parent.call(null,cur); +var G__6410 = cur; +cur = G__6409; +prev = G__6410; continue; } } @@ -138,24 +136,24 @@ lt.plugins.python.find_venv = (function find_venv(obj){var to_find = (cljs.core. {return cljs.core.assoc.call(null,obj,new cljs.core.Keyword(null,"venv","venv",1017520169),lt.objs.files.parent.call(null,lt.objs.files.parent.call(null,vpy)),new cljs.core.Keyword(null,"venv-py","venv-py",1361849937),vpy); } }); -lt.plugins.python.notify = (function notify(obj){var map__7849 = obj;var map__7849__$1 = ((cljs.core.seq_QMARK_.call(null,map__7849))?cljs.core.apply.call(null,cljs.core.hash_map,map__7849):map__7849);var client = cljs.core.get.call(null,map__7849__$1,new cljs.core.Keyword(null,"client","client",3951159101));var python_client = cljs.core.get.call(null,map__7849__$1,new cljs.core.Keyword(null,"python-client","python-client",3592991054));var path = cljs.core.get.call(null,map__7849__$1,new cljs.core.Keyword(null,"path","path",1017337751));var project_path = cljs.core.get.call(null,map__7849__$1,new cljs.core.Keyword(null,"project-path","project-path",1907176907));var python = cljs.core.get.call(null,map__7849__$1,new cljs.core.Keyword(null,"python","python",4335674446));if((cljs.core.not.call(null,python)) || (cljs.core.empty_QMARK_.call(null,python))) +lt.plugins.python.notify = (function notify(obj){var map__6369 = obj;var map__6369__$1 = ((cljs.core.seq_QMARK_.call(null,map__6369))?cljs.core.apply.call(null,cljs.core.hash_map,map__6369):map__6369);var client = cljs.core.get.call(null,map__6369__$1,new cljs.core.Keyword(null,"client","client",3951159101));var python_client = cljs.core.get.call(null,map__6369__$1,new cljs.core.Keyword(null,"python-client","python-client",3592991054));var path = cljs.core.get.call(null,map__6369__$1,new cljs.core.Keyword(null,"path","path",1017337751));var project_path = cljs.core.get.call(null,map__6369__$1,new cljs.core.Keyword(null,"project-path","project-path",1907176907));var python = cljs.core.get.call(null,map__6369__$1,new cljs.core.Keyword(null,"python","python",4335674446));if((cljs.core.not.call(null,python)) || (cljs.core.empty_QMARK_.call(null,python))) {lt.objs.clients.rem_BANG_.call(null,client); lt.objs.notifos.done_working.call(null); -lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"header","header",4087600639),"We couldn't find Python.",new cljs.core.Keyword(null,"body","body",1016933652),"In order to evaluate in Python files, a Python interpreter has to be installed and on your system PATH.",new cljs.core.Keyword(null,"buttons","buttons",1255256819),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"label","label",1116631654),"Download Python",new cljs.core.Keyword(null,"action","action",3885920680),((function (map__7849,map__7849__$1,client,python_client,path,project_path,python){ +lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"header","header",4087600639),"We couldn't find Python.",new cljs.core.Keyword(null,"body","body",1016933652),"In order to evaluate in Python files, a Python interpreter has to be installed and on your system PATH.",new cljs.core.Keyword(null,"buttons","buttons",1255256819),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"label","label",1116631654),"Download Python",new cljs.core.Keyword(null,"action","action",3885920680),((function (map__6369,map__6369__$1,client,python_client,path,project_path,python){ return (function (){return lt.objs.platform.open.call(null,"http://www.python.org/download/"); -});})(map__7849,map__7849__$1,client,python_client,path,project_path,python)) +});})(map__6369,map__6369__$1,client,python_client,path,project_path,python)) ], null),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"label","label",1116631654),"ok"], null)], null)], null)); } else {if(cljs.core.not.call(null,project_path)) {lt.objs.clients.rem_BANG_.call(null,client); lt.objs.notifos.done_working.call(null); -lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"header","header",4087600639),"We couldn't find this file.",new cljs.core.Keyword(null,"body","body",1016933652),"In order to evaluate in Python files, the file has to be on disk somewhere.",new cljs.core.Keyword(null,"buttons","buttons",1255256819),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"label","label",1116631654),"Save this file",new cljs.core.Keyword(null,"action","action",3885920680),((function (map__7849,map__7849__$1,client,python_client,path,project_path,python){ +lt.objs.popup.popup_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"header","header",4087600639),"We couldn't find this file.",new cljs.core.Keyword(null,"body","body",1016933652),"In order to evaluate in Python files, the file has to be on disk somewhere.",new cljs.core.Keyword(null,"buttons","buttons",1255256819),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"label","label",1116631654),"Save this file",new cljs.core.Keyword(null,"action","action",3885920680),((function (map__6369,map__6369__$1,client,python_client,path,project_path,python){ return (function (){lt.objs.command.exec_BANG_.call(null,new cljs.core.Keyword(null,"save","save",1017427183)); return lt.plugins.python.try_connect.call(null,obj); -});})(map__7849,map__7849__$1,client,python_client,path,project_path,python)) -], null),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"label","label",1116631654),"Cancel",new cljs.core.Keyword(null,"action","action",3885920680),((function (map__7849,map__7849__$1,client,python_client,path,project_path,python){ +});})(map__6369,map__6369__$1,client,python_client,path,project_path,python)) +], null),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"label","label",1116631654),"Cancel",new cljs.core.Keyword(null,"action","action",3885920680),((function (map__6369,map__6369__$1,client,python_client,path,project_path,python){ return (function (){return null; -});})(map__7849,map__7849__$1,client,python_client,path,project_path,python)) +});})(map__6369,map__6369__$1,client,python_client,path,project_path,python)) ], null)], null)], null)); } else {if(new cljs.core.Keyword(null,"else","else",1017020587)) @@ -168,7 +166,7 @@ return obj; }); lt.plugins.python.check_all = (function check_all(obj){return lt.plugins.python.notify.call(null,lt.plugins.python.find_project.call(null,lt.plugins.python.check_client.call(null,lt.plugins.python.check_python.call(null,lt.plugins.python.find_venv.call(null,obj))))); }); -lt.plugins.python.try_connect = (function try_connect(p__7850){var map__7852 = p__7850;var map__7852__$1 = ((cljs.core.seq_QMARK_.call(null,map__7852))?cljs.core.apply.call(null,cljs.core.hash_map,map__7852):map__7852);var info = cljs.core.get.call(null,map__7852__$1,new cljs.core.Keyword(null,"info","info",1017141280));var path = new cljs.core.Keyword(null,"path","path",1017337751).cljs$core$IFn$_invoke$arity$1(info);var client = lt.objs.clients.client_BANG_.call(null,new cljs.core.Keyword(null,"python.client","python.client",4480494735));lt.plugins.python.check_all.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"path","path",1017337751),path,new cljs.core.Keyword(null,"client","client",3951159101),client], null)); +lt.plugins.python.try_connect = (function try_connect(p__6370){var map__6372 = p__6370;var map__6372__$1 = ((cljs.core.seq_QMARK_.call(null,map__6372))?cljs.core.apply.call(null,cljs.core.hash_map,map__6372):map__6372);var info = cljs.core.get.call(null,map__6372__$1,new cljs.core.Keyword(null,"info","info",1017141280));var path = new cljs.core.Keyword(null,"path","path",1017337751).cljs$core$IFn$_invoke$arity$1(info);var client = lt.objs.clients.client_BANG_.call(null,new cljs.core.Keyword(null,"python.client","python.client",4480494735));lt.plugins.python.check_all.call(null,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"path","path",1017337751),path,new cljs.core.Keyword(null,"client","client",3951159101),client], null)); return client; }); lt.plugins.python.python_watch = (function python_watch(meta,src){var meta__$1 = JSON.stringify(cljs.core.clj__GT_js.call(null,meta));return [cljs.core.str("sys.modules['lttools'].__dict__['watch']("),cljs.core.str(src),cljs.core.str(", "),cljs.core.str(meta__$1),cljs.core.str(")")].join(''); @@ -201,45 +199,45 @@ lt.plugins.python.__BEH__python_exception = (function __BEH__python_exception(ed return lt.object.raise.call(null,editor,new cljs.core.Keyword(null,"editor.exception","editor.exception",3983021184),new cljs.core.Keyword(null,"ex","ex",1013907493).cljs$core$IFn$_invoke$arity$1(ex),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"line","line",1017226086),new cljs.core.Keyword(null,"end","end",1014004813).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"meta","meta",1017252215).cljs$core$IFn$_invoke$arity$1(ex)),new cljs.core.Keyword(null,"start-line","start-line",3689311729),new cljs.core.Keyword(null,"start","start",1123661780).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"meta","meta",1017252215).cljs$core$IFn$_invoke$arity$1(ex))], null)); }); lt.object.behavior_STAR_.call(null,new cljs.core.Keyword("lt.plugins.python","python-exception","lt.plugins.python/python-exception",1767186692),new cljs.core.Keyword(null,"reaction","reaction",4441361819),lt.plugins.python.__BEH__python_exception,new cljs.core.Keyword(null,"triggers","triggers",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"editor.eval.python.exception","editor.eval.python.exception",3489795712),null], null), null)); -lt.plugins.python.image = (function image(src){var e__7761__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"img","img",1014008629),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"src","src",1014018390),[cljs.core.str("data:image/png;base64,"),cljs.core.str(src)].join('')], null)], null));var seq__7859_7891 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__7860_7892 = null;var count__7861_7893 = 0;var i__7862_7894 = 0;while(true){ -if((i__7862_7894 < count__7861_7893)) -{var vec__7863_7895 = cljs.core._nth.call(null,chunk__7860_7892,i__7862_7894);var ev__7762__auto___7896 = cljs.core.nth.call(null,vec__7863_7895,0,null);var func__7763__auto___7897 = cljs.core.nth.call(null,vec__7863_7895,1,null);lt.util.dom.on.call(null,e__7761__auto__,ev__7762__auto___7896,func__7763__auto___7897); +lt.plugins.python.image = (function image(src){var e__6281__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"img","img",1014008629),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"src","src",1014018390),[cljs.core.str("data:image/png;base64,"),cljs.core.str(src)].join('')], null)], null));var seq__6379_6411 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__6380_6412 = null;var count__6381_6413 = 0;var i__6382_6414 = 0;while(true){ +if((i__6382_6414 < count__6381_6413)) +{var vec__6383_6415 = cljs.core._nth.call(null,chunk__6380_6412,i__6382_6414);var ev__6282__auto___6416 = cljs.core.nth.call(null,vec__6383_6415,0,null);var func__6283__auto___6417 = cljs.core.nth.call(null,vec__6383_6415,1,null);lt.util.dom.on.call(null,e__6281__auto__,ev__6282__auto___6416,func__6283__auto___6417); { -var G__7898 = seq__7859_7891; -var G__7899 = chunk__7860_7892; -var G__7900 = count__7861_7893; -var G__7901 = (i__7862_7894 + 1); -seq__7859_7891 = G__7898; -chunk__7860_7892 = G__7899; -count__7861_7893 = G__7900; -i__7862_7894 = G__7901; +var G__6418 = seq__6379_6411; +var G__6419 = chunk__6380_6412; +var G__6420 = count__6381_6413; +var G__6421 = (i__6382_6414 + 1); +seq__6379_6411 = G__6418; +chunk__6380_6412 = G__6419; +count__6381_6413 = G__6420; +i__6382_6414 = G__6421; continue; } } else -{var temp__4092__auto___7902 = cljs.core.seq.call(null,seq__7859_7891);if(temp__4092__auto___7902) -{var seq__7859_7903__$1 = temp__4092__auto___7902;if(cljs.core.chunked_seq_QMARK_.call(null,seq__7859_7903__$1)) -{var c__7112__auto___7904 = cljs.core.chunk_first.call(null,seq__7859_7903__$1);{ -var G__7905 = cljs.core.chunk_rest.call(null,seq__7859_7903__$1); -var G__7906 = c__7112__auto___7904; -var G__7907 = cljs.core.count.call(null,c__7112__auto___7904); -var G__7908 = 0; -seq__7859_7891 = G__7905; -chunk__7860_7892 = G__7906; -count__7861_7893 = G__7907; -i__7862_7894 = G__7908; +{var temp__4092__auto___6422 = cljs.core.seq.call(null,seq__6379_6411);if(temp__4092__auto___6422) +{var seq__6379_6423__$1 = temp__4092__auto___6422;if(cljs.core.chunked_seq_QMARK_.call(null,seq__6379_6423__$1)) +{var c__5632__auto___6424 = cljs.core.chunk_first.call(null,seq__6379_6423__$1);{ +var G__6425 = cljs.core.chunk_rest.call(null,seq__6379_6423__$1); +var G__6426 = c__5632__auto___6424; +var G__6427 = cljs.core.count.call(null,c__5632__auto___6424); +var G__6428 = 0; +seq__6379_6411 = G__6425; +chunk__6380_6412 = G__6426; +count__6381_6413 = G__6427; +i__6382_6414 = G__6428; continue; } } else -{var vec__7864_7909 = cljs.core.first.call(null,seq__7859_7903__$1);var ev__7762__auto___7910 = cljs.core.nth.call(null,vec__7864_7909,0,null);var func__7763__auto___7911 = cljs.core.nth.call(null,vec__7864_7909,1,null);lt.util.dom.on.call(null,e__7761__auto__,ev__7762__auto___7910,func__7763__auto___7911); +{var vec__6384_6429 = cljs.core.first.call(null,seq__6379_6423__$1);var ev__6282__auto___6430 = cljs.core.nth.call(null,vec__6384_6429,0,null);var func__6283__auto___6431 = cljs.core.nth.call(null,vec__6384_6429,1,null);lt.util.dom.on.call(null,e__6281__auto__,ev__6282__auto___6430,func__6283__auto___6431); { -var G__7912 = cljs.core.next.call(null,seq__7859_7903__$1); -var G__7913 = null; -var G__7914 = 0; -var G__7915 = 0; -seq__7859_7891 = G__7912; -chunk__7860_7892 = G__7913; -count__7861_7893 = G__7914; -i__7862_7894 = G__7915; +var G__6432 = cljs.core.next.call(null,seq__6379_6423__$1); +var G__6433 = null; +var G__6434 = 0; +var G__6435 = 0; +seq__6379_6411 = G__6432; +chunk__6380_6412 = G__6433; +count__6381_6413 = G__6434; +i__6382_6414 = G__6435; continue; } } @@ -248,47 +246,47 @@ continue; } break; } -return e__7761__auto__; +return e__6281__auto__; }); -lt.plugins.python.canvas = (function canvas(){var e__7761__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"canvas","canvas",3941165258)], null));var seq__7871_7916 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__7872_7917 = null;var count__7873_7918 = 0;var i__7874_7919 = 0;while(true){ -if((i__7874_7919 < count__7873_7918)) -{var vec__7875_7920 = cljs.core._nth.call(null,chunk__7872_7917,i__7874_7919);var ev__7762__auto___7921 = cljs.core.nth.call(null,vec__7875_7920,0,null);var func__7763__auto___7922 = cljs.core.nth.call(null,vec__7875_7920,1,null);lt.util.dom.on.call(null,e__7761__auto__,ev__7762__auto___7921,func__7763__auto___7922); +lt.plugins.python.canvas = (function canvas(){var e__6281__auto__ = crate.core.html.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"canvas","canvas",3941165258)], null));var seq__6391_6436 = cljs.core.seq.call(null,cljs.core.partition.call(null,2,cljs.core.PersistentVector.EMPTY));var chunk__6392_6437 = null;var count__6393_6438 = 0;var i__6394_6439 = 0;while(true){ +if((i__6394_6439 < count__6393_6438)) +{var vec__6395_6440 = cljs.core._nth.call(null,chunk__6392_6437,i__6394_6439);var ev__6282__auto___6441 = cljs.core.nth.call(null,vec__6395_6440,0,null);var func__6283__auto___6442 = cljs.core.nth.call(null,vec__6395_6440,1,null);lt.util.dom.on.call(null,e__6281__auto__,ev__6282__auto___6441,func__6283__auto___6442); { -var G__7923 = seq__7871_7916; -var G__7924 = chunk__7872_7917; -var G__7925 = count__7873_7918; -var G__7926 = (i__7874_7919 + 1); -seq__7871_7916 = G__7923; -chunk__7872_7917 = G__7924; -count__7873_7918 = G__7925; -i__7874_7919 = G__7926; +var G__6443 = seq__6391_6436; +var G__6444 = chunk__6392_6437; +var G__6445 = count__6393_6438; +var G__6446 = (i__6394_6439 + 1); +seq__6391_6436 = G__6443; +chunk__6392_6437 = G__6444; +count__6393_6438 = G__6445; +i__6394_6439 = G__6446; continue; } } else -{var temp__4092__auto___7927 = cljs.core.seq.call(null,seq__7871_7916);if(temp__4092__auto___7927) -{var seq__7871_7928__$1 = temp__4092__auto___7927;if(cljs.core.chunked_seq_QMARK_.call(null,seq__7871_7928__$1)) -{var c__7112__auto___7929 = cljs.core.chunk_first.call(null,seq__7871_7928__$1);{ -var G__7930 = cljs.core.chunk_rest.call(null,seq__7871_7928__$1); -var G__7931 = c__7112__auto___7929; -var G__7932 = cljs.core.count.call(null,c__7112__auto___7929); -var G__7933 = 0; -seq__7871_7916 = G__7930; -chunk__7872_7917 = G__7931; -count__7873_7918 = G__7932; -i__7874_7919 = G__7933; +{var temp__4092__auto___6447 = cljs.core.seq.call(null,seq__6391_6436);if(temp__4092__auto___6447) +{var seq__6391_6448__$1 = temp__4092__auto___6447;if(cljs.core.chunked_seq_QMARK_.call(null,seq__6391_6448__$1)) +{var c__5632__auto___6449 = cljs.core.chunk_first.call(null,seq__6391_6448__$1);{ +var G__6450 = cljs.core.chunk_rest.call(null,seq__6391_6448__$1); +var G__6451 = c__5632__auto___6449; +var G__6452 = cljs.core.count.call(null,c__5632__auto___6449); +var G__6453 = 0; +seq__6391_6436 = G__6450; +chunk__6392_6437 = G__6451; +count__6393_6438 = G__6452; +i__6394_6439 = G__6453; continue; } } else -{var vec__7876_7934 = cljs.core.first.call(null,seq__7871_7928__$1);var ev__7762__auto___7935 = cljs.core.nth.call(null,vec__7876_7934,0,null);var func__7763__auto___7936 = cljs.core.nth.call(null,vec__7876_7934,1,null);lt.util.dom.on.call(null,e__7761__auto__,ev__7762__auto___7935,func__7763__auto___7936); +{var vec__6396_6454 = cljs.core.first.call(null,seq__6391_6448__$1);var ev__6282__auto___6455 = cljs.core.nth.call(null,vec__6396_6454,0,null);var func__6283__auto___6456 = cljs.core.nth.call(null,vec__6396_6454,1,null);lt.util.dom.on.call(null,e__6281__auto__,ev__6282__auto___6455,func__6283__auto___6456); { -var G__7937 = cljs.core.next.call(null,seq__7871_7928__$1); -var G__7938 = null; -var G__7939 = 0; -var G__7940 = 0; -seq__7871_7916 = G__7937; -chunk__7872_7917 = G__7938; -count__7873_7918 = G__7939; -i__7874_7919 = G__7940; +var G__6457 = cljs.core.next.call(null,seq__6391_6448__$1); +var G__6458 = null; +var G__6459 = 0; +var G__6460 = 0; +seq__6391_6436 = G__6457; +chunk__6392_6437 = G__6458; +count__6393_6438 = G__6459; +i__6394_6439 = G__6460; continue; } } @@ -297,7 +295,7 @@ continue; } break; } -return e__7761__auto__; +return e__6281__auto__; }); lt.plugins.python.__BEH__python_image = (function __BEH__python_image(editor,img){return lt.object.raise.call(null,editor,new cljs.core.Keyword(null,"editor.result.underline","editor.result.underline",541343758),lt.plugins.python.image.call(null,new cljs.core.Keyword(null,"image","image",1114217677).cljs$core$IFn$_invoke$arity$1(img)),new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"line","line",1017226086),new cljs.core.Keyword(null,"end","end",1014004813).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"meta","meta",1017252215).cljs$core$IFn$_invoke$arity$1(img)),new cljs.core.Keyword(null,"start-line","start-line",3689311729),new cljs.core.Keyword(null,"start","start",1123661780).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"meta","meta",1017252215).cljs$core$IFn$_invoke$arity$1(img))], null)); }); @@ -305,7 +303,7 @@ lt.object.behavior_STAR_.call(null,new cljs.core.Keyword("lt.plugins.python","py lt.plugins.python.__BEH__python_printer = (function __BEH__python_printer(editor,p){return lt.objs.console.loc_log.call(null,new cljs.core.PersistentArrayMap(null, 3, [new cljs.core.Keyword(null,"file","file",1017047278),lt.objs.files.basename.call(null,new cljs.core.Keyword(null,"file","file",1017047278).cljs$core$IFn$_invoke$arity$1(p)),new cljs.core.Keyword(null,"line","line",1017226086),"stdout",new cljs.core.Keyword(null,"content","content",1965434859),new cljs.core.Keyword(null,"msg","msg",1014012659).cljs$core$IFn$_invoke$arity$1(p)], null)); }); lt.object.behavior_STAR_.call(null,new cljs.core.Keyword("lt.plugins.python","python-printer","lt.plugins.python/python-printer",3525927087),new cljs.core.Keyword(null,"reaction","reaction",4441361819),lt.plugins.python.__BEH__python_printer,new cljs.core.Keyword(null,"triggers","triggers",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"editor.eval.python.print","editor.eval.python.print",2695571550),null], null), null)); -lt.plugins.python.__BEH__eval_BANG_ = (function __BEH__eval_BANG_(this$,event){var map__7878 = event;var map__7878__$1 = ((cljs.core.seq_QMARK_.call(null,map__7878))?cljs.core.apply.call(null,cljs.core.hash_map,map__7878):map__7878);var origin = cljs.core.get.call(null,map__7878__$1,new cljs.core.Keyword(null,"origin","origin",4300251800));var info = cljs.core.get.call(null,map__7878__$1,new cljs.core.Keyword(null,"info","info",1017141280));var client = new cljs.core.Keyword(null,"default","default",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"client","client",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,origin)));lt.objs.notifos.working.call(null,""); +lt.plugins.python.__BEH__eval_BANG_ = (function __BEH__eval_BANG_(this$,event){var map__6398 = event;var map__6398__$1 = ((cljs.core.seq_QMARK_.call(null,map__6398))?cljs.core.apply.call(null,cljs.core.hash_map,map__6398):map__6398);var origin = cljs.core.get.call(null,map__6398__$1,new cljs.core.Keyword(null,"origin","origin",4300251800));var info = cljs.core.get.call(null,map__6398__$1,new cljs.core.Keyword(null,"info","info",1017141280));var client = new cljs.core.Keyword(null,"default","default",2558708147).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"client","client",3951159101).cljs$core$IFn$_invoke$arity$1(cljs.core.deref.call(null,origin)));lt.objs.notifos.working.call(null,""); return lt.objs.clients.send.call(null,lt.objs.eval.get_client_BANG_.call(null,new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"command","command",1964298941),new cljs.core.Keyword(null,"editor.eval.python","editor.eval.python",2959445727),new cljs.core.Keyword(null,"origin","origin",4300251800),origin,new cljs.core.Keyword(null,"info","info",1017141280),info,new cljs.core.Keyword(null,"create","create",3956577390),lt.plugins.python.try_connect], null)),new cljs.core.Keyword(null,"editor.eval.python","editor.eval.python",2959445727),info,new cljs.core.Keyword(null,"only","only",1017320222),origin); }); lt.object.behavior_STAR_.call(null,new cljs.core.Keyword("lt.plugins.python","eval!","lt.plugins.python/eval!",1599536011),new cljs.core.Keyword(null,"reaction","reaction",4441361819),lt.plugins.python.__BEH__eval_BANG_,new cljs.core.Keyword(null,"triggers","triggers",2516997421),new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"eval!","eval!",1110791799),null], null), null)); diff --git a/python_compiled.js.map b/python_compiled.js.map index c8b71ef..cded8c3 100644 --- a/python_compiled.js.map +++ b/python_compiled.js.map @@ -1,10 +1,11 @@ {"version":3, - "file":"compiled.map", + "file": + "compiled.map", "sources": ["src/lt/plugins/python.cljs"], - "lineCount":344, + "lineCount":342, "mappings": - ";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,AAAKA,0BAAM,mCAAA,nCAACC;AACZ,AAAKC,4BAAQ,oEAAA,pEAACC,6BAAWC;AAEzB,AAAA,AAAAC,kCAAA,oCAAA,ZAEiCE,MAAKC,MACR,0BAAA,tBAAMC,MAAI,AAAWD,gBACnB,uCAAA,mFAAA,1HAACE,iCAAeH,0JAAeI,cAAIF;AACnC,GAAM,4BAAA,3BAAG,YAAA,ZAAUA;CAAnB,AACE,AACE,AAACG;AACD,6CAAA,2CAAA,+DAAA,hJAACC,gCAAcN;;CAHnB;;;AALhC,AAAAD,mCAAA,yFAAA,6DAAAD,gCAAA,6DAAA,iFAAA;AAYA,AAAA,AAAAS,oCAAA,sCAAA,ZAEiCP,MAAKC,MACR,0BAAA,tBAAMC,MAAI,AAAWD,gBACnB,GAAU,iJAAA,hJAAG,iIAAA,jIAAU,AAAA,uFAAS,AAAAO,0BAACR;CAAjC;;CAAA,AACE,8CAAA,mFAAA,1HAACG,iCAAeH,0JAAeI,cAAIH;;;AALrE,AAAAF,mCAAA,8FAAA,6DAAAQ,kCAAA,6DAAA,iFAAA;AASA,AAAA,AAAAE,mCAAA,qCAAA,ZAEiCT,MAAKC,MAER,oBAAU,AAAA,6FAAY,AAAAO,0BAACR;CAAvB;CAAA,AACE,AAACK;AACD,oCAAA,2CAAA,yDAAA,uBAAA,qDAAA,mFAAA,qDAAA,6IAAA,mFAAA,4LAAA,2DAAA,mFAAA,2CAAA,uDAAA,x+BAACK,+mBAEgE,AAAA,uFAAS,AAAAF,0BAACR;AAE3E,AAACW,oCAAa,AAAA,uFAAS,AAAAH,0BAACR;;AAC1B,AAACY,gCAAc,AAAA,qFAAQ,AAAAJ,0BAACR;AACxB,OAACa,kCAAgBb;;AAZ/C,AAAAD,mCAAA,2FAAA,6DAAAU,iCAAA,6DAAA,iFAAA;AAeA,iCAAA,oHAAA,6DAAA,iCAAA,8DAAA,mFAAA,2FAAA,8FAAA,iGAAA,9pBAACK,mtBAGqB,yBAAA,dAAKd,MAAKe,QACR,sCAAA,2CAAA,gEAAA,yDAAA,1MAACT,gCAAcN,0GAAce;AAD/B;;AAItB,2BAAA,iBAAAC,SAAA,AAAA,IAAAC,YAAAD,YAAAC,gBAAA,EAAA,AAAAC,+BAAAD,YAAA,AAAAE,0BAAAC,mBAAAH,WAAAA,sBAAAA,yBAAA,AAAAI,wBAAAJ,cAAA,mEAAA,AAAAI,wBAAAJ,cAAA,qEAAA,AAAAI,wBAAAJ,cAAA,yEAAA,AAAAI,wBAAAJ,cAAA,iFAAA,AAAAI,wBAAAJ,cAAA,sDAAA,3wBAAMK,wqBAAgBC,/HAAKC,vGAAaC,7GAAKV,vGAAOW,zBAAUC,sjBAC5D,0uBAAA,tuBAAMC,IAAE,kCAAA,lCAACC,sDACHC,MAAI,2BAAA,3BAACC,+IAAoChB,YACzCiB,MAAI,wBAAA,2CAAA,2BAAA,5EAAIN,+DACaA,qDAErBM,UAAI,kBAAI,AAAA,iGAAc,AAAAxB,0BAACyB,4BACjB,8BAAA,9BAACC,0BAAMF,sBAAsB,AAAA,iGAAc,AAAAxB,0BAACyB,4BAC5CD,KACV,mCAAA,2CAAA,vEAACG,kIAAoB,iBAAAC,uKAAA,AAAA,oBAAAA,xKAAI,AAAA,+FAAa,AAAA5B,0BAACyB;CAAlBG;;CAAA,IAAAA,sHAAA,AAAA,oBAAAA,nHAA0B,AAAA,yFAAUT;CAApCS;;CAAA;;;KAArB,qDAAA,wLAAA,rGACmBzC,0BAAQ0C,yBAAS,AAACC,kCAAavB,mEACjC,iBAAAqB,wBAAA,AAAA,oBAAAA,zBAAIV;CAAJU;;CAASZ;;KAF1B,2DAAA,RAGiBQ,2DACAF;;AAGrB,iCAAA,4BAAA,7DAAMS,wDAAcT,KAClB,qCAAA,9BAACI,0BAAMJ,6DAAY,iBAAAM,uKAAA,AAAA,oBAAAA,xKAAI,AAAA,+FAAa,AAAA5B,0BAACyB;CAAlBG;;CAAA,IAAAA,qHAAA,AAAA,oBAAAA,lHACI,AAAA,yFAAUN;CADdM;;CAEI,qCAAA,9BAAQ3C;;;;;AAEjC,iCAAA,4BAAA,7DAAM+C,wDAAcV,KAClB,qCAAA,9BAACI,0BAAMJ,2EAAmB,AAACW,sCAAc9C;;AAE3C,iCAAA,4BAAA,7DAAM+C,wDAAcZ,KAClB,+IAAA,3IAAMa,IAAE,AAAA,mFAAOb,SACTc,QAAM,AAACC,mCACX,uBAAA,nBAAOC,MAAIH,MACJI;AADP,AAEE,oBAAI,iBAAAX,yDAAA,AAAA,GAAAA,zCAAI,AAACY,iCAAOF;CAAZV;;CAAA,IAAAA,4CAAA,AAAA,oBAAAA,zCACI,AAACQ,gBAAME;CADXV;;CAEI,OAACa,yBAAEH,IAAIC;;;;CACb,qCAAA,qEAAA,nGAACb,0BAAMJ;;CACP,oBAAI,iBAAAoB,oIAAA,AAAA,GAAAA,nHAAK,AAACC,wBAAI,AAACV,sCAAc,iCAAA,jCAAC7C,6BAAWkD;CAChC,OAACM,mCAAWN;;CADjBI;;;CAEF,qCAAA,9BAAChB,0BAAMJ,yEAAkBgB;;CACzB;cAAO,AAACO,+BAAaP;cAAKA;;;;;;;;;;AAEpC,8BAAA,yBAAA,vDAAMQ,kDAAWxB,KACf,oPAAA,hPAAMyB,UAAQ,0DAAA,cAAA,tDAAI,AAACC,wEAGbC,MAAI,AAACC,qCAAmB,AAAA,mFAAO5B,KAAKyB,SACxC,GAAI,AAACP,iCAAOS;CACV3B;;CACA,qCAAA,yHAAA,vJAACI,0BAAMJ,uHACK2B,/BAAI,AAACJ,/BAAc,AAACA,+HACrBI;;;AAEjB,2BAAA,sBAAA,jDAAME,4CAAQ7B,KACZ,IAAA8B,oBAAAA,gBAAA,EAAA,AAAA1C,+BAAA0C,YAAA,AAAAzC,0BAAAC,mBAAAwC,WAAAA,wBAAA,AAAAvC,wBAAAuC,cAAA,8EAAA,AAAAvC,wBAAAuC,cAAA,mFAAA,AAAAvC,wBAAAuC,cAAA,yEAAA,AAAAvC,wBAAAuC,cAAA,mFAAA,AAAAvC,wBAAAuC,cAAA,0DAAA,zGAAcC,/HAAOrC,vGAAaD,lIAAKuC,7GAAc/C,5IAASe,0sBAC5D,GACC,CAAI,AAACqB,wBAAIU,aAAQ,AAACb,iCAAOa;CAAS,AACE,AAAClD,oCAAaI;AACd,AAACV;AACD,oCAAA,2CAAA,yDAAA,2BAAA,qDAAA,0GAAA,2DAAA,mFAAA,2CAAA,uDAAA,kBAAA,pkBAACK,6nBAG+B;oBAAA,AACE,uCAAA,hCAACqD;;SAJnC,2CAAA,uDAAA;;CAJrC,GAUC,AAACZ,wBAAI3B;CAAc,AACE,AAACb,oCAAaI;AACd,AAACV;AACD,oCAAA,2CAAA,yDAAA,8BAAA,qDAAA,8EAAA,2DAAA,mFAAA,2CAAA,uDAAA,iBAAA,1iBAACK,mmBAG+B;oBAAA,AACE,qCAAA,rCAACsD;AACD,OAACC,wCAAYnC;;SAL/C,2CAAA,uDAAA,SAAA,yDAOgC;oBAAA,AAAA;;;;CApBtD,GAAA;CAsBO,AAACR,mCAAOQ;;CAtBf;;;AAuBAA;;AAEJ,8BAAA,yBAAA,vDAAMoC,kDAAWpC,gNACXA,tCACA,AAACwB,zCACD,AAACf,zCACD,AAACC,zCACD,AAACE,1CACD,OAACiB;;AAMP,gCAAA,sBAAAQ,SAAA,AAAA,IAAAC,YAAAD,YAAAC,gBAAA,EAAA,AAAAlD,+BAAAkD,YAAA,AAAAjD,0BAAAC,mBAAAgD,WAAAA,sBAAA,AAAA/C,wBAAA+C,cAAA,sDAAA,lUAAMH,+NAAqBtC,mGACzB,gOAAA,5NAAMJ,OAAK,AAAA,mFAAOI,UACZZ,SAAO,uCAAA,vCAACsD,+GACZ,sCAAA,2CAAA,0DAAA,3IAACH,sIAAiB3C,8DACER;AACpBA;;AAEJ,iCAAA,iCAAA,lEAAMuD,wDAAcC,KAAKC,KACvB,oEAAA,hEAAMD,WAAK,AAACE,eAAkB,AAACC,+BAAQH,OACrC,sBAAA,8EAAA,4CAAA,/DAAiDC,uCAASD;;AAE9D,AAAA,AAAAI,qCAAA,gDAAA,rBAEiCC,OAAO9B,IAAIyB,KAAKC,KACnB,OAACF,yCAAaC,KAAKC;;AAHjD,AAAAzE,mCAAA,gGAAA,6DAAA4E,mCAAA,6DAAA,iFAAA;AAKA,AAAA,AAAAE,mCAAA,iCAAA,RAEiCD,QACH,0DAAA,uDAAA,2CAAA,gEAAA,rNAACE,0BAAa7C,oLAAuB2C,4DACA,4HAAA,5HAAC1C,0BAAM,4CAAA,5CAAC,AAAA1B,0BAACoE,6HACD,kDAAA,KAAA,vDAACG,2CAAsBH,iBAAeN;;AALjH,AAAAvE,mCAAA,2FAAA,6DAAA8E,iCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAG,6CAAA,2CAAA,RAEiCJ,QACH,umCAAA,nmCAAMK,OAAK,kDAAA,KAAA,vDAACF,2CAAsBH,iBAAeN,oCAC3CY,MAAI,AAACC,qCAAYP,YACjBjD,OAAK,AAAA,mFAAO,AAAAnB,0BAACoE,aACbjD,WAAK,kBAAI,AAACyD,0CAAcR,SACjB,+BAAA,gGAAA,qDAAA,2CAAA,gMAAA,/ZAAC1C,0BAAMP,0DACC,AAAC0D,mCAAaT,+JACN,AAAA,mFAAI,4CAAA,5CAACO,qCAAYP,oEACnB,AAAA,mFAAI,4CAAA,5CAACO,qCAAYP,wBAC/B,+BAAA,uDAAA,tFAAC1C,0BAAMP,wDAAUuD,yDAAUD,OACtC,0DAAA,uDAAA,2CAAA,gEAAA,rNAACH,0BAAa7C,oLAAuB2C,4DACFjD;;AAbnE,AAAA5B,mCAAA,oGAAA,6DAAAiF,2CAAA,6DAAA,iFAAA;AAeA,AAAA,AAAAM,wCAAA,0CAAA,ZAEiCV,OAAOW,KACV,IAAAC,kVAAA,AAAA,oBAAAA,jVAAiB,AAACnE,wBAAI,AAAA,yFAAU,AAAAb,0BAACoE,SAAQ,AAAA,+EAAA,AAAA,mFAAIW;CAA7C,AAAA,YAAAC,mBAAA,3BAAWC,2BACT,6GAAA,zGAAMC,aAAW,AAAA,uFAASH,KACxB,4IAAA,rIAACT,0BAAa,AAAA,oGAAgBW,iEAAgBC;;CAFlD;;;AAH9B,AAAA3F,mCAAA,qGAAA,6DAAAuF,sCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAK,yCAAA,2CAAA,ZAEiCf,OAAOW,KACV,AAAClF;AACD,wCAAA,mKAAA,2CAAA,+NAAA,9cAACyE,0BAAaF,8EAAsB,AAAA,uFAASW,qGAAY,AAAA,iFAAM,AAAA,mFAAOA,uEACP,AAAA,qFAAA,AAAA,mFAAIA;;AALjG,AAAAxF,mCAAA,wGAAA,6DAAA4F,uCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAC,0CAAA,4CAAA,ZAEiChB,OAAOW,KACV,AAAClF;AACD,wCAAA,uEAAA,SAAA,2CAAA,+NAAA,3XAACyE,0BAAaF,uLAAiC,AAAA,iFAAA,AAAA,mFAAIW,uEACE,AAAA,qFAAA,AAAA,mFAAIA;;AALvF,AAAAxF,mCAAA,0GAAA,6DAAA6F,wCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAC,4CAAA,6CAAA,XAEiCjB,OAAOkB,IACV,AAACzF;AACD,wCAAA,gKAAA,2CAAA,8NAAA,1cAACyE,0BAAaF,oFAAyB,AAAA,+EAAKkB,oGAAW,AAAA,iFAAA,AAAA,mFAAIA,sEACE,AAAA,qFAAA,AAAA,mFAAIA;;AAL/F,AAAA/F,mCAAA,8GAAA,6DAAA8F,0CAAA,6DAAA,iFAAA;AAQA,0BAAA,qBAAA,AAAA,IAAAE,kBAAA,AAAAC,0BAAA,mFAAA,mDAAA,2CAAA,0IAAA,AAAA,IAAAC,iBAAA,AAAAC,wBAAA,AAAAC,8BAAA,EAAA,uCAAAC,mBAAA,SAAAC,mBAAA,MAAAC,eAAA,llBAAOe,0CAAO7C,yRACA,eAAA,wCAA8BA;AAD5C,AAAA,GAAA,AAAA,CAAA8B,eAAAD;CAAA,IAAAE,iBAAA,AAAAC,yBAAAJ,iBAAAE,kBAAAG,wBAAA,AAAAC,wBAAAH,eAAA,EAAA,UAAAI,0BAAA,AAAAD,wBAAAH,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAK,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAAV;cAAAG;cAAAC;cAAA,CAAAC,eAAA;;;;;;;;CAAA,IAAAd,0BAAA,AAAAU,wBAAAD,gBAAA,AAAA,GAAAT;CAAA,AAAA,IAAAS,qBAAAT,wBAAA,AAAA,GAAA,AAAAqB,uCAAAZ;CAAA,IAAAa,uBAAA,AAAAC,gCAAAd,oBAAA,AAAA;cAAA,AAAAe,+BAAAf;cAAAa;cAAA,AAAAG,0BAAAH;cAAA;;;;;;;;CAAA,IAAAI,iBAAA,AAAAC,0BAAAlB,wBAAAQ,wBAAA,AAAAC,wBAAAQ,eAAA,EAAA,UAAAP,0BAAA,AAAAD,wBAAAQ,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAN,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAA,AAAAS,yBAAAnB;cAAA;cAAA;cAAA;;;;;;;;;CAAA;;;;AAAAF;;AAGA,2BAAA,mBAAA,AAAA,IAAAA,kBAAA,AAAAC,0BAAA,mFAAA,kEAAA,AAAA,IAAAsB,iBAAA,AAAApB,wBAAA,AAAAC,8BAAA,EAAA,uCAAAoB,mBAAA,SAAAC,mBAAA,MAAAC,eAAA,3aAAOG;AAAP,AAAA,GAAA,AAAA,CAAAH,eAAAD;CAAA,IAAAE,iBAAA,AAAAlB,yBAAAe,iBAAAE,kBAAAhB,wBAAA,AAAAC,wBAAAgB,eAAA,EAAA,UAAAf,0BAAA,AAAAD,wBAAAgB,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAd,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAAW;cAAAC;cAAAC;cAAA,CAAAC,eAAA;;;;;;;;CAAA,IAAAjC,0BAAA,AAAAU,wBAAAoB,gBAAA,AAAA,GAAA9B;CAAA,AAAA,IAAA8B,qBAAA9B,wBAAA,AAAA,GAAA,AAAAqB,uCAAAS;CAAA,IAAAR,uBAAA,AAAAC,gCAAAO,oBAAA,AAAA;cAAA,AAAAN,+BAAAM;cAAAR;cAAA,AAAAG,0BAAAH;cAAA;;;;;;;;CAAA,IAAAa,iBAAA,AAAAR,0BAAAG,wBAAAb,wBAAA,AAAAC,wBAAAiB,eAAA,EAAA,UAAAhB,0BAAA,AAAAD,wBAAAiB,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAf,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAA,AAAAS,yBAAAE;cAAA;cAAA;cAAA;;;;;;;;;CAAA;;;;AAAAvB;;AAGA,AAAA,AAAA8B,wCAAA,0CAAA,ZAEiCjD,OAAOkD,KAEV,wCAAA,uNAAA,2CAAA,+NAAA,lgBAAChD,0BAAaF,iGAAgC,AAACyC,kCAAM,AAAA,qFAAQS,sGAAa,AAAA,iFAAA,AAAA,mFAAIA,uEACE,AAAA,qFAAA,AAAA,mFAAIA;;AALlH,AAAA/H,mCAAA,qGAAA,6DAAA8H,sCAAA,6DAAA,iFAAA;AAQA,AAAA,AAAAE,0CAAA,0CAAA,VAEiCnD,OAAOjC,GACV,yCAAA,2CAAA,6KAAA,qDAAA,SAAA,xTAACqF,kIAAuB,AAACC,iCAAe,AAAA,mFAAOtF,6HAEpB,AAAA,iFAAMA;;AAL/D,AAAA5C,mCAAA,0GAAA,6DAAAgI,wCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAG,sCAAA,yCAAA,bAEiClI,MAAKmI,OACR,IAAAC,sBAAAA,gBAAA,EAAA,AAAAlH,+BAAAkH,YAAA,AAAAjH,0BAAAC,mBAAAgH,WAAAA,wBAAA,AAAA/G,wBAAA+G,cAAA,qEAAA,AAAA/G,wBAAA+G,cAAA,uRAAA,pUAAczG,7GAAK0G,9IAASF,kWACtBpH,SAAO,AAAA,yFAAA,AAAA,uFAAI,AAAAP,0BAAC6H,UAChB,kCAAA,lCAACxG;AACD,+dAAA,sFAAA,9iBAACyG,+BAAa,wCAAA,2CAAA,2DAAA,iFAAA,gEAAA,0DAAA,zVAACC,wRAC0BF,4DACF1G,8DACEsC,wHAE3BtC,0DAEA0G;;AAb9C,AAAAtI,mCAAA,wFAAA,6DAAAmI,oCAAA,6DAAA,iFAAA;AAeA,iCAAA,jCAAKM;AAEL,AAAA,AAAAC,uCAAA,oCAAA,PAEiCzI,OACH,oBAAUwI;CAAV;;CAAA,AACE,iCAAA,jCAAMA;AACN,2CAAA,2CAAA,yDAAA,yCAAA,qDAAA,0MAAA,2DAAA,mFAAA,2CAAA,uDAAA,uBAAA,vrBAAC9H,gvBAGiC,aAAA,AACE,uCAAA,hCAACqD;WAJrC,2CAAA,uDAAA;;;AALhC,AAAAhE,mCAAA,oGAAA,6DAAA0I,qCAAA,6DAAA,iFAAA;AAYA,AAAA,AAAAC,yCAAA,sCAAA,PAEiC1I,OACH,oBAAUwI;CAAV;;CAAA,AACE,iCAAA,jCAAMA;AACN,2CAAA,2CAAA,yDAAA,oCAAA,qDAAA,oIAAA,2DAAA,mFAAA,2CAAA,uDAAA,uBAAA,5mBAAC9H,qqBAGiC,aAAA,AACE,uCAAA,hCAACqD;WAJrC,2CAAA,uDAAA;;;AALhC,AAAAhE,mCAAA,wGAAA,6DAAA2I,uCAAA,6DAAA,iFAAA;AAYA,AAAA,AAAAC,mCAAA,qCAAA,ZAEiC3I,MAAKuB,MACR,+CAAA,2CAAA,qDAAA,2CAAA,nLAAC0C,wOAA0B1C;;AAHzD,AAAAxB,mCAAA,4FAAA,6DAAA4I,iCAAA,6DAAA,iFAAA;AAMA,iCAAA,oGAAA,qDAAA,iFAAA,3QAAC7H;AAGD,AAAKmB,2BAAO,2BAAA,3BAACF;AAEb,gDAAA,2CAAA,qDAAA,SAAA,qDAAA,kEAAA,hRAAC6G,2UAE4B,aAAA,AACE,8DAAA,vDAACC,8BAAY5G;;AAE5C,AAAA,AAAA6G,sCAAA,uCAAA,XAOiC9I,MAAK+I,KACR,gEAAA,2CAAA,pGAACzI,gCAAc2B,qIAAoB8G;;AARjE,AAAAhJ,mCAAA,kGAAA,6DAAA+I,oCAAA,qDAAA,4DAAA,yDAAA,mFAAA,2CAAA,uDAAA,OAAA,qDAAA,qEAAA,6DAAA,iFAAA,4FAAA,qDAAA,qDAAA,+DAAA;AAUA,AAAA,AAAAE,uCAAA,wCAAA,XAOiChJ,MAAK+I,KACR,gEAAA,2CAAA,pGAACzI,gCAAc2B,uIAAqB8G;;AARlE,AAAAhJ,mCAAA,oGAAA,6DAAAiJ,qCAAA,qDAAA,8CAAA,yDAAA,mFAAA,2CAAA,uDAAA,OAAA,qDAAA,qEAAA,6DAAA,iFAAA,4FAAA,qDAAA,qDAAA,+DAAA", + ";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,AAAKA,0BAAM,mCAAA,nCAACC;AACZ,AAAKC,4BAAQ,oEAAA,pEAACC,6BAAWC;AAEzB,AAAA,AAAAC,kCAAA,oCAAA,ZAEiCE,MAAKC,MACR,0BAAA,tBAAMC,MAAI,AAAWD,gBACnB,uCAAA,mFAAA,1HAACE,iCAAeH,0JAAeI,cAAIF;AACnC,GAAM,4BAAA,3BAAG,YAAA,ZAAUA;CAAnB,AACE,AACE,AAACG;AACD,6CAAA,2CAAA,+DAAA,hJAACC,gCAAcN;;CAHnB;;;AALhC,AAAAD,mCAAA,yFAAA,6DAAAD,gCAAA,6DAAA,iFAAA;AAYA,AAAA,AAAAS,oCAAA,sCAAA,ZAEiCP,MAAKC,MACR,0BAAA,tBAAMC,MAAI,AAAWD,gBACnB,GAAU,iJAAA,hJAAG,iIAAA,jIAAU,AAAA,uFAAA,AAAAO,0BAAUR;CAAjC;;CAAA,AACE,8CAAA,mFAAA,1HAACG,iCAAeH,0JAAeI,cAAIH;;;AALrE,AAAAF,mCAAA,8FAAA,6DAAAQ,kCAAA,6DAAA,iFAAA;AASA,AAAA,AAAAE,mCAAA,qCAAA,ZAEiCT,MAAKC,MAER,oBAAU,AAAA,6FAAA,AAAAO,0BAAaR;CAAvB;CAAA,AACE,AAACK;AACD,oCAAA,2CAAA,yDAAA,uBAAA,qDAAA,mFAAA,qDAAA,6IAAA,mFAAA,4LAAA,2DAAA,mFAAA,2CAAA,uDAAA,x+BAACK,+mBAEgE,AAAA,uFAAA,AAAAF,0BAAUR;AAE3E,AAACW,oCAAa,AAAA,uFAAA,AAAAH,0BAAUR;;AAC1B,AAACY,gCAAc,AAAA,qFAAA,AAAAJ,0BAASR;AACxB,OAACa,kCAAgBb;;AAZ/C,AAAAD,mCAAA,2FAAA,6DAAAU,iCAAA,6DAAA,iFAAA;AAeA,iCAAA,oHAAA,6DAAA,iCAAA,8DAAA,mFAAA,2FAAA,8FAAA,iGAAA,9pBAACK,mtBAGqB,yBAAA,dAAKd,MAAKe,QACR,sCAAA,2CAAA,gEAAA,yDAAA,1MAACT,gCAAcN,0GAAce;AAD/B;;AAItB,2BAAA,iBAAAC,SAAA,AAAA,IAAAC,YAAAD,YAAAC,gBAAA,EAAA,AAAAC,+BAAAD,YAAA,AAAAE,0BAAAC,mBAAAH,WAAAA,sBAAAA,yBAAA,AAAAI,wBAAAJ,cAAA,mEAAA,AAAAI,wBAAAJ,cAAA,qEAAA,AAAAI,wBAAAJ,cAAA,yEAAA,AAAAI,wBAAAJ,cAAA,iFAAA,AAAAI,wBAAAJ,cAAA,sDAAA,3wBAAMK,wqBAAgBC,/HAAKC,vGAAaC,7GAAKV,vGAAOW,zBAAUC,sjBAC5D,0uBAAA,tuBAAMC,IAAE,kCAAA,lCAACC,sDACHC,MAAI,2BAAA,3BAACC,+IAAoChB,YACzCiB,MAAI,wBAAA,2CAAA,2BAAA,5EAAIN,+DACaA,qDAErBM,UAAI,kBAAI,AAAA,iGAAA,AAAAxB,0BAAeyB,4BACjB,8BAAA,9BAACC,0BAAMF,sBAAsB,AAAA,iGAAA,AAAAxB,0BAAeyB,4BAC5CD,KACV,mCAAA,2CAAA,vEAACG,kIAAoB,iBAAAC,uKAAA,AAAA,oBAAAA,xKAAI,AAAA,+FAAA,AAAA5B,0BAAcyB;CAAlBG;;CAAA,IAAAA,sHAAA,AAAA,oBAAAA,nHAA0B,AAAA,yFAAUT;CAApCS;;CAAA;;;KAArB,qDAAA,wLAAA,rGACmBzC,0BAAQ0C,yBAAS,AAACC,kCAAavB,mEACjC,iBAAAqB,wBAAA,AAAA,oBAAAA,zBAAIV;CAAJU;;CAASZ;;KAF1B,2DAAA,RAGiBQ,2DACAF;;AAGrB,iCAAA,4BAAA,7DAAMS,wDAAcT,KAClB,qCAAA,9BAACI,0BAAMJ,6DAAY,iBAAAM,uKAAA,AAAA,oBAAAA,xKAAI,AAAA,+FAAA,AAAA5B,0BAAcyB;CAAlBG;;CAAA,IAAAA,qHAAA,AAAA,oBAAAA,lHACI,AAAA,yFAAUN;CADdM;;CAEI,qCAAA,9BAAQ3C;;;;;AAEjC,iCAAA,4BAAA,7DAAM+C,wDAAcV,KAClB,qCAAA,9BAACI,0BAAMJ,2EAAmB,AAACW,sCAAc9C;;AAE3C,iCAAA,4BAAA,7DAAM+C,wDAAcZ,KAClB,+IAAA,3IAAMa,IAAE,AAAA,mFAAOb,SACTc,QAAM,AAACC,mCACX,uBAAA,nBAAOC,MAAIH,MACJI;AADP,AAEE,oBAAI,iBAAAX,yDAAA,AAAA,GAAAA,zCAAI,AAACY,iCAAOF;CAAZV;;CAAA,IAAAA,4CAAA,AAAA,oBAAAA,zCACI,AAACQ,gBAAME;CADXV;;CAEI,OAACa,yBAAEH,IAAIC;;;;CACb,qCAAA,qEAAA,nGAACb,0BAAMJ;;CACP,oBAAI,iBAAAoB,oIAAA,AAAA,GAAAA,nHAAK,AAACC,wBAAI,AAACV,sCAAc,iCAAA,jCAAC7C,6BAAWkD;CAChC,OAACM,mCAAWN;;CADjBI;;;CAEF,qCAAA,9BAAChB,0BAAMJ,yEAAkBgB;;CACzB;cAAO,AAACO,+BAAaP;cAAKA;;;;;;;;;;AAEpC,8BAAA,yBAAA,vDAAMQ,kDAAWxB,KACf,oPAAA,hPAAMyB,UAAQ,0DAAA,cAAA,tDAAI,AAACC,wEAGbC,MAAI,AAACC,qCAAmB,AAAA,mFAAO5B,KAAKyB,SACxC,GAAI,AAACP,iCAAOS;CACV3B;;CACA,qCAAA,yHAAA,vJAACI,0BAAMJ,uHACK2B,/BAAI,AAACJ,/BAAc,AAACA,+HACrBI;;;AAEjB,2BAAA,sBAAA,jDAAME,4CAAQ7B,KACZ,IAAA8B,oBAAAA,gBAAA,EAAA,AAAA1C,+BAAA0C,YAAA,AAAAzC,0BAAAC,mBAAAwC,WAAAA,wBAAA,AAAAvC,wBAAAuC,cAAA,8EAAA,AAAAvC,wBAAAuC,cAAA,mFAAA,AAAAvC,wBAAAuC,cAAA,yEAAA,AAAAvC,wBAAAuC,cAAA,mFAAA,AAAAvC,wBAAAuC,cAAA,0DAAA,zGAAcC,/HAAOrC,vGAAaD,lIAAKuC,7GAAc/C,5IAASe,0sBAC5D,GACC,CAAI,AAACqB,wBAAIU,aAAQ,AAACb,iCAAOa;CAAS,AACE,AAAClD,oCAAaI;AACd,AAACV;AACD,oCAAA,2CAAA,yDAAA,2BAAA,qDAAA,0GAAA,2DAAA,mFAAA,2CAAA,uDAAA,kBAAA,pkBAACK,6nBAG+B;oBAAA,AACE,uCAAA,hCAACqD;;SAJnC,2CAAA,uDAAA;;CAJrC,GAUC,AAACZ,wBAAI3B;CAAc,AACE,AAACb,oCAAaI;AACd,AAACV;AACD,oCAAA,2CAAA,yDAAA,8BAAA,qDAAA,8EAAA,2DAAA,mFAAA,2CAAA,uDAAA,iBAAA,1iBAACK,mmBAG+B;oBAAA,AACE,qCAAA,rCAACsD;AACD,OAACC,wCAAYnC;;SAL/C,2CAAA,uDAAA,SAAA,yDAOgC;oBAAA,AAAA;;;;CApBtD,GAAA;CAsBO,AAACR,mCAAOQ;;CAtBf;;;AAuBAA;;AAEJ,8BAAA,yBAAA,vDAAMoC,kDAAWpC,gNACXA,tCACA,AAACwB,zCACD,AAACf,zCACD,AAACC,zCACD,AAACE,1CACD,OAACiB;;AAMP,gCAAA,sBAAAQ,SAAA,AAAA,IAAAC,YAAAD,YAAAC,gBAAA,EAAA,AAAAlD,+BAAAkD,YAAA,AAAAjD,0BAAAC,mBAAAgD,WAAAA,sBAAA,AAAA/C,wBAAA+C,cAAA,sDAAA,lUAAMH,+NAAqBtC,mGACzB,gOAAA,5NAAMJ,OAAK,AAAA,mFAAOI,UACZZ,SAAO,uCAAA,vCAACsD,+GACZ,sCAAA,2CAAA,0DAAA,3IAACH,sIAAiB3C,8DACER;AACpBA;;AAEJ,iCAAA,iCAAA,lEAAMuD,wDAAcC,KAAKC,KACvB,oEAAA,hEAAMD,WAAK,AAACE,eAAkB,AAACC,+BAAQH,OACrC,sBAAA,8EAAA,4CAAA,/DAAiDC,uCAASD;;AAE9D,AAAA,AAAAI,qCAAA,gDAAA,rBAEiCC,OAAO9B,IAAIyB,KAAKC,KACnB,OAACF,yCAAaC,KAAKC;;AAHjD,AAAAzE,mCAAA,gGAAA,6DAAA4E,mCAAA,6DAAA,iFAAA;AAKA,AAAA,AAAAE,mCAAA,iCAAA,RAEiCD,QACH,0DAAA,uDAAA,2CAAA,gEAAA,rNAACE,0BAAa7C,oLAAuB2C,4DACA,4HAAA,5HAAC1C,0BAAM,AAAA,AAAA1B,4CAAA,lBAAEoE,6HACD,kDAAA,KAAA,vDAACG,2CAAsBH,iBAAeN;;AALjH,AAAAvE,mCAAA,2FAAA,6DAAA8E,iCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAG,6CAAA,2CAAA,RAEiCJ,QACH,umCAAA,nmCAAMK,OAAK,kDAAA,KAAA,vDAACF,2CAAsBH,iBAAeN,oCAC3CY,MAAI,AAACC,qCAAYP,YACjBjD,OAAK,AAAA,mFAAA,AAAAnB,0BAAQoE,aACbjD,WAAK,kBAAI,AAACyD,0CAAcR,SACjB,+BAAA,gGAAA,qDAAA,2CAAA,gMAAA,/ZAAC1C,0BAAMP,0DACC,AAAC0D,mCAAaT,+JACN,AAAA,mFAAI,4CAAA,5CAACO,qCAAYP,oEACnB,AAAA,mFAAI,4CAAA,5CAACO,qCAAYP,wBAC/B,+BAAA,uDAAA,tFAAC1C,0BAAMP,wDAAUuD,yDAAUD,OACtC,0DAAA,uDAAA,2CAAA,gEAAA,rNAACH,0BAAa7C,oLAAuB2C,4DACFjD;;AAbnE,AAAA5B,mCAAA,oGAAA,6DAAAiF,2CAAA,6DAAA,iFAAA;AAeA,AAAA,AAAAM,wCAAA,0CAAA,ZAEiCV,OAAOW,KACV,IAAAC,kVAAA,AAAA,oBAAAA,jVAAiB,AAACnE,wBAAI,AAAA,yFAAA,AAAAb,0BAAWoE,SAAQ,AAAA,+EAAA,AAAA,mFAAIW;CAA7C,AAAA,YAAAC,mBAAA,3BAAWC,2BACT,6GAAA,zGAAMC,aAAW,AAAA,uFAASH,KACxB,4IAAA,rIAACT,0BAAa,AAAA,oGAAgBW,iEAAgBC;;CAFlD;;;AAH9B,AAAA3F,mCAAA,qGAAA,6DAAAuF,sCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAK,yCAAA,2CAAA,ZAEiCf,OAAOW,KACV,AAAClF;AACD,wCAAA,mKAAA,2CAAA,+NAAA,9cAACyE,0BAAaF,8EAAsB,AAAA,uFAASW,qGAAY,AAAA,iFAAM,AAAA,mFAAOA,uEACP,AAAA,qFAAA,AAAA,mFAAIA;;AALjG,AAAAxF,mCAAA,wGAAA,6DAAA4F,uCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAC,0CAAA,4CAAA,ZAEiChB,OAAOW,KACV,AAAClF;AACD,wCAAA,uEAAA,SAAA,2CAAA,+NAAA,3XAACyE,0BAAaF,uLAAiC,AAAA,iFAAA,AAAA,mFAAIW,uEACE,AAAA,qFAAA,AAAA,mFAAIA;;AALvF,AAAAxF,mCAAA,0GAAA,6DAAA6F,wCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAC,4CAAA,6CAAA,XAEiCjB,OAAOkB,IACV,AAACzF;AACD,wCAAA,gKAAA,2CAAA,8NAAA,1cAACyE,0BAAaF,oFAAyB,AAAA,+EAAKkB,oGAAW,AAAA,iFAAA,AAAA,mFAAIA,sEACE,AAAA,qFAAA,AAAA,mFAAIA;;AAL/F,AAAA/F,mCAAA,8GAAA,6DAAA8F,0CAAA,6DAAA,iFAAA;AAQA,0BAAA,qBAAA,AAAA,IAAAE,kBAAA,AAAAC,0BAAA,mFAAA,mDAAA,2CAAA,0IAAA,AAAA,IAAAC,iBAAA,AAAAC,wBAAA,AAAAC,8BAAA,EAAA,uCAAAC,mBAAA,SAAAC,mBAAA,MAAAC,eAAA,llBAAOe,0CAAO7C,yRACA,eAAA,wCAA8BA;AAD5C,AAAA,GAAA,AAAA,CAAA8B,eAAAD;CAAA,IAAAE,iBAAA,AAAAC,yBAAAJ,iBAAAE,kBAAAG,wBAAA,AAAAC,wBAAAH,eAAA,EAAA,UAAAI,0BAAA,AAAAD,wBAAAH,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAK,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAAV;cAAAG;cAAAC;cAAA,CAAAC,eAAA;;;;;;;;CAAA,IAAAd,0BAAA,AAAAU,wBAAAD,gBAAA,AAAA,GAAAT;CAAA,AAAA,IAAAS,qBAAAT,wBAAA,AAAA,GAAA,AAAAqB,uCAAAZ;CAAA,IAAAa,uBAAA,AAAAC,gCAAAd,oBAAA,AAAA;cAAA,AAAAe,+BAAAf;cAAAa;cAAA,AAAAG,0BAAAH;cAAA;;;;;;;;CAAA,IAAAI,iBAAA,AAAAC,0BAAAlB,wBAAAQ,wBAAA,AAAAC,wBAAAQ,eAAA,EAAA,UAAAP,0BAAA,AAAAD,wBAAAQ,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAN,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAA,AAAAS,yBAAAnB;cAAA;cAAA;cAAA;;;;;;;;;CAAA;;;;AAAAF;;AAGA,2BAAA,mBAAA,AAAA,IAAAA,kBAAA,AAAAC,0BAAA,mFAAA,kEAAA,AAAA,IAAAsB,iBAAA,AAAApB,wBAAA,AAAAC,8BAAA,EAAA,uCAAAoB,mBAAA,SAAAC,mBAAA,MAAAC,eAAA,3aAAOG;AAAP,AAAA,GAAA,AAAA,CAAAH,eAAAD;CAAA,IAAAE,iBAAA,AAAAlB,yBAAAe,iBAAAE,kBAAAhB,wBAAA,AAAAC,wBAAAgB,eAAA,EAAA,UAAAf,0BAAA,AAAAD,wBAAAgB,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAd,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAAW;cAAAC;cAAAC;cAAA,CAAAC,eAAA;;;;;;;;CAAA,IAAAjC,0BAAA,AAAAU,wBAAAoB,gBAAA,AAAA,GAAA9B;CAAA,AAAA,IAAA8B,qBAAA9B,wBAAA,AAAA,GAAA,AAAAqB,uCAAAS;CAAA,IAAAR,uBAAA,AAAAC,gCAAAO,oBAAA,AAAA;cAAA,AAAAN,+BAAAM;cAAAR;cAAA,AAAAG,0BAAAH;cAAA;;;;;;;;CAAA,IAAAa,iBAAA,AAAAR,0BAAAG,wBAAAb,wBAAA,AAAAC,wBAAAiB,eAAA,EAAA,UAAAhB,0BAAA,AAAAD,wBAAAiB,eAAA,EAAA,MAAA,AAAA,AAAA,AAAAf,yBAAAb,gBAAAU,sBAAAE;AAAA;cAAA,AAAAS,yBAAAE;cAAA;cAAA;cAAA;;;;;;;;;CAAA;;;;AAAAvB;;AAGA,AAAA,AAAA8B,wCAAA,0CAAA,ZAEiCjD,OAAOkD,KAEV,wCAAA,uNAAA,2CAAA,+NAAA,lgBAAChD,0BAAaF,iGAAgC,AAACyC,kCAAM,AAAA,qFAAQS,sGAAa,AAAA,iFAAA,AAAA,mFAAIA,uEACE,AAAA,qFAAA,AAAA,mFAAIA;;AALlH,AAAA/H,mCAAA,qGAAA,6DAAA8H,sCAAA,6DAAA,iFAAA;AAQA,AAAA,AAAAE,0CAAA,0CAAA,VAEiCnD,OAAOjC,GACV,yCAAA,2CAAA,6KAAA,qDAAA,SAAA,xTAACqF,kIAAuB,AAACC,iCAAe,AAAA,mFAAOtF,6HAEpB,AAAA,iFAAMA;;AAL/D,AAAA5C,mCAAA,0GAAA,6DAAAgI,wCAAA,6DAAA,iFAAA;AAOA,AAAA,AAAAG,sCAAA,yCAAA,bAEiClI,MAAKmI,OACR,IAAAC,sBAAAA,gBAAA,EAAA,AAAAlH,+BAAAkH,YAAA,AAAAjH,0BAAAC,mBAAAgH,WAAAA,wBAAA,AAAA/G,wBAAA+G,cAAA,qEAAA,AAAA/G,wBAAA+G,cAAA,uRAAA,pUAAczG,7GAAK0G,9IAASF,kWACtBpH,SAAO,AAAA,yFAAA,AAAA,uFAAA,AAAAP,0BAAK6H,UAChB,kCAAA,lCAACxG;AACD,+dAAA,sFAAA,9iBAACyG,+BAAa,wCAAA,2CAAA,2DAAA,iFAAA,gEAAA,0DAAA,zVAACC,wRAC0BF,4DACF1G,8DACEsC,wHAE3BtC,0DAEA0G;;AAb9C,AAAAtI,mCAAA,wFAAA,6DAAAmI,oCAAA,6DAAA,iFAAA;AAeA,iCAAA,jCAAKM;AAEL,AAAA,AAAAC,uCAAA,oCAAA,PAEiCzI,OACH,oBAAUwI;CAAV;;CAAA,AACE,iCAAA,jCAAMA;AACN,2CAAA,2CAAA,yDAAA,yCAAA,qDAAA,0MAAA,2DAAA,mFAAA,2CAAA,uDAAA,uBAAA,vrBAAC9H,gvBAGiC,aAAA,AACE,uCAAA,hCAACqD;WAJrC,2CAAA,uDAAA;;;AALhC,AAAAhE,mCAAA,oGAAA,6DAAA0I,qCAAA,6DAAA,iFAAA;AAYA,AAAA,AAAAC,yCAAA,sCAAA,PAEiC1I,OACH,oBAAUwI;CAAV;;CAAA,AACE,iCAAA,jCAAMA;AACN,2CAAA,2CAAA,yDAAA,oCAAA,qDAAA,oIAAA,2DAAA,mFAAA,2CAAA,uDAAA,uBAAA,5mBAAC9H,qqBAGiC,aAAA,AACE,uCAAA,hCAACqD;WAJrC,2CAAA,uDAAA;;;AALhC,AAAAhE,mCAAA,wGAAA,6DAAA2I,uCAAA,6DAAA,iFAAA;AAYA,AAAA,AAAAC,mCAAA,qCAAA,ZAEiC3I,MAAKuB,MACR,+CAAA,2CAAA,qDAAA,2CAAA,nLAAC0C,wOAA0B1C;;AAHzD,AAAAxB,mCAAA,4FAAA,6DAAA4I,iCAAA,6DAAA,iFAAA;AAMA,iCAAA,oGAAA,qDAAA,iFAAA,3QAAC7H;AAGD,AAAKmB,2BAAO,2BAAA,3BAACF;AAEb,gDAAA,2CAAA,qDAAA,SAAA,qDAAA,kEAAA,hRAAC6G,2UAE4B,aAAA,AACE,8DAAA,vDAACC,8BAAY5G;;AAE5C,AAAA,AAAA6G,sCAAA,uCAAA,XAOiC9I,MAAK+I,KACR,gEAAA,2CAAA,pGAACzI,gCAAc2B,qIAAoB8G;;AARjE,AAAAhJ,mCAAA,kGAAA,6DAAA+I,oCAAA,qDAAA,4DAAA,yDAAA,mFAAA,2CAAA,uDAAA,OAAA,qDAAA,qEAAA,6DAAA,iFAAA,4FAAA,qDAAA,qDAAA,+DAAA;AAUA,AAAA,AAAAE,uCAAA,wCAAA,XAOiChJ,MAAK+I,KACR,gEAAA,2CAAA,pGAACzI,gCAAc2B,uIAAqB8G;;AARlE,AAAAhJ,mCAAA,oGAAA,6DAAAiJ,qCAAA,qDAAA,8CAAA,yDAAA,mFAAA,2CAAA,uDAAA,OAAA,qDAAA,qEAAA,6DAAA,iFAAA,4FAAA,qDAAA,qDAAA,+DAAA", "names": ["lt.plugins.python/shell", "lt.util.load/node-module", "lt.plugins.python/py-path", "lt.objs.files/join", @@ -14,24 +15,24 @@ "lt.plugins.python/__BEH__on-error", "cljs.core/deref", "lt.plugins.python/__BEH__on-exit", "lt.objs.popup/popup!", "lt.objs.clients/rem!", "lt.objs.proc/kill-all", - "lt.object/destroy!", "lt.object/object*", "client", "p__7845", - "map__7847", "cljs.core/seq?", "cljs.core/apply", + "lt.object/destroy!", "lt.object/object*", "client", "p__6365", + "map__6367", "cljs.core/seq?", "cljs.core/apply", "cljs.core/hash-map", "cljs.core/get", "lt.plugins.python/run-py", "path", "project-path", "name", "venv", "info", "n", "lt.objs.notifos/working", "obj", "lt.object/create", "env", "lt.plugins.python/python", "cljs.core/assoc", "lt.objs.proc/exec", - "or__6364__auto__", "lt.objs.clients.tcp/port", + "or__4884__auto__", "lt.objs.clients.tcp/port", "lt.objs.clients/->id", "lt.plugins.python/check-python", "lt.plugins.python/check-client", "lt.objs.files/exists?", "lt.plugins.python/find-project", "p", "roots", "lt.objs.files/get-roots", "cur", "prev", "cljs.core/empty?", - "cljs.core/=", "and__6352__auto__", "cljs.core/not", + "cljs.core/=", "and__4872__auto__", "cljs.core/not", "lt.objs.files/dir?", "lt.objs.files/parent", "lt.plugins.python/find-venv", "to-find", "lt.objs.platform/win?", "vpy", "lt.objs.files/walk-up-find", "lt.plugins.python/notify", - "map__7849", "python", "python-client", "lt.objs.platform/open", + "map__6369", "python", "python-client", "lt.objs.platform/open", "lt.objs.command/exec!", "lt.plugins.python/try-connect", - "lt.plugins.python/check-all", "p__7850", "map__7852", + "lt.plugins.python/check-all", "p__6370", "map__6372", "lt.objs.clients/client!", "lt.plugins.python/python-watch", "meta", "src", "js/JSON.stringify", "cljs.core/clj->js", "lt.plugins.python/__BEH__watch-src", "editor", @@ -43,19 +44,19 @@ "res", "temp__4092__auto__", "watch", "str-result", "lt.plugins.python/__BEH__python-result", "lt.plugins.python/__BEH__python-success", - "lt.plugins.python/__BEH__python-exception", "ex", "e__7761__auto__", - "crate.core/html", "seq__7859", "cljs.core/seq", - "cljs.core/partition", "chunk__7860", "count__7861", "i__7862", - "vec__7863", "cljs.core/-nth", "ev__7762__auto__", "cljs.core/nth", - "func__7763__auto__", "lt.util.dom/on", "cljs.core/chunked-seq?", - "c__7112__auto__", "cljs.core/chunk-first", "cljs.core/chunk-rest", - "cljs.core/count", "vec__7864", "cljs.core/first", "cljs.core/next", - "lt.plugins.python/image", "seq__7871", "chunk__7872", "count__7873", - "i__7874", "vec__7875", "vec__7876", "lt.plugins.python/canvas", + "lt.plugins.python/__BEH__python-exception", "ex", "e__6281__auto__", + "crate.core/html", "seq__6379", "cljs.core/seq", + "cljs.core/partition", "chunk__6380", "count__6381", "i__6382", + "vec__6383", "cljs.core/-nth", "ev__6282__auto__", "cljs.core/nth", + "func__6283__auto__", "lt.util.dom/on", "cljs.core/chunked-seq?", + "c__5632__auto__", "cljs.core/chunk-first", "cljs.core/chunk-rest", + "cljs.core/count", "vec__6384", "cljs.core/first", "cljs.core/next", + "lt.plugins.python/image", "seq__6391", "chunk__6392", "count__6393", + "i__6394", "vec__6395", "vec__6396", "lt.plugins.python/canvas", "lt.plugins.python/__BEH__python-image", "img", "lt.plugins.python/__BEH__python-printer", "lt.objs.console/loc-log", "lt.objs.files/basename", "lt.plugins.python/__BEH__eval!", "event", - "map__7878", "origin", "lt.objs.clients/send", + "map__6398", "origin", "lt.objs.clients/send", "lt.objs.eval/get-client!", "lt.plugins.python/pyzmq-warned", "lt.plugins.python/__BEH__pyzmq-error", "lt.plugins.python/__BEH__ipython-error", diff --git a/src/lt/plugins/python.cljs b/src/lt/plugins/python.cljs index 6e0fdee..c658f0a 100644 --- a/src/lt/plugins/python.cljs +++ b/src/lt/plugins/python.cljs @@ -16,8 +16,7 @@ [clojure.string :as string] [lt.objs.clients :as clients] [lt.objs.notifos :as notifos] - [lt.util.load :as load] - [lt.util.cljs :refer [js->clj]]) + [lt.util.load :as load]) (:require-macros [lt.macros :refer [behavior defui]])) ;;****************************************************