Реализовать расширяемую платформу Муром 1.2 с панелью управления 1.0.0

This commit is contained in:
kornerr committed 2019-10-16 14:49:11 +03:00
1 parent 8752fdf1e8
commit 898981e9dd
9 files changed
+1124 -228

No files matched your search

+1
View File
@@ -0,0 +1 @@
муром_1.2.0.html
+99
View File
@@ -0,0 +1,99 @@
/*
*
* UUID
*
*/
// Create GUID / UUID in JavaScript?
// https://stackoverflow.com/a/2117523
муром.uuid = function()
{
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
/[xy]/g,
function(c)
{
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
}
);
};
/*
*
* Уведомитель / Reporter
*
*/
// ReporterSubscription class.
function ReporterSubscription(id, callback, reporter)
{
this.id = id;
this.callback = callback;
this.reporter = reporter;
}
// Reporter class.
function Reporter(name)
{
this.name =
(typeof name !== "undefined") ?
name :
"";
this.subscriptions = [];
}
Reporter.prototype.report = function()
{
for (var id in this.subscriptions)
{
var subscription = this.subscriptions[id];
subscription.callback();
}
}
Reporter.prototype.subscribe = function(callback)
{
var id = murom.uuid();
var subscription = new ReporterSubscription(id, callback, this);
this.subscriptions.push(subscription);
return subscription;
}
Reporter.prototype.subscribeMany = function(funcs)
{
for (var i = 0; i < funcs.length; ++i)
{
var func = funcs[i];
this.subscribe(func);
}
}
var Уведомитель = Reporter;
Reporter.prototype.уведомить = function()
{
this.report();
};
Reporter.prototype.подписать = function(функция)
{
this.subscribe(функция);
};
Reporter.prototype.подписатьМного = function(funcs)
{
this.subscribeMany(funcs);
};
/*
*
* Пуск / Start
*
*/
муром.пуск = new Уведомитель();
// Can also be accessed as 'murom.run'.
Object.defineProperty(murom, "run", {
get: function()
{
return муром.пуск;
}
});
murom.start = function()
{
муром.пуск.уведомить();
};
@@ -0,0 +1,122 @@
/*
* NOTE Only ASCII is allowed in this loading module
* NOTE because it's deciphered with btoa() call,
* NOTE which can't handle Unicode.
* NOTE However, murom.atob/btoa functions (defined here)
* NOTE work fine with Unicode, so you are free
* NOTE to use Unicode in other modules
*/
murom.installLocalForage = function()
{
/*
localForage -- Offline Storage, Improved
Version 1.7.3
https://localforage.github.io/localForage
(c) 2013-2017 Mozilla, Apache License 2.0
*/
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.localforage=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){(function(a){"use strict";function c(){k=!0;for(var a,b,c=l.length;c;){for(b=l,l=[],a=-1;++a<c;)b[a]();c=l.length}k=!1}function d(a){1!==l.push(a)||k||e()}var e,f=a.MutationObserver||a.WebKitMutationObserver;if(f){var g=0,h=new f(c),i=a.document.createTextNode("");h.observe(i,{characterData:!0}),e=function(){i.data=g=++g%2}}else if(a.setImmediate||void 0===a.MessageChannel)e="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var b=a.document.createElement("script");b.onreadystatechange=function(){c(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},a.document.documentElement.appendChild(b)}:function(){setTimeout(c,0)};else{var j=new a.MessageChannel;j.port1.onmessage=c,e=function(){j.port2.postMessage(0)}}var k,l=[];b.exports=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(a,b,c){"use strict";function d(){}function e(a){if("function"!=typeof a)throw new TypeError("resolver must be a function");this.state=s,this.queue=[],this.outcome=void 0,a!==d&&i(this,a)}function f(a,b,c){this.promise=a,"function"==typeof b&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),"function"==typeof c&&(this.onRejected=c,this.callRejected=this.otherCallRejected)}function g(a,b,c){o(function(){var d;try{d=b(c)}catch(b){return p.reject(a,b)}d===a?p.reject(a,new TypeError("Cannot resolve promise with itself")):p.resolve(a,d)})}function h(a){var b=a&&a.then;if(a&&("object"==typeof a||"function"==typeof a)&&"function"==typeof b)return function(){b.apply(a,arguments)}}function i(a,b){function c(b){f||(f=!0,p.reject(a,b))}function d(b){f||(f=!0,p.resolve(a,b))}function e(){b(d,c)}var f=!1,g=j(e);"error"===g.status&&c(g.value)}function j(a,b){var c={};try{c.value=a(b),c.status="success"}catch(a){c.status="error",c.value=a}return c}function k(a){return a instanceof this?a:p.resolve(new this(d),a)}function l(a){var b=new this(d);return p.reject(b,a)}function m(a){function b(a,b){function d(a){g[b]=a,++h!==e||f||(f=!0,p.resolve(j,g))}c.resolve(a).then(d,function(a){f||(f=!0,p.reject(j,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=new Array(e),h=0,i=-1,j=new this(d);++i<e;)b(a[i],i);return j}function n(a){function b(a){c.resolve(a).then(function(a){f||(f=!0,p.resolve(h,a))},function(a){f||(f=!0,p.reject(h,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=-1,h=new this(d);++g<e;)b(a[g]);return h}var o=a(1),p={},q=["REJECTED"],r=["FULFILLED"],s=["PENDING"];b.exports=e,e.prototype.catch=function(a){return this.then(null,a)},e.prototype.then=function(a,b){if("function"!=typeof a&&this.state===r||"function"!=typeof b&&this.state===q)return this;var c=new this.constructor(d);if(this.state!==s){g(c,this.state===r?a:b,this.outcome)}else this.queue.push(new f(c,a,b));return c},f.prototype.callFulfilled=function(a){p.resolve(this.promise,a)},f.prototype.otherCallFulfilled=function(a){g(this.promise,this.onFulfilled,a)},f.prototype.callRejected=function(a){p.reject(this.promise,a)},f.prototype.otherCallRejected=function(a){g(this.promise,this.onRejected,a)},p.resolve=function(a,b){var c=j(h,b);if("error"===c.status)return p.reject(a,c.value);var d=c.value;if(d)i(a,d);else{a.state=r,a.outcome=b;for(var e=-1,f=a.queue.length;++e<f;)a.queue[e].callFulfilled(b)}return a},p.reject=function(a,b){a.state=q,a.outcome=b;for(var c=-1,d=a.queue.length;++c<d;)a.queue[c].callRejected(b);return a},e.resolve=k,e.reject=l,e.all=m,e.race=n},{1:1}],3:[function(a,b,c){(function(b){"use strict";"function"!=typeof b.Promise&&(b.Promise=a(2))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;iLine truncated
};
murom.installUnicodeBase64 = function()
{
/*
https://github.com/solderjs/TextEncoderLite
Apache 2.0
*/
function TextEncoderLite(){}function TextDecoderLite(){}(function(){"use strict";function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];var i=0;for(;i<length;i++){codePoint=string.charCodeAt(i);if(codePoint>55295&&codePoint<57344){if(leadSurrogate){if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}else{codePoint=leadSurrogate-55296<<10|codePoint-56320|65536;leadSurrogate=null}}else{if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}else{leadSurrogate=codePoint;continue}}}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=null}if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<2097152){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function utf8Slice(buf,start,end){var res="";var tmp="";end=Math.min(buf.length,end||Infinity);start=start||0;for(var i=start;i<end;i++){if(buf[i]<=127){res+=decodeUtf8Char(tmp)+String.fromCharCode(buf[i]);tmp=""}else{tmp+="%"+buf[i].toString(16)}}return res+decodeUtf8Char(tmp)}function decodeUtf8Char(str){try{return decodeURIComponent(str)}catch(err){return String.fromCharCode(65533)}}TextEncoderLite.prototype.encode=function(str){var result;if("undefined"===typeof Uint8Array){result=utf8ToBytes(str)}else{result=new Uint8Array(utf8ToBytes(str))}return result};TextDecoderLite.prototype.decode=function(bytes){return utf8Slice(bytes,0,bytes.length)}})();if(typeof module==="object"&&module){module.exports.TextDecoderLite=TextDecoderLite;module.exports.TextEncoderLite=TextEncoderLite}
/*
https://github.com/beatgammit/base64-js
MIT
*/
(function(r){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=r()}else if(typeof define==="function"&&define.amd){define([],r)}else{var e;if(typeof window!=="undefined"){e=window}else if(typeof global!=="undefined"){e=global}else if(typeof self!=="undefined"){e=self}else{e=this}e.base64js=r()}})(function(){var r,e,n;return function(){function r(e,n,t){function o(f,i){if(!n[f]){if(!e[f]){var u="function"==typeof require&&require;if(!i&&u)return u(f,!0);if(a)return a(f,!0);var v=new Error("Cannot find module '"+f+"'");throw v.code="MODULE_NOT_FOUND",v}var d=n[f]={exports:{}};e[f][0].call(d.exports,function(r){var n=e[f][1][r];return o(n||r)},d,d.exports,r,e,n,t)}return n[f].exports}for(var a="function"==typeof require&&require,f=0;f<t.length;f++)o(t[f]);return o}return r}()({"/":[function(r,e,n){"use strict";n.byteLength=d;n.toByteArray=h;n.fromByteArray=p;var t=[];var o=[];var a=typeof Uint8Array!=="undefined"?Uint8Array:Array;var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,u=f.length;i<u;++i){t[i]=f[i];o[f.charCodeAt(i)]=i}o["-".charCodeAt(0)]=62;o["_".charCodeAt(0)]=63;function v(r){var e=r.length;if(e%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}var n=r.indexOf("=");if(n===-1)n=e;var t=n===e?0:4-n%4;return[n,t]}function d(r){var e=v(r);var n=e[0];var t=e[1];return(n+t)*3/4-t}function c(r,e,n){return(e+n)*3/4-n}function h(r){var e;var n=v(r);var t=n[0];var f=n[1];var i=new a(c(r,t,f));var u=0;var d=f>0?t-4:t;for(var h=0;h<d;h+=4){e=o[r.charCodeAt(h)]<<18|o[r.charCodeAt(h+1)]<<12|o[r.charCodeAt(h+2)]<<6|o[r.charCodeAt(h+3)];i[u++]=e>>16&255;i[u++]=e>>8&255;i[u++]=e&255}if(f===2){e=o[r.charCodeAt(h)]<<2|o[r.charCodeAt(h+1)]>>4;i[u++]=e&255}if(f===1){e=o[r.charCodeAt(h)]<<10|o[r.charCodeAt(h+1)]<<4|o[r.charCodeAt(h+2)]>>2;i[u++]=e>>8&255;i[u++]=e&255}return i}function s(r){return t[r>>18&63]+t[r>>12&63]+t[r>>6&63]+t[r&63]}function l(r,e,n){var t;var o=[];for(var a=e;a<n;a+=3){t=(r[a]<<16&16711680)+(r[a+1]<<8&65280)+(r[a+2]&255);o.push(s(t))}return o.join("")}function p(r){var e;var n=r.length;var o=n%3;var a=[];var f=16383;for(var i=0,u=n-o;i<u;i+=f){a.push(l(r,i,i+f>u?u:i+f))}if(o===1){e=r[n-1];a.push(t[e>>2]+t[e<<4&63]+"==")}else if(o===2){e=(r[n-2]<<8)+r[n-1];a.push(t[e>>10]+t[e>>4&63]+t[e<<2&63]+"=")}return a.join("")}},{}]},{},[])("/")});
/*
https://developer.mozilla.org/ru/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
*/
murom.btoa = function(str)
{
var bytes = new (TextEncoder || TextEncoderLite)("utf-8").encode(str);
return base64js.fromByteArray(bytes);
};
murom.atob = function(str)
{
var bytes = base64js.toByteArray(str);
return new (TextDecoder || TextDecoderLite)("utf-8").decode(bytes);
};
};
murom.moduleProperties = function(id)
{
var m = murom.modules[id];
return (typeof m[2] != "undefined") ? m[2] : {};
};
murom.moduleStatus = function(id)
{
var prop = murom.moduleProperties(id);
if ("status" in prop)
{
return prop["status"];
}
// Status == true if explicit record is absent.
return true;
};
murom.start = function()
{
console.debug("Override murom.start() function to be notified when all modules were loaded");
}
murom.loadModules = function()
{
// Skip `0` module because it's us.
for (var i = 1; i < murom.modules.length; ++i)
{
var module = murom.modules[i];
var name = module[0];
var code = murom.atob(module[1]);
if (murom.moduleStatus(i) == false)
{
console.warn("Skip loading '" + name + "' module because it's turned off");
}
else
{
try
{
eval(code);
}
catch (e)
{
console.error("Could not load '" + name + "' module: '" + e + "'");
}
}
}
murom.start();
};
murom.loadIndexedDBModules = function(completionHandler)
{
// See if IndexedDB has modules.
// IndexedDB modules override those coming from HTML.
localforage.config({ name: "murom" });
localforage.getItem("modules", function(error, modules) {
if (modules)
{
murom.modules = modules;
console.debug("Modules have been loaded from IndexedDB");
}
if (error)
{
console.error("Could not get modules from IndexedDB: '" + error + "'");
}
// Continue.
completionHandler();
});
};
murom.installLocalForage();
murom.installUnicodeBase64();
// IndexedDB modules override HTML ones.
murom.loadIndexedDBModules(murom.loadModules);
+18
View File
@@ -0,0 +1,18 @@
муром.создатьЛевуюПравуюОбласти = function()
{
// Левая область.
var ло = document.createElement("div");
ло.id="левая-область";
ло.style.cssText =
"position: fixed; left: 0; top: 0; bottom: 0; width: 50%;";
document.body.appendChild(ло);
// Правая область.
var по = document.createElement("div");
по.id="правая-область";
по.style.cssText =
"position: fixed; right: 0; top: 0; bottom: 0; width: 50%;";
document.body.appendChild(по);
return [ло, по];
};
+765
View File
@@ -0,0 +1,765 @@
/*
*
* Внешний вид
*
*/
function задатьВнешнийВид()
{
var вид = document.createElement("style");
document.head.appendChild(вид);
вид.innerHTML =
`
.муром-кнопка
{
padding: 0.5em 2em 0.5em 2em;
margin-right: 0.5em;
float: right;
color: #222;
font-family: sans-serif;
border: 1px solid #ddd;
background-color: transparent;
cursor: pointer;
text-transform: uppercase;
-webkit-transition-duration: 0.2s; /* Safari */
transition-duration: 0.2s;
}
.муром-кнопка:hover
{
border: 1px solid #222;
}
.муром-отступ-по-сторонам
{
margin-left: 0.5em;
margin-right: 0.5em;
}
`;
}
/*
*
* Список модулей
*
*/
function СписокМодулей()
{
var я = this;
this.создатьИнтерфейс();
this.задатьВид();
this.выбрали = new Уведомитель();
this.выбрали.подписать(function(){
я.отобразитьВыбор();
});
}
СписокМодулей.prototype.создатьИнтерфейс = function()
{
// Помещаем таблицу в div для реализации промотки.
this.иф = document.createElement("div");
this.таблица = document.createElement("table");
this.иф.appendChild(this.таблица);
};
СписокМодулей.prototype.задатьВид = function()
{
this.иф.style.cssText =
`
overflow: auto;
height: 18.5em;
border: 1px solid #ddd;
/*
padding: 0.5em;
margin: 0.5em;
*/
`;
this.таблица.style.cssText =
`
color: #666666;
font-family: sans-serif;
cursor: default;
border-collapse: collapse;
`;
};
СписокМодулей.prototype.очистить = function()
{
while (this.таблица.rows.length)
{
this.таблица.deleteRow(0);
};
};
СписокМодулей.prototype.добавитьЭлемент = function(статус, имя)
{
var статусHTML = "";
if (статус)
{
статусHTML = "checked";
}
var ряд = this.таблица.insertRow();
var ячейка = 0;
var номер = ряд.insertCell(ячейка++);
номер.innerHTML = this.таблица.rows.length - 1;
номер.style.cssText = "padding: 0.5em;";
var вкл = ряд.insertCell(ячейка++);
вкл.innerHTML = `<input type="checkbox" disabled ` + статусHTML + `></input>`;
var название = ряд.insertCell(ячейка++);
название.innerHTML = имя;
название.style.cssText = "padding: 0.5em; width: 100%;";
};
СписокМодулей.prototype.отобразитьСписок = function(список)
{
this.очистить();
for (var номер in список)
{
var элемент = список[номер];
var статус = элемент[0];
var имя = элемент[1];
this.добавитьЭлемент(статус, имя);
}
};
СписокМодулей.prototype.улавливатьВыборЭлемента = function(номер)
{
var я = this;
var ряд = this.таблица.rows[номер]
ряд.onclick = function()
{
я.выборРанее = я.выбор;
я.выбор = номер;
я.выбрали.уведомить();
};
};
СписокМодулей.prototype.улавливатьВыбор = function()
{
this.выборРанее = null;
this.выбор = null;
for (var номер = 0; номер < this.таблица.rows.length; ++номер)
{
this.улавливатьВыборЭлемента(номер);
}
};
СписокМодулей.prototype.отобразитьВыбор = function()
{
if (this.выборРанее != null)
{
var ряд = this.таблица.rows[this.выборРанее];
ряд.style.backgroundColor = null;
}
var ряд = this.таблица.rows[this.выбор];
ряд.style.backgroundColor = "#eee";
};
СписокМодулей.prototype.задатьСписок = function(список)
{
this.отобразитьСписок(список);
this.улавливатьВыбор();
};
СписокМодулей.prototype.выбрать = function(номер)
{
var ряд = this.таблица.rows[номер];
ряд.scrollIntoView();
ряд.onclick();
};
СписокМодулей.prototype.обновитьЭлемент = function(номер, статус, имя)
{
var ряд = this.таблица.rows[номер];
ряд.cells[1].childNodes[0].checked = статус;
ряд.cells[2].innerHTML = имя;
};
СписокМодулей.prototype.удалитьЭлемент = function(номер)
{
var ряд = this.таблица.rows[номер];
ряд.parentNode.removeChild(ряд);
}
/*
*
* Тест списка модулей
*
*/
function ТестСпискаМодулей()
{
this.создатьИнтерфейс();
}
ТестСпискаМодулей.prototype.создатьИнтерфейс = function()
{
var я = this;
this.иф = document.createElement("div");
this.список = new СписокМодулей();
this.иф.appendChild(this.список.иф);
var модули = [
[true, "муром.загрузка_1.0.0"],
[true, "муром.uuid_1.0.0"],
[true, "Уведомитель_1.0.0"],
[false, "uikit_3.2.0.css"],
[false, "uikit_3.2.0.js"],
[false, "ПанельУправления.UIKit"],
[false, "ПанельУправления_1.0.0"],
];
this.список.задатьСписок(модули);
this.список.выбрать(0);
this.создатьКнопку("Выбрать последний", function(){
console.log("выбрать");
я.список.выбрать(модули.length - 1);
});
this.создатьКнопку("Обновить последний", function(){
я.список.обновитьЭлемент(модули.length - 1, true, "Новое имя");
});
this.создатьКнопку("Удалить последний", function(){
я.список.удалитьЭлемент(модули.length - 1);
});
this.создатьКнопку("Добавить", function(){
я.список.добавитьЭлемент(true, "Новый-599");
var номер = я.список.таблица.rows.length - 1;
я.список.улавливатьВыборЭлемента(номер);
я.список.выбрать(номер);
});
};
ТестСпискаМодулей.prototype.создатьКнопку = function(имя, реакция)
{
var кнопка = document.createElement("button");
кнопка.innerHTML = имя;
this.иф.appendChild(кнопка);
кнопка.onclick = реакция;
};
/*
*
* Свойства модуля
*
*/
function СвойстваМодуля()
{
this.создатьИнтерфейс();
this.изменилиНомер = new Уведомитель();
this.настроитьНомер();
this.изменилиИмя = new Уведомитель();
this.настроитьИмя();
this.изменилиСтатус = new Уведомитель();
this.настроитьСтатус();
this.удалить = new Уведомитель();
this.настроитьУдаление();
}
СвойстваМодуля.prototype.создатьИнтерфейс = function()
{
this.иф = document.createElement("div");
this.иф.style.cssText =
`
border: 1px solid #ddd;
/*
padding: 0.5em;
margin: 0.5em;
*/
color: #666666;
font-family: sans-serif;
`;
this.таблица = document.createElement("table");
this.иф.appendChild(this.таблица);
};
Object.defineProperty(СвойстваМодуля.prototype, "номер", {
get: function()
{
return Number(this.полеНомер.value);
},
set: function(значение)
{
this.полеНомер.value = значение;
}
});
СвойстваМодуля.prototype.настроитьНомер = function()
{
var я = this;
var ряд = this.таблица.insertRow();
var ячейка = 0;
var ключ = ряд.insertCell(ячейка++);
ключ.innerHTML = "Номер:";
ключ.style.cssText = "padding: 0.5em;";
var значение = ряд.insertCell(ячейка++);
this.полеНомер = document.createElement("input");
this.полеНомер.type = "number";
this.полеНомер.min = 0;
значение.style.cssText = "width: 100%; padding: 0.5em;";
this.полеНомер.style.cssText = "width: 100%;";
значение.appendChild(this.полеНомер);
this.полеНомер.oninput = function()
{
я.изменилиНомер.уведомить();
};
};
Object.defineProperty(СвойстваМодуля.prototype, "имя", {
get: function()
{
return this.полеИмя.value;
},
set: function(значение)
{
this.полеИмя.value = значение;
}
});
СвойстваМодуля.prototype.настроитьИмя = function()
{
var я = this;
var ряд = this.таблица.insertRow();
var ячейка = 0;
var ключ = ряд.insertCell(ячейка++);
ключ.innerHTML = "Имя:";
ключ.style.cssText = "padding: 0.5em;";
var значение = ряд.insertCell(ячейка++);
this.полеИмя = document.createElement("input");
значение.style.cssText = "width: 100%; padding: 0.5em;";
this.полеИмя.style.cssText = "width: 100%;";
значение.appendChild(this.полеИмя);
this.полеИмя.oninput = function()
{
я.изменилиИмя.уведомить();
};
};
Object.defineProperty(СвойстваМодуля.prototype, "статус", {
get: function()
{
return this.переключатель.checked;
},
set: function(значение)
{
this.переключатель.checked = значение;
}
});
СвойстваМодуля.prototype.настроитьСтатус = function()
{
var я = this;
var ряд = this.таблица.insertRow();
var ячейка = 0;
var ключ = ряд.insertCell(ячейка++);
ключ.innerHTML = "Исполнять:";
ключ.style.cssText = "padding: 0.5em;";
var значение = ряд.insertCell(ячейка++);
this.переключатель = document.createElement("input");
this.переключатель.type = "checkbox";
this.переключатель.style.cssText = "padding: 0.5em;";
значение.appendChild(this.переключатель);
this.переключатель.onchange = function()
{
я.изменилиСтатус.уведомить();
};
ключ.onclick = function()
{
я.переключатель.checked = !я.переключатель.checked;
я.изменилиСтатус.уведомить();
};
};
СвойстваМодуля.prototype.настроитьУдаление = function()
{
var я = this;
var ряд = this.таблица.insertRow();
var ячейка = 0;
ряд.insertCell(ячейка++);
var значение = ряд.insertCell(ячейка++);
this.кнопкаУдалить = document.createElement("button");
this.кнопкаУдалить.innerHTML = "Удалить";
this.кнопкаУдалить.classList.add("муром-кнопка");
значение.appendChild(this.кнопкаУдалить);
this.кнопкаУдалить.onclick = function()
{
я.удалить.уведомить();
};
};
/*
*
* Тест свойства модуля
*
*/
function ТестСвойстваМодуля()
{
this.создатьИнтерфейс();
}
ТестСвойстваМодуля.prototype.создатьИнтерфейс = function()
{
var я = this;
this.иф = document.createElement("div");
this.свойства = new СвойстваМодуля();
this.иф.appendChild(this.свойства.иф);
this.свойства.изменилиНомер.подписать(function(){
console.log("номер: '" + я.свойства.номер + "'");
});
this.свойства.изменилиИмя.подписать(function(){
console.log("имя: '" + я.свойства.имя + "'");
});
this.свойства.изменилиСтатус.подписать(function(){
console.log("статус: '" + я.свойства.статус + "'");
});
this.свойства.удалить.подписать(function(){
console.log("удалить модуль '" + я.свойства.имя + "'");
});
};
/*
*
* Модули
*
*/
function Модули()
{
}
Модули.prototype.свойства = function(номер)
{
return murom.moduleProperties(номер);
};
Модули.prototype.задатьСвойства = function(номер, свойства)
{
var м = муром.модули[номер];
м[2] = свойства;
};
Модули.prototype.статус = function(номер)
{
return murom.moduleStatus(номер);
};
Модули.prototype.задатьСтатус = function(номер, статус)
{
var св = this.свойства(номер);
св["status"] = статус;
this.задатьСвойства(номер, св);
};
Модули.prototype.задатьИмя = function(номер, имя)
{
var м = муром.модули[номер];
м[0] = имя;
};
Модули.prototype.задатьНомер = function(старый, новый)
{
//console.log("задать номер. '" + старый + "' -> '" + новый + "'");
var модуль = муром.модули[старый];
// Удаляем старую запись.
муром.модули.splice(старый, 1);
// Добавляем модуль в новую позицию.
муром.модули.splice(новый, 0, модуль);
};
/*
*
* Панель управления
*
*/
function ПанельУправления()
{
this.модули = new Модули();
this.создатьОснову();
this.создатьСохранениеСкачиваниеДобавление();
this.создатьСписокМодулей();
this.создатьСвойстваМодуля();
}
ПанельУправления.prototype.создатьОбёрткуЯчейку = function()
{
var обёртка = document.createElement("table");
обёртка.style.cssText = "width: 100%;";
var ряд = обёртка.insertRow();
var ячейка = ряд.insertCell();
return [обёртка, ячейка];
};
ПанельУправления.prototype.создатьОснову = function()
{
this.иф = document.createElement("table");
this.иф.style.cssText = "width: 100%;";
var ряд = this.иф.insertRow();
this.лево = ряд.insertCell();
this.лево.style.cssText = "width: 100%;";
var право = ряд.insertCell();
право.style.cssText = "height: 100%;";
this.кнопки = document.createElement("table");
this.кнопки.style.cssText = "height: 100%;";
право.appendChild(this.кнопки);
ряд = this.иф.insertRow();
this.низ = ряд.insertCell();
this.низ.colSpan = 2;
};
ПанельУправления.prototype.создатьСписокМодулей = function()
{
this.список = new СписокМодулей();
this.список.задатьСписок(this.списокМодулей());
var оя = this.создатьОбёрткуЯчейку();
this.лево.appendChild(оя[0]);
оя[1].appendChild(this.список.иф);
};
ПанельУправления.prototype.создатьСвойстваМодуля = function()
{
this.свойства = new СвойстваМодуля();
оя = this.создатьОбёрткуЯчейку();
this.низ.appendChild(оя[0]);
оя[1].appendChild(this.свойства.иф);
};
ПанельУправления.prototype.списокМодулей = function()
{
var список = [];
for (var номер in муром.модули)
{
var м = муром.модули[номер];
var статус = this.модули.статус(номер);
var имя = м[0];
var элемент = [статус, имя];
список.push(элемент);
}
return список;
};
ПанельУправления.prototype.создатьКнопку = function(имя, уведомитель)
{
var кнопка = document.createElement("button");
кнопка.innerHTML = имя;
кнопка.style.cssText = "width: 100%;";
кнопка.classList.add("муром-кнопка");
кнопка.onclick = function()
{
уведомитель.уведомить();
};
return кнопка;
};
ПанельУправления.prototype.создатьСохранениеСкачиваниеДобавление = function()
{
var я = this;
var ряд = this.кнопки.insertRow();
var ячейка = ряд.insertCell();
this.сохранить = new Уведомитель();
this.кнопкаСохранить = this.создатьКнопку("Сохранить", this.сохранить);
ячейка.appendChild(this.кнопкаСохранить);
ряд = this.кнопки.insertRow();
ячейка = ряд.insertCell();
this.скачать = new Уведомитель();
this.кнопкаСкачать = this.создатьКнопку("Скачать", this.скачать);
ячейка.appendChild(this.кнопкаСкачать);
// Пробел.
ряд = this.кнопки.insertRow();
ячейка = ряд.insertCell();
ячейка.style.cssText = "height: 100%;";
ряд = this.кнопки.insertRow();
ячейка = ряд.insertCell();
this.добавить = new Уведомитель();
this.кнопкаДобавить = this.создатьКнопку("Добавить", this.добавить);
ячейка.appendChild(this.кнопкаДобавить);
};
ПанельУправления.prototype.имяФайла = function()
{
var путь = window.location.pathname;
var имя = путь.split("/").pop();
return decodeURI(имя);
};
function запуститьПУ()
{
var пу = new ПанельУправления();
муром.пу = пу;
var области = муром.создатьЛевуюПравуюОбласти();
var по = области[1];
по.appendChild(пу.иф);
муром.создатьРедакторВЛевойОбласти();
var список = пу.список;
var свойства = пу.свойства;
var модули = пу.модули;
function отобразитьКодВыбранногоМодуля()
{
var модуль = муром.модули[список.выбор];
var код = муром.atob(модуль[1]);
муром.редактор.session.setValue(код);
}
function отобразитьСвойстваВыбранногоМодуля()
{
var модуль = муром.модули[список.выбор];
свойства.номер = список.выбор;
свойства.имя = модуль[0];
свойства.статус = пу.модули.статус(список.выбор);
}
список.выбрали.подписатьМного([
отобразитьКодВыбранногоМодуля,
отобразитьСвойстваВыбранногоМодуля,
]);
function обновитьСтатусМодуля()
{
var номер = список.выбор;
var имя = свойства.имя;
var статус = свойства.статус;
модули.задатьСтатус(номер, статус);
список.обновитьЭлемент(номер, статус, имя);
}
свойства.изменилиСтатус.подписать(обновитьСтатусМодуля);
function обновитьИмяМодуля()
{
var номер = список.выбор;
var имя = свойства.имя;
var статус = свойства.статус;
модули.задатьИмя(номер, имя);
список.обновитьЭлемент(номер, статус, имя);
}
свойства.изменилиИмя.подписать(обновитьИмяМодуля);
function обновитьНомерМодуля()
{
var старый = список.выбор;
var новый = свойства.номер;
if (старый == новый)
{
return;
}
if (новый > муром.модули.length - 1)
{
новый = муром.модули.length - 1;
}
модули.задатьНомер(старый, новый);
список.задатьСписок(пу.списокМодулей());
список.выбрать(новый);
}
свойства.изменилиНомер.подписать(обновитьНомерМодуля);
function добавитьМодуль()
{
var число = Math.floor(Math.random() * Math.floor(1000));
var имя = "новый-" + число;
var код = `console.log("НАДО Добавить код в модуль '` + имя + `'");`;
var модуль = [имя, муром.btoa(код)];
муром.модули.push(модуль);
var модули = пу.списокМодулей();
список.задатьСписок(модули);
список.выбрать(модули.length - 1);
}
пу.добавить.подписать(добавитьМодуль);
function удалитьМодуль()
{
var номер = список.выбор;
var статус = пу.модули.статус(номер);
if (статус)
{
alert("ОШИБКА Удалить можно лишь неисполняемый модуль");
return;
}
// Удалить выбранный модуль.
муром.модули.splice(номер, 1);
--номер;
if (номер < 0)
{
номер = 0;
}
var модули = пу.списокМодулей();
список.задатьСписок(модули);
список.выбрать(номер);
}
свойства.удалить.подписать(удалитьМодуль);
function сохранитьВыбранныйМодуль()
{
var модуль = муром.модули[список.выбор];
var код = муром.редактор.session.getValue();
модуль[1] = муром.btoa(код);
}
function сохранить()
{
пу.кнопкаСохранить.disabled = true;
localforage.setItem("modules", муром.модули, function(ошибка, значение){
пу.кнопкаСохранить.disabled = false;
if (ошибка)
{
console.error("Не удалось сохранить модули: '" + ошибка + "'");
}
});
}
пу.сохранить.подписатьМного([
сохранитьВыбранныйМодуль,
сохранить,
]);
// How to create a file in memory for user to download, but not through server?
// https://stackoverflow.com/a/18197341
function скачать()
{
var содержимое = муром.файл.начало;
for (var номер in муром.модули)
{
var модуль = муром.модули[номер];
var имя = модуль[0];
var код64 = модуль[1];
var свойства = модули.свойства(номер);
содержимое +=
`
[
"` + имя + `",
"` + код64 + `",
`
+
JSON.stringify(свойства)
+
`
],
`
;
}
содержимое += муром.файл.конец;
содержимое = муром.btoa(содержимое);
var ссыль = document.createElement("a");
ссыль.setAttribute("href", "data:text/html;charset=utf-8;base64," + содержимое);
var имя = пу.имяФайла();
ссыль.setAttribute("download", имя);
ссыль.style.display = "none";
document.body.appendChild(ссыль);
ссыль.click();
document.body.removeChild(ссыль);
}
пу.скачать.подписать(скачать);
// При запуске.
список.выбрать(0);
}
/*
*
* Пуск
*
*/
if (window.location.search == "?0")
{
console.debug("Запуск панели управления");
задатьВнешнийВид();
запуститьПУ();
console.debug("Панель управления запущена")
}
@@ -0,0 +1,48 @@
муром.загрузитьACE = function()
{
// Редактор кода ACE.
// https://github.com/ajaxorg/ace-builds/blob/master/src-min-noconflict/ace.js
(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE = "ace",e=function(){return this}();!e&&typeof window!="undefined"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t=="string"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)==="[object Array]"){var o=[];for(var u=0,a=t.length;u<a;++u){var f=s(e,t[u]);if(f==undefined&&r.original)return;o.push(f)}return n&&n.apply(null,o)||!0}},r=function(e,t){var i=n("",e,t);return i==undefined&&r.original?r.original.apply(this,arguments):i},i=function(e,t){if(t.indexOf("!")!==-1){var n=t.split("!");return i(e,n[0])+"!"+i(e,n[1])}if(t.charAt(0)=="."){var r=e.split("/").slice(0,-1).join("/");t=r+"/"+t;while(t.indexOf(".")!==-1&&s!=t){var s=t;t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return t},s=function(e,r){r=i(e,r);var s=t.modules[r];if(!s){s=t.payloads[r];if(typeof s=="function"){var o={},u={id:r,uri:"",exports:o,packaged:!0},a=function(e,t){return n(r,e,t)},f=s(a,o,u);o=f||u.exports,t.modules[r]=o,delete t.payloads[r]}s=t.modules[r]=o||s}return s};o(ACE_NAMESPACE)})(),ace.define("ace/lib/regexp",["require","exports","module"],function(e,t,n){"use strict";function o(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,"")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,""),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e=="string"&&t){!i&&t.length>1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(thisLine truncated
ace.require(["ace/ace"], function(a) {
if (a) {
a.config.init(true);
a.define = ace.define;
}
if (!window.ace)
window.ace = a;
for (var key in a) if (a.hasOwnProperty(key))
window.ace[key] = a[key];
window.ace["default"] = window.ace;
if (typeof module == "object" && typeof exports == "object" && module) {
module.exports = window.ace;
}
});
})();
};
муром.загрузитьРежимACEJS = function()
{
// Режим JavaScript для ACE.
// https://github.com/ajaxorg/ace-builds/blob/master/src-min-noconflict/mode-javascript.js
ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"</?"+e+"",next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(t);var n={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[n,t,{include:"reference"},{defaultToken:"string"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"functionLine truncated
ace.require(["ace/mode/javascript"], function(m) {
if (typeof module == "object" && typeof exports == "object" && module) {
module.exports = m;
}
});
})();
};
муром.создатьРедакторВЛевойОбласти = function()
{
муром.загрузитьACE();
муром.загрузитьРежимACEJS();
var редактор = document.createElement("div");
редактор.id = "редактор";
редактор.style.cssText = "height: 100%;";
var область = document.getElementById("левая-область");
область.appendChild(редактор);
муром.редактор = window.ace.edit("редактор");
муром.редактор.session.setMode("ace/mode/javascript");
};
+36
View File
@@ -0,0 +1,36 @@
муром.файл = {};
муром.файл.начало =
`
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<body>
<script>
var муром = {};
var murom = муром;
муром.модули = [
`;
муром.файл.конец =
`
];
Object.defineProperty(murom, "modules", {
get: function()
{
return муром.модули;
},
set: function(значения)
{
муром.модули = значения;
}
});
var загрузочныйМодуль = муром.модули[0];
var код = atob(загрузочныйМодуль[1]);
eval(код);
</script>
</body>
</html>
`;
+30 -225
View File
@@ -1,267 +1,72 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
</style>
</head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<body>
<script>
/*
localForage -- Offline Storage, Improved
Version 1.7.3
https://localforage.github.io/localForage
(c) 2013-2017 Mozilla, Apache License 2.0
*/
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.localforage=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){(function(a){"use strict";function c(){k=!0;for(var a,b,c=l.length;c;){for(b=l,l=[],a=-1;++a<c;)b[a]();c=l.length}k=!1}function d(a){1!==l.push(a)||k||e()}var e,f=a.MutationObserver||a.WebKitMutationObserver;if(f){var g=0,h=new f(c),i=a.document.createTextNode("");h.observe(i,{characterData:!0}),e=function(){i.data=g=++g%2}}else if(a.setImmediate||void 0===a.MessageChannel)e="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var b=a.document.createElement("script");b.onreadystatechange=function(){c(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},a.document.documentElement.appendChild(b)}:function(){setTimeout(c,0)};else{var j=new a.MessageChannel;j.port1.onmessage=c,e=function(){j.port2.postMessage(0)}}var k,l=[];b.exports=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(a,b,c){"use strict";function d(){}function e(a){if("function"!=typeof a)throw new TypeError("resolver must be a function");this.state=s,this.queue=[],this.outcome=void 0,a!==d&&i(this,a)}function f(a,b,c){this.promise=a,"function"==typeof b&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),"function"==typeof c&&(this.onRejected=c,this.callRejected=this.otherCallRejected)}function g(a,b,c){o(function(){var d;try{d=b(c)}catch(b){return p.reject(a,b)}d===a?p.reject(a,new TypeError("Cannot resolve promise with itself")):p.resolve(a,d)})}function h(a){var b=a&&a.then;if(a&&("object"==typeof a||"function"==typeof a)&&"function"==typeof b)return function(){b.apply(a,arguments)}}function i(a,b){function c(b){f||(f=!0,p.reject(a,b))}function d(b){f||(f=!0,p.resolve(a,b))}function e(){b(d,c)}var f=!1,g=j(e);"error"===g.status&&c(g.value)}function j(a,b){var c={};try{c.value=a(b),c.status="success"}catch(a){c.status="error",c.value=a}return c}function k(a){return a instanceof this?a:p.resolve(new this(d),a)}function l(a){var b=new this(d);return p.reject(b,a)}function m(a){function b(a,b){function d(a){g[b]=a,++h!==e||f||(f=!0,p.resolve(j,g))}c.resolve(a).then(d,function(a){f||(f=!0,p.reject(j,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=new Array(e),h=0,i=-1,j=new this(d);++i<e;)b(a[i],i);return j}function n(a){function b(a){c.resolve(a).then(function(a){f||(f=!0,p.resolve(h,a))},function(a){f||(f=!0,p.reject(h,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=-1,h=new this(d);++g<e;)b(a[g]);return h}var o=a(1),p={},q=["REJECTED"],r=["FULFILLED"],s=["PENDING"];b.exports=e,e.prototype.catch=function(a){return this.then(null,a)},e.prototype.then=function(a,b){if("function"!=typeof a&&this.state===r||"function"!=typeof b&&this.state===q)return this;var c=new this.constructor(d);if(this.state!==s){g(c,this.state===r?a:b,this.outcome)}else this.queue.push(new f(c,a,b));return c},f.prototype.callFulfilled=function(a){p.resolve(this.promise,a)},f.prototype.otherCallFulfilled=function(a){g(this.promise,this.onFulfilled,a)},f.prototype.callRejected=function(a){p.reject(this.promise,a)},f.prototype.otherCallRejected=function(a){g(this.promise,this.onRejected,a)},p.resolve=function(a,b){var c=j(h,b);if("error"===c.status)return p.reject(a,c.value);var d=c.value;if(d)i(a,d);else{a.state=r,a.outcome=b;for(var e=-1,f=a.queue.length;++e<f;)a.queue[e].callFulfilled(b)}return a},p.reject=function(a,b){a.state=q,a.outcome=b;for(var c=-1,d=a.queue.length;++c<d;)a.queue[c].callRejected(b);return a},e.resolve=k,e.reject=l,e.all=m,e.race=n},{1:1}],3:[function(a,b,c){(function(b){"use strict";"function"!=typeof b.Promise&&(b.Promise=a(2))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;iLine truncated
</script>
<script>
/*
https://github.com/solderjs/TextEncoderLite
Apache 2.0
*/
function TextEncoderLite(){}function TextDecoderLite(){}(function(){"use strict";function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];var i=0;for(;i<length;i++){codePoint=string.charCodeAt(i);if(codePoint>55295&&codePoint<57344){if(leadSurrogate){if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}else{codePoint=leadSurrogate-55296<<10|codePoint-56320|65536;leadSurrogate=null}}else{if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}else{leadSurrogate=codePoint;continue}}}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=null}if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<2097152){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function utf8Slice(buf,start,end){var res="";var tmp="";end=Math.min(buf.length,end||Infinity);start=start||0;for(var i=start;i<end;i++){if(buf[i]<=127){res+=decodeUtf8Char(tmp)+String.fromCharCode(buf[i]);tmp=""}else{tmp+="%"+buf[i].toString(16)}}return res+decodeUtf8Char(tmp)}function decodeUtf8Char(str){try{return decodeURIComponent(str)}catch(err){return String.fromCharCode(65533)}}TextEncoderLite.prototype.encode=function(str){var result;if("undefined"===typeof Uint8Array){result=utf8ToBytes(str)}else{result=new Uint8Array(utf8ToBytes(str))}return result};TextDecoderLite.prototype.decode=function(bytes){return utf8Slice(bytes,0,bytes.length)}})();if(typeof module==="object"&&module){module.exports.TextDecoderLite=TextDecoderLite;module.exports.TextEncoderLite=TextEncoderLite}
</script>
<script>
/*
https://github.com/beatgammit/base64-js
MIT
*/
(function(r){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=r()}else if(typeof define==="function"&&define.amd){define([],r)}else{var e;if(typeof window!=="undefined"){e=window}else if(typeof global!=="undefined"){e=global}else if(typeof self!=="undefined"){e=self}else{e=this}e.base64js=r()}})(function(){var r,e,n;return function(){function r(e,n,t){function o(f,i){if(!n[f]){if(!e[f]){var u="function"==typeof require&&require;if(!i&&u)return u(f,!0);if(a)return a(f,!0);var v=new Error("Cannot find module '"+f+"'");throw v.code="MODULE_NOT_FOUND",v}var d=n[f]={exports:{}};e[f][0].call(d.exports,function(r){var n=e[f][1][r];return o(n||r)},d,d.exports,r,e,n,t)}return n[f].exports}for(var a="function"==typeof require&&require,f=0;f<t.length;f++)o(t[f]);return o}return r}()({"/":[function(r,e,n){"use strict";n.byteLength=d;n.toByteArray=h;n.fromByteArray=p;var t=[];var o=[];var a=typeof Uint8Array!=="undefined"?Uint8Array:Array;var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,u=f.length;i<u;++i){t[i]=f[i];o[f.charCodeAt(i)]=i}o["-".charCodeAt(0)]=62;o["_".charCodeAt(0)]=63;function v(r){var e=r.length;if(e%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}var n=r.indexOf("=");if(n===-1)n=e;var t=n===e?0:4-n%4;return[n,t]}function d(r){var e=v(r);var n=e[0];var t=e[1];return(n+t)*3/4-t}function c(r,e,n){return(e+n)*3/4-n}function h(r){var e;var n=v(r);var t=n[0];var f=n[1];var i=new a(c(r,t,f));var u=0;var d=f>0?t-4:t;for(var h=0;h<d;h+=4){e=o[r.charCodeAt(h)]<<18|o[r.charCodeAt(h+1)]<<12|o[r.charCodeAt(h+2)]<<6|o[r.charCodeAt(h+3)];i[u++]=e>>16&255;i[u++]=e>>8&255;i[u++]=e&255}if(f===2){e=o[r.charCodeAt(h)]<<2|o[r.charCodeAt(h+1)]>>4;i[u++]=e&255}if(f===1){e=o[r.charCodeAt(h)]<<10|o[r.charCodeAt(h+1)]<<4|o[r.charCodeAt(h+2)]>>2;i[u++]=e>>8&255;i[u++]=e&255}return i}function s(r){return t[r>>18&63]+t[r>>12&63]+t[r>>6&63]+t[r&63]}function l(r,e,n){var t;var o=[];for(var a=e;a<n;a+=3){t=(r[a]<<16&16711680)+(r[a+1]<<8&65280)+(r[a+2]&255);o.push(s(t))}return o.join("")}function p(r){var e;var n=r.length;var o=n%3;var a=[];var f=16383;for(var i=0,u=n-o;i<u;i+=f){a.push(l(r,i,i+f>u?u:i+f))}if(o===1){e=r[n-1];a.push(t[e>>2]+t[e<<4&63]+"==")}else if(o===2){e=(r[n-2]<<8)+r[n-1];a.push(t[e>>10]+t[e>>4&63]+t[e<<2&63]+"=")}return a.join("")}},{}]},{},[])("/")});
</script>
<script>
/*
https://developer.mozilla.org/ru/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
*/
function base64Encode(str)
{
var bytes = new (TextEncoder || TextEncoderLite)("utf-8").encode(str);
return base64js.fromByteArray(bytes);
}
function base64Decode(str)
{
var bytes = base64js.toByteArray(str);
return new (TextDecoder || TextDecoderLite)("utf-8").decode(bytes);
}
</script>
<script>
// Create GUID / UUID in JavaScript?
// https://stackoverflow.com/a/2117523
function generateUUID()
{
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
/[xy]/g,
function(c)
{
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
}
);
}
// ReporterSubscription class.
function ReporterSubscription(id, callback, reporter)
{
this.id = id;
this.callback = callback;
this.reporter = reporter;
}
// Reporter class.
function Reporter(name)
{
this.name =
(typeof name !== "undefined") ?
name :
"";
this.subscriptions = [];
}
Reporter.prototype.report = function()
{
for (var id in this.subscriptions)
{
var subscription = this.subscriptions[id];
subscription.callback();
}
}
Reporter.prototype.subscribe = function(callback)
{
var id = generateUUID();
var subscription = new ReporterSubscription(id, callback, this);
this.subscriptions.push(subscription);
return subscription;
}
Reporter.prototype.subscribeMany = function(funcs)
{
for (var i = 0; i < funcs.length; ++i)
{
var func = funcs[i];
this.subscribe(func);
}
}
var Уведомитель = Reporter;
Reporter.prototype.уведомить = function()
{
this.report();
};
Reporter.prototype.подписать = function(функция)
{
this.subscribe(функция);
};
Reporter.prototype.подписатьМного = function(funcs)
{
this.subscribeMany(funcs);
};
</script>
<script>
var муром = {};
муром.старт = new Уведомитель();
var murom = муром;
murom.start = муром.старт;
</script>
<script>
муром.модули = [
[
"муром.файл.начало/конец",
"0LzRg9GA0L7QvC7RhNCw0LnQuyA9IHt9OwrQvNGD0YDQvtC8LtGE0LDQudC7LtC90LDRh9Cw0LvQviA9ICJQQ0ZFVDBOVVdWQkZJR2gwYld3K0NqeG9kRzFzUGdvZ0lDQWdQRzFsZEdFZ1kyaGhjbk5sZEQwaWRYUm1MVGdpUGdvZ0lDQWdQR2hsWVdRK0NpQWdJQ0FnSUNBZ1BITjBlV3hsUGdvZ0lDQWdJQ0FnSUR3dmMzUjViR1UrQ2lBZ0lDQThMMmhsWVdRK0NpQWdJQ0E4WW05a2VUNEtJQ0FnSUNBZ0lDQThjMk55YVhCMFBnb3ZLZ29nSUNBZ2JHOWpZV3hHYjNKaFoyVWdMUzBnVDJabWJHbHVaU0JUZEc5eVlXZGxMQ0JKYlhCeWIzWmxaQW9nSUNBZ1ZtVnljMmx2YmlBeExqY3VNd29nSUNBZ2FIUjBjSE02THk5c2IyTmhiR1p2Y21GblpTNW5hWFJvZFdJdWFXOHZiRzlqWVd4R2IzSmhaMlVLSUNBZ0lDaGpLU0F5TURFekxUSXdNVGNnVFc5NmFXeHNZU3dnUVhCaFkyaGxJRXhwWTJWdWMyVWdNaTR3Q2lvdkNpRm1kVzVqZEdsdmJpaGhLWHRwWmlnaWIySnFaV04wSWowOWRIbHdaVzltSUdWNGNHOXlkSE1tSmlKMWJtUmxabWx1WldRaUlUMTBlWEJsYjJZZ2JXOWtkV3hsS1cxdlpIVnNaUzVsZUhCdmNuUnpQV0VvS1R0bGJITmxJR2xtS0NKbWRXNWpkR2x2YmlJOVBYUjVjR1Z2WmlCa1pXWnBibVVtSm1SbFptbHVaUzVoYldRcFpHVm1hVzVsS0Z0ZExHRXBPMlZzYzJWN2RtRnlJR0k3WWowaWRXNWtaV1pwYm1Wa0lpRTlkSGx3Wlc5bUlIZHBibVJ2ZHo5M2FXNWtiM2M2SW5WdVpHVm1hVzVsWkNJaFBYUjVjR1Z2WmlCbmJHOWlZV3cvWjJ4dlltRnNPaUoxYm1SbFptbHVaV1FpSVQxMGVYQmxiMllnYzJWc1pqOXpaV3htT25Sb2FYTXNZaTVzYjJOaGJHWnZjbUZuWlQxaEtDbDlmU2htZFc1amRHbHZiaWdwZTNKbGRIVnliaUJtZFc1amRHbHZiaUJoS0dJc1l5eGtLWHRtZFc1amRHbHZiaUJsS0djc2FDbDdhV1lvSVdOYloxMHBlMmxtS0NGaVcyZGRLWHQyWVhJZ2FUMGlablZ1WTNScGIyNGlQVDEwZVhCbGIyWWdjbVZ4ZFdseVpTWW1jbVZ4ZFdseVpUdHBaaWdoYUNZbWFTbHlaWFIxY200Z2FTaG5MQ0V3S1R0cFppaG1LWEpsZEhWeWJpQm1LR2NzSVRBcE8zWmhjaUJxUFc1bGR5QkZjbkp2Y2lnaVEyRnVibTkwSUdacGJtUWdiVzlrZFd4bElDY2lLMmNySWljaUtUdDBhSEp2ZHlCcUxtTnZaR1U5SWsxUFJGVk1SVjlPVDFSZlJrOVZUa1FpTEdwOWRtRnlJR3M5WTF0blhUMTdaWGh3YjNKMGN6cDdmWDA3WWx0blhWc3dYUzVqWVd4c0tHc3VaWGh3YjNKMGN5eG1kVzVqZEdsdmJpaGhLWHQyWVhJZ1l6MWlXMmRkV3pGZFcyRmRPM0psZEhWeWJpQmxLR044ZkdFcGZTeHJMR3N1Wlhod2IzSjBjeXhoTEdJc1l5eGtLWDF5WlhSMWNtNGdZMXRuWFM1bGVIQnZjblJ6ZldadmNpaDJZWElnWmowaVpuVnVZM1JwYjI0aVBUMTBlWEJsYjJZZ2NtVnhkV2x5WlNZbWNtVnhkV2x5WlN4blBUQTdaenhrTG14bGJtZDBhRHRuS3lzcFpTaGtXMmRkS1R0eVpYUjFjbTRnWlgwb2V6RTZXMloxYm1OMGFXOXVLR0VzWWl4aktYc29ablZ1WTNScGIyNG9ZU2w3SW5WelpTQnpkSEpwWTNRaU8yWjFibU4wYVc5dUlHTW9LWHRyUFNFd08yWnZjaWgyWVhJZ1lTeGlMR005YkM1c1pXNW5kR2c3WXpzcGUyWnZjaWhpUFd3c2JEMWJYU3hoUFMweE95c3JZVHhqT3lsaVcyRmRLQ2s3WXoxc0xteGxibWQwYUgxclBTRXhmV1oxYm1OMGFXOXVJR1FvWVNsN01TRTlQV3d1Y0hWemFDaGhLWHg4YTN4OFpTZ3BmWFpoY2lCbExHWTlZUzVOZFhSaGRHbHZiazlpYzJWeWRtVnlmSHhoTGxkbFlrdHBkRTExZEdGMGFXOXVUMkp6WlhKMlpYSTdhV1lvWmlsN2RtRnlJR2M5TUN4b1BXNWxkeUJtS0dNcExHazlZUzVrYjJOMWJXVnVkQzVqY21WaGRHVlVaWGgwVG05a1pTZ2lJaWs3YUM1dlluTmxjblpsS0drc2UyTm9ZWEpoWTNSbGNrUmhkR0U2SVRCOUtTeGxQV1oxYm1OMGFXOXVLQ2w3YVM1a1lYUmhQV2M5S3l0bkpUSjlmV1ZzYzJVZ2FXWW9ZUzV6WlhSSmJXMWxaR2xoZEdWOGZIWnZhV1FnTUQwOVBXRXVUV1Z6YzJGblpVTm9ZVzV1Wld3cFpUMGlaRzlqZFcxbGJuUWlhVzRnWVNZbUltOXVjbVZoWkhsemRHRjBaV05vWVc1blpTSnBiaUJoTG1SdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9Jbk5qY21sd2RDSXBQMloxYm1OMGFXOXVLQ2w3ZG1GeUlHSTlZUzVrYjJOMWJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MEtDSnpZM0pwY0hRaUtUdGlMbTl1Y21WaFpIbHpkR0YwWldOb1lXNW5aVDFtZFc1amRHbHZiaWdwZTJNb0tTeGlMbTl1Y21WaFpIbHpkR0YwWldOb1lXNW5aVDF1ZFd4c0xHSXVjR0Z5Wlc1MFRtOWtaUzV5WlcxdmRtVkRhR2xzWkNoaUtTeGlQVzUxYkd4OUxHRXVaRzlqZFcxbGJuUXVaRzlqZFcxbGJuUkZiR1Z0Wlc1MExtRndjR1Z1WkVOb2FXeGtLR0lwZlRwbWRXNWpkR2x2YmlncGUzTmxkRlJwYldWdmRYUW9ZeXd3S1gwN1pXeHpaWHQyWVhJZ2FqMXVaWGNnWVM1TlpYTnpZV2RsUTJoaGJtNWxiRHRxTG5CdmNuUXhMbTl1YldWemMyRm5aVDFqTEdVOVpuVnVZM1JwYjI0b0tYdHFMbkJ2Y25ReUxuQnZjM1JOWlhOellXZGxLREFwZlgxMllYSWdheXhzUFZ0ZE8ySXVaWGh3YjNKMGN6MWtmU2t1WTJGc2JDaDBhR2x6TENKMWJtUmxabWx1WldRaUlUMTBlWEJsYjJZZ1oyeHZZbUZzUDJkc2IySmhiRG9pZFc1a1pXWnBibVZrSWlFOWRIbHdaVzltSUhObGJHWS9jMlZzWmpvaWRXNWtaV1pwYm1Wa0lpRTlkSGx3Wlc5bUlIZHBibVJ2ZHo5M2FXNWtiM2M2ZTMwcGZTeDdmVjBzTWpwYlpuVnVZM1JwYjI0b1lTeGlMR01wZXlKMWMyVWdjM1J5YVdOMElqdG1kVzVqZEdsdmJpQmtLQ2w3ZldaMWJtTjBhVzl1SUdVb1lTbDdhV1lvSW1aMWJtTjBhVzl1SWlFOWRIbHdaVzltSUdFcGRHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ2ljbVZ6YjJ4MlpYSWdiWFZ6ZENCaVpTQmhJR1oxYm1OMGFXOXVJaWs3ZEdocGN5NXpkR0YwWlQxekxIUm9hWE11Y1hWbGRXVTlXMTBzZEdocGN5NXZkWFJqYjIxbFBYWnZhV1FnTUN4aElUMDlaQ1ltYVNoMGFHbHpMR0VwZldaMWJtTjBhVzl1SUdZb1lTeGlMR01wZTNSb2FYTXVjSEp2YldselpUMWhMQ0ptZFc1amRHbHZiaUk5UFhSNWNHVnZaaUJpSmlZb2RHaHBjeTV2YmtaMWJHWnBiR3hsWkQxaUxIUm9hWE11WTJGc2JFWjFiR1pwYkd4bFpEMTBhR2x6TG05MGFHVnlRMkZzYkVaMWJHWnBiR3hsWkNrc0ltWjFibU4wYVc5dUlqMDlkSGx3Wlc5bUlHTW1KaWgwYUdsekxtOXVVbVZxWldOMFpXUTlZeXgwYUdsekxtTmhiR3hTWldwbFkzUmxaRDEwYUdsekxtOTBhR1Z5UTJGc2JGSmxhbVZqZEdWa0tYMW1kVzVqZEdsdmJpQm5LR0VzWWl4aktYdHZLR1oxYm1OMGFXOXVLQ2w3ZG1GeUlHUTdkSEo1ZTJROVlpaGpLWDFqWVhSamFDaGlLWHR5WlhSMWNtNGdjQzV5WldwbFkzUW9ZU3hpS1gxa1BUMDlZVDl3TG5KbGFtVmpkQ2hoTEc1bGR5QlVlWEJsUlhKeWIzSW9Ja05oYm01dmRDQnlaWE52YkhabElIQnliMjFwYzJVZ2QybDBhQ0JwZEhObGJHWWlLU2s2Y0M1eVpYTnZiSFpsS0dFc1pDbDlLWDFtZFc1amRHbHZiaUJvS0dFcGUzWmhjaUJpUFdFbUptRXVkR2hsYmp0cFppaGhKaVlvSW05aWFtVmpkQ0k5UFhSNWNHVnZaaUJoZkh3aVpuVnVZM1JwYjI0aVBUMTBlWEJsYjJZZ1lTa21KaUptZFc1amRHbHZiaUk5UFhSNWNHVnZaaUJpS1hKbGRIVnliaUJtZFc1amRHbHZiaWdwZTJJdVlYQndiSGtvWVN4aGNtZDFiV1Z1ZEhNcGZYMW1kVzVqZEdsdmJpQnBLR0VzWWlsN1puVnVZM1JwYjI0Z1l5aGlLWHRtZkh3b1pqMGhNQ3h3TG5KbGFtVmpkQ2hoTEdJcEtYMW1kVzVqZEdsdmJpQmtLR0lwZTJaOGZDaG1QU0V3TEhBdWNtVnpiMngyWlNoaExHSXBLWDFtZFc1amRHbHZiaULine truncated
],
[
"левая-правая-область",
"ewogICAgLy8g0JvQtdCy0LDRjyDQvtCx0LvQsNGB0YLRjC4KICAgIHZhciDQu9C+ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQu9C+LmlkPSLQu9C10LLQsNGPLdC+0LHQu9Cw0YHRgtGMIjsKICAgINC70L4uc3R5bGUuY3NzVGV4dCA9CiAgICAgICAgInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA1MCU7IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0LvQvik7CiAgICAKICAgIC8vINCf0YDQsNCy0LDRjyDQvtCx0LvQsNGB0YLRjC4KICAgIHZhciDQv9C+ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQv9C+LmlkPSLQv9GA0LDQstCw0Y8t0L7QsdC70LDRgdGC0YwiOwogICAg0L/Qvi5zdHlsZS5jc3NUZXh0ID0KICAgICAgICAicG9zaXRpb246IGZpeGVkOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA1MCU7IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0L/Qvik7Cn0=",
"муром.загрузка_1.0.0",
"LyoKICogTk9URSBPbmx5IEFTQ0lJIGlzIGFsbG93ZWQgaW4gdGhpcyBsb2FkaW5nIG1vZHVsZQogKiBOT1RFIGJlY2F1c2UgaXQncyBkZWNpcGhlcmVkIHdpdGggYnRvYSgpIGNhbGwsCiAqIE5PVEUgd2hpY2ggY2FuJ3QgaGFuZGxlIFVuaWNvZGUuCiAqIE5PVEUgSG93ZXZlciwgbXVyb20uYXRvYi9idG9hIGZ1bmN0aW9ucyAoZGVmaW5lZCBoZXJlKQogKiBOT1RFIHdvcmsgZmluZSB3aXRoIFVuaWNvZGUsIHNvIHlvdSBhcmUgZnJlZQogKiBOT1RFIHRvIHVzZSBVbmljb2RlIGluIG90aGVyIG1vZHVsZXMKICovCgptdXJvbS5pbnN0YWxsTG9jYWxGb3JhZ2UgPSBmdW5jdGlvbigpCnsKLyoKICAgIGxvY2FsRm9yYWdlIC0tIE9mZmxpbmUgU3RvcmFnZSwgSW1wcm92ZWQKICAgIFZlcnNpb24gMS43LjMKICAgIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlCiAgICAoYykgMjAxMy0yMDE3IE1vemlsbGEsIEFwYWNoZSBMaWNlbnNlIDIuMAoqLwohZnVuY3Rpb24oYSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiO2I9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGIubG9jYWxmb3JhZ2U9YSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gYShiLGMsZCl7ZnVuY3Rpb24gZShnLGgpe2lmKCFjW2ddKXtpZighYltnXSl7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWgmJmkpcmV0dXJuIGkoZywhMCk7aWYoZilyZXR1cm4gZihnLCEwKTt2YXIgaj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitnKyInIik7dGhyb3cgai5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixqfXZhciBrPWNbZ109e2V4cG9ydHM6e319O2JbZ11bMF0uY2FsbChrLmV4cG9ydHMsZnVuY3Rpb24oYSl7dmFyIGM9YltnXVsxXVthXTtyZXR1cm4gZShjfHxhKX0sayxrLmV4cG9ydHMsYSxiLGMsZCl9cmV0dXJuIGNbZ10uZXhwb3J0c31mb3IodmFyIGY9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZz0wO2c8ZC5sZW5ndGg7ZysrKWUoZFtnXSk7cmV0dXJuIGV9KHsxOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7az0hMDtmb3IodmFyIGEsYixjPWwubGVuZ3RoO2M7KXtmb3IoYj1sLGw9W10sYT0tMTsrK2E8YzspYlthXSgpO2M9bC5sZW5ndGh9az0hMX1mdW5jdGlvbiBkKGEpezEhPT1sLnB1c2goYSl8fGt8fGUoKX12YXIgZSxmPWEuTXV0YXRpb25PYnNlcnZlcnx8YS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKGYpe3ZhciBnPTAsaD1uZXcgZihjKSxpPWEuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2gub2JzZXJ2ZShpLHtjaGFyYWN0ZXJEYXRhOiEwfSksZT1mdW5jdGlvbigpe2kuZGF0YT1nPSsrZyUyfX1lbHNlIGlmKGEuc2V0SW1tZWRpYXRlfHx2b2lkIDA9PT1hLk1lc3NhZ2VDaGFubmVsKWU9ImRvY3VtZW50ImluIGEmJiJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gYS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKT9mdW5jdGlvbigpe3ZhciBiPWEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjKCksYi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfSxhLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChiKX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGMsMCl9O2Vsc2V7dmFyIGo9bmV3IGEuTWVzc2FnZUNoYW5uZWw7ai5wb3J0MS5vbm1lc3NhZ2U9YyxlPWZ1bmN0aW9uKCl7ai5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19dmFyIGssbD1bXTtiLmV4cG9ydHM9ZH0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDI6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBlKGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoInJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3RoaXMuc3RhdGU9cyx0aGlzLnF1ZXVlPVtdLHRoaXMub3V0Y29tZT12b2lkIDAsYSE9PWQmJmkodGhpcyxhKX1mdW5jdGlvbiBmKGEsYixjKXt0aGlzLnByb21pc2U9YSwiZnVuY3Rpb24iPT10eXBlb2YgYiYmKHRoaXMub25GdWxmaWxsZWQ9Yix0aGlzLmNhbGxGdWxmaWxsZWQ9dGhpcy5vdGhlckNhbGxGdWxmaWxsZWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBjJiYodGhpcy5vblJlamVjdGVkPWMsdGhpcy5jYWxsUmVqZWN0ZWQ9dGhpcy5vdGhlckNhbGxSZWplY3RlZCl9ZnVuY3Rpb24gZyhhLGIsYyl7byhmdW5jdGlvbigpe3ZhciBkO3RyeXtkPWIoYyl9Y2F0Y2goYil7cmV0dXJuIHAucmVqZWN0KGEsYil9ZD09PWE/cC5yZWplY3QoYSxuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmIikpOnAucmVzb2x2ZShhLGQpfSl9ZnVuY3Rpb24gaChhKXt2YXIgYj1hJiZhLnRoZW47aWYoYSYmKCJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGEpJiYiZnVuY3Rpb24iPT10eXBlb2YgYilyZXR1cm4gZnVuY3Rpb24oKXtiLmFwcGx5KGEsYXJndW1lbnRzKX19ZnVuY3Rpb24gaShhLGIpe2Z1bmN0aW9uIGMoYil7Znx8KGY9ITAscC5yZWplY3QoYSxiKSl9ZnVuY3Rpb24gZChiKXtmfHwoZj0hMCxwLnJlc29sdmUoYSxiKSl9ZnVuY3Rpb24gZSgpe2IoZCxjKX12YXIgZj0hMSxnPWooZSk7ImVycm9yIj09PWcuc3RhdHVzJiZjKGcudmFsdWUpfWZ1bmN0aW9uIGooYSxiKXt2YXIgYz17fTt0cnl7Yy52YWx1ZT1hKGIpLGMuc3RhdHVzPSJzdWNjZXNzIn1jYXRjaChhKXtjLnN0YXR1cz0iZXJyb3IiLGMudmFsdWU9YX1yZXR1cm4gY31mdW5jdGlvbiBrKGEpe3JldHVybiBhIGluc3RhbmNlb2YgdGhpcz9hOnAucmVzb2x2ZShuZXcgdGhpcyhkKSxhKX1mdW5jdGlvbiBsKGEpe3ZhciBiPW5ldyB0aGlzKGQpO3JldHVybiBwLnJlamVjdChiLGEpfWZ1bmN0aW9uIG0oYSl7ZnVuY3Rpb24gYihhLGIpe2Z1bmN0aW9uIGQoYSl7Z1tiXT1hLCsraCE9PWV8fGZ8fChmPSEwLHAucmVzb2x2ZShqLGcpKX1jLnJlc29sdmUoYSkudGhlbihkLGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVqZWN0KGosYSkpfSl9dmFyIGM9dGhpcztpZigiW29iamVjdCBBcnJheV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBlPWEubGVuZ3RoLGY9ITE7aWYoIWUpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBnPW5ldyBBcnJheShlKSxoPTAsaT0tMSxqPW5ldyB0aGlzKGQpOysraTxlOyliKGFbaV0saSk7cmV0dXJuIGp9ZnVuY3Rpb24gbihhKXtmdW5jdGlvbiBiKGEpe2MucmVzb2x2ZShhKS50aGVuKGZ1bmN0aW9uKGEpe2Z8fChmPSEwLHAucmVzb2x2ZShoLGEpKX0sZnVuY3Rpb24oYSl7Znx8KGY9ITAscC5yZWplY3QoaCLine truncated
{}
],
[
"ace",
"Ly8gQUNFIGNvZGUgZWRpdG9yLgovLyBodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UtYnVpbGRzL2Jsb2IvbWFzdGVyL3NyYy1taW4tbm9jb25mbGljdC9hY2UuanMKKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1lO24mJihlW25dfHwoZVtuXT17fSksaT1lW25dKTtpZighaS5kZWZpbmV8fCFpLmRlZmluZS5wYWNrYWdlZCl0Lm9yaWdpbmFsPWkuZGVmaW5lLGkuZGVmaW5lPXQsaS5kZWZpbmUucGFja2FnZWQ9ITA7aWYoIWkucmVxdWlyZXx8IWkucmVxdWlyZS5wYWNrYWdlZClyLm9yaWdpbmFsPWkucmVxdWlyZSxpLnJlcXVpcmU9cixpLnJlcXVpcmUucGFja2FnZWQ9ITB9dmFyIEFDRV9OQU1FU1BBQ0UgPSAiYWNlIixlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7IWUmJnR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYoZT13aW5kb3cpO2lmKCFBQ0VfTkFNRVNQQUNFJiZ0eXBlb2YgcmVxdWlyZWpzIT0idW5kZWZpbmVkIilyZXR1cm47dmFyIHQ9ZnVuY3Rpb24oZSxuLHIpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil7dC5vcmlnaW5hbD90Lm9yaWdpbmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooY29uc29sZS5lcnJvcigiZHJvcHBpbmcgbW9kdWxlIGJlY2F1c2UgZGVmaW5lIHdhc24ndCBhIHN0cmluZy4iKSxjb25zb2xlLnRyYWNlKCkpO3JldHVybn1hcmd1bWVudHMubGVuZ3RoPT0yJiYocj1uKSx0Lm1vZHVsZXNbZV18fCh0LnBheWxvYWRzW2VdPXIsdC5tb2R1bGVzW2VdPW51bGwpfTt0Lm1vZHVsZXM9e30sdC5wYXlsb2Fkcz17fTt2YXIgbj1mdW5jdGlvbihlLHQsbil7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgaT1zKGUsdCk7aWYoaSE9dW5kZWZpbmVkKXJldHVybiBuJiZuKCksaX1lbHNlIGlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEFycmF5XSIpe3ZhciBvPVtdO2Zvcih2YXIgdT0wLGE9dC5sZW5ndGg7dTxhOysrdSl7dmFyIGY9cyhlLHRbdV0pO2lmKGY9PXVuZGVmaW5lZCYmci5vcmlnaW5hbClyZXR1cm47by5wdXNoKGYpfXJldHVybiBuJiZuLmFwcGx5KG51bGwsbyl8fCEwfX0scj1mdW5jdGlvbihlLHQpe3ZhciBpPW4oIiIsZSx0KTtyZXR1cm4gaT09dW5kZWZpbmVkJiZyLm9yaWdpbmFsP3Iub3JpZ2luYWwuYXBwbHkodGhpcyxhcmd1bWVudHMpOml9LGk9ZnVuY3Rpb24oZSx0KXtpZih0LmluZGV4T2YoIiEiKSE9PS0xKXt2YXIgbj10LnNwbGl0KCIhIik7cmV0dXJuIGkoZSxuWzBdKSsiISIraShlLG5bMV0pfWlmKHQuY2hhckF0KDApPT0iLiIpe3ZhciByPWUuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5qb2luKCIvIik7dD1yKyIvIit0O3doaWxlKHQuaW5kZXhPZigiLiIpIT09LTEmJnMhPXQpe3ZhciBzPXQ7dD10LnJlcGxhY2UoL1wvXC5cLy8sIi8iKS5yZXBsYWNlKC9bXlwvXStcL1wuXC5cLy8sIiIpfX1yZXR1cm4gdH0scz1mdW5jdGlvbihlLHIpe3I9aShlLHIpO3ZhciBzPXQubW9kdWxlc1tyXTtpZighcyl7cz10LnBheWxvYWRzW3JdO2lmKHR5cGVvZiBzPT0iZnVuY3Rpb24iKXt2YXIgbz17fSx1PXtpZDpyLHVyaToiIixleHBvcnRzOm8scGFja2FnZWQ6ITB9LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihyLGUsdCl9LGY9cyhhLG8sdSk7bz1mfHx1LmV4cG9ydHMsdC5tb2R1bGVzW3JdPW8sZGVsZXRlIHQucGF5bG9hZHNbcl19cz10Lm1vZHVsZXNbcl09b3x8c31yZXR1cm4gc307byhBQ0VfTkFNRVNQQUNFKX0pKCksYWNlLmRlZmluZSgiYWNlL2xpYi9yZWdleHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuKGUuZ2xvYmFsPyJnIjoiIikrKGUuaWdub3JlQ2FzZT8iaSI6IiIpKyhlLm11bHRpbGluZT8ibSI6IiIpKyhlLmV4dGVuZGVkPyJ4IjoiIikrKGUuc3RpY2t5PyJ5IjoiIil9ZnVuY3Rpb24gdShlLHQsbil7aWYoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpcmV0dXJuIGUuaW5kZXhPZih0LG4pO2Zvcih2YXIgcj1ufHwwO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfXZhciByPXtleGVjOlJlZ0V4cC5wcm90b3R5cGUuZXhlYyx0ZXN0OlJlZ0V4cC5wcm90b3R5cGUudGVzdCxtYXRjaDpTdHJpbmcucHJvdG90eXBlLm1hdGNoLHJlcGxhY2U6U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLHNwbGl0OlN0cmluZy5wcm90b3R5cGUuc3BsaXR9LGk9ci5leGVjLmNhbGwoLygpPz8vLCIiKVsxXT09PXVuZGVmaW5lZCxzPWZ1bmN0aW9uKCl7dmFyIGU9L14vZztyZXR1cm4gci50ZXN0LmNhbGwoZSwiIiksIWUubGFzdEluZGV4fSgpO2lmKHMmJmkpcmV0dXJuO1JlZ0V4cC5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlKXt2YXIgdD1yLmV4ZWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4sYTtpZih0eXBlb2YgZT09InN0cmluZyImJnQpeyFpJiZ0Lmxlbmd0aD4xJiZ1KHQsIiIpPi0xJiYoYT1SZWdFeHAodGhpcy5zb3VyY2Usci5yZXBsYWNlLmNhbGwobyh0aGlzKSwiZyIsIiIpKSxyLnJlcGxhY2UuY2FsbChlLnNsaWNlKHQuaW5kZXgpLGEsZnVuY3Rpb24oKXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGgtMjtlKyspYXJndW1lbnRzW2VdPT09dW5kZWZpbmVkJiYodFtlXT11bmRlZmluZWQpfSkpO2lmKHRoaXMuX3hyZWdleHAmJnRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKWZvcih2YXIgZj0xO2Y8dC5sZW5ndGg7ZisrKW49dGhpcy5feHJlZ2V4cC5jYXB0dXJlTmFtZXNbZi0xXSxuJiYodFtuXT10W2ZdKTshcyYmdGhpcy5nbG9iYWwmJiF0WzBdLmxlbmd0aCYmdGhpcy5sYXN0SW5kZXg+dC5pbmRleCYmdGhpcy5sYXN0SW5kZXgtLX1yZXR1cm4gdH0sc3x8KFJlZ0V4cC5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihlKXt2YXIgdD1yLmV4ZWMuY2FsbCh0aGlzLGUpO3JldHVybiB0JiZ0aGlzLmdsb2JhbCYmIXRbMF0ubGVuZ3RoJiZ0aGlzLmxhc3RJbmRleD50LmluZGV4JiZ0aGlzLmxhc3RJbmRleC0tLCEhdH0pfSksYWNlLmRlZmluZSgiYWNlL2xpYi9lczUtc2hpbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIHcoZSl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2VudGluZWwiLHt9KSwic2VudGluZWwiaW4gZX1jYXRjaCh0KXt9fWZ1bmN0aW9uIEgoZSl7cmV0dXJuIGU9K2UsZSE9PWU/ZT0wOmUhPT0wJiZlIT09MS8wJiZlIT09LTEvMCYmKGU9KGU+MHx8LTEpKk1hdGguZmxvb3IoTWF0aC5hYnMoZSkpKSxlfWZ1bmN0aW9uIEIoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGU9PT1udWxsfHx0PT09InVuZGVmaW5lZCJ8fHQ9PT0iYm9vbGVhbiJ8fHQ9PT0ibnVtYmVyInx8dD09PSJzdHJpbmcifWZ1bmN0aW9uIGooZSl7dmFyIHQsbixyO2lmKEIoZSkpcmV0dXJuIGU7bj1lLnZhbHVlT2Y7aWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe3Q9bi5jYWxsKGUpO2lmKEIodCkpcmV0dXJuIHR9cj1lLnRvU3RyaW5nO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt0PXIuY2FsbChlKTtpZihCKHQpKXJldHVybiB0fXRocm93IG5ldyBUeXBlRXJyb3J9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fChGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgbj10aGlzO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIituKTt2YXIgaT11LmNhbGwoYXLine truncated
],
[
"ace.режим-js",
"Ly8gSmF2YVNjcmlwdCBtb2RlIGZvciBBQ0UuCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS1idWlsZHMvYmxvYi9tYXN0ZXIvc3JjLW1pbi1ub2NvbmZsaWN0L21vZGUtamF2YXNjcmlwdC5qcwphY2UuZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLHM9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSxzLmdldFRhZ1J1bGUoKSx7ZGVmYXVsdFRva2VuOiJjb21tZW50LmRvYyIsY2FzZUluc2Vuc2l0aXZlOiEwfV19fTtyLmluaGVyaXRzKHMsaSkscy5nZXRUYWdSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MudGFnLnN0b3JhZ2UudHlwZSIscmVnZXg6IlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIn19LHMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmV9fSxzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oZSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIscmVnZXg6IlxcKlxcLyIsbmV4dDplfX0sdC5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9c30pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYSgpe3ZhciBlPW8ucmVwbGFjZSgiXFxkIiwiXFxkXFwtIiksdD17b25NYXRjaDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5jaGFyQXQoMSk9PSIvIj8yOjE7aWYocj09MSl0IT10aGlzLm5leHRTdGF0ZT9uLnVuc2hpZnQodGhpcy5uZXh0LHRoaXMubmV4dFN0YXRlLDApOm4udW5zaGlmdCh0aGlzLm5leHQpLG5bMl0rKztlbHNlIGlmKHI9PTImJnQ9PXRoaXMubmV4dFN0YXRlKXtuWzFdLS07aWYoIW5bMV18fG5bMV08MCluLnNoaWZ0KCksbi5zaGlmdCgpfXJldHVyblt7dHlwZToibWV0YS50YWcucHVuY3R1YXRpb24uIisocj09MT8iIjoiZW5kLSIpKyJ0YWctb3Blbi54bWwiLHZhbHVlOmUuc2xpY2UoMCxyKX0se3R5cGU6Im1ldGEudGFnLnRhZy1uYW1lLnhtbCIsdmFsdWU6ZS5zdWJzdHIocil9XX0scmVnZXg6IjwvPyIrZSsiIixuZXh0OiJqc3hBdHRyaWJ1dGVzIixuZXh0U3RhdGU6ImpzeCJ9O3RoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQodCk7dmFyIG49e3JlZ2V4OiJ7Iix0b2tlbjoicGFyZW4ucXVhc2kuc3RhcnQiLHB1c2g6InN0YXJ0In07dGhpcy4kcnVsZXMuanN4PVtuLHQse2luY2x1ZGU6InJlZmVyZW5jZSJ9LHtkZWZhdWx0VG9rZW46InN0cmluZyJ9XSx0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzPVt7dG9rZW46Im1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLHJlZ2V4OiIvPz4iLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT1uWzBdJiZuLnNoaWZ0KCksZS5sZW5ndGg9PTImJihuWzBdPT10aGlzLm5leHRTdGF0ZSYmblsxXS0tLCghblsxXXx8blsxXTwwKSYmbi5zcGxpY2UoMCwyKSksdGhpcy5uZXh0PW5bMF18fCJzdGFydCIsW3t0eXBlOnRoaXMudG9rZW4sdmFsdWU6ZX1dfSxuZXh0U3RhdGU6ImpzeCJ9LG4sZigianN4QXR0cmlidXRlcyIpLHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIscmVnZXg6ZX0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIixyZWdleDoiPSJ9LHt0b2tlbjoidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLHN0YXRlTmFtZToianN4X2F0dHJfcSIscHVzaDpbe3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLG5leHQ6InBvcCJ9LHtpbmNsdWRlOiJyZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9XX0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6JyInLHN0YXRlTmFtZToianN4X2F0dHJfcXEiLHB1c2g6W3t0b2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiciJyxuZXh0OiJwb3AifSx7aW5jbHVkZToicmVmZXJlbmNlIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifV19LHRdLHRoaXMuJHJ1bGVzLnJlZmVyZW5jZT1be3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIscmVnZXg6Iig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIn1dfWZ1bmN0aW9uIGYoZSl7cmV0dXJuW3t0b2tlbjoiY29tbWVudCIscmVnZXg6L1wvXCovLG5leHQ6W2kuZ2V0VGFnUnVsZSgpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcKlxcLyIsbmV4dDplfHwicG9wIn0se2RlZmF1bHRUb2tlbjoiY29tbWVudCIsY2FzZUluc2Vuc2l0aXZlOiEwfV19LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLyIsbmV4dDpbaS5nZXRUYWdSdWxlKCkse3Rva2VuOiJjb21tZW50IixyZWdleDoiJHxeIixuZXh0OmV8fCJwb3AifSx7ZGVmYXVsdFRva2VuOiJjb21tZW50IixjYXNlSW5zZW5zaXRpdmU6ITB9XX1dfXZhciByPWUoIi4uL2xpYi9vb3AiKSxpPWUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLHM9ZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxvPSJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsidmFyaWFibGUubGFuZ3VhZ2UiOiJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLGtleXdvcmQ6ImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGLine truncated
"муром.файл_1.0.0",
"0LzRg9GA0L7QvC7RhNCw0LnQuyA9IHt9OwrQvNGD0YDQvtC8LtGE0LDQudC7LtC90LDRh9Cw0LvQviA9CmAKPCFET0NUWVBFIGh0bWw+CjxodG1sPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICAgIDxib2R5PgogICAgICAgIDxzY3JpcHQ+CnZhciDQvNGD0YDQvtC8ID0ge307CnZhciBtdXJvbSA9INC80YPRgNC+0Lw7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C4ID0gWwpgOwrQvNGD0YDQvtC8LtGE0LDQudC7LtC60L7QvdC10YYgPQpgCl07CgpPYmplY3QuZGVmaW5lUHJvcGVydHkobXVyb20sICJtb2R1bGVzIiwgewogICAgZ2V0OiBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4OwogICAgfSwKICAgIHNldDogZnVuY3Rpb24o0LfQvdCw0YfQtdC90LjRjykKICAgIHsKICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuCA9INC30L3QsNGH0LXQvdC40Y87CiAgICB9Cn0pOwoKdmFyINC30LDQs9GA0YPQt9C+0YfQvdGL0LnQnNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFswXTsKdmFyINC60L7QtCA9IGF0b2Io0LfQsNCz0YDRg9C30L7Rh9C90YvQudCc0L7QtNGD0LvRjFsxXSk7CmV2YWwo0LrQvtC0KTsKICAgICAgICA8L3NjcmlwdD4KICAgIDwvYm9keT4KPC9odG1sPgpgOwo=",
{}
],
[
"редактор",
"ewogICAgdmFyINGA0LXQtNCw0LrRgtC+0YAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgINGA0LXQtNCw0LrRgtC+0YAuaWQgPSAi0YDQtdC00LDQutGC0L7RgCI7CiAgICDRgNC10LTQsNC60YLQvtGALnN0eWxlLmNzc1RleHQgPSAiaGVpZ2h0OiAxMDAlOyI7CiAgICB2YXIg0L7QsdC70LDRgdGC0YwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi0LvQtdCy0LDRjy3QvtCx0LvQsNGB0YLRjCIpOwogICAg0L7QsdC70LDRgdGC0YwuYXBwZW5kQ2hpbGQo0YDQtdC00LDQutGC0L7RgCk7CiAgICDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAgPSB3aW5kb3cuYWNlLmVkaXQoItGA0LXQtNCw0LrRgtC+0YAiKTsKICAgINC80YPRgNC+0Lwu0YDQtdC00LDQutGC0L7RgC5zZXNzaW9uLnNldE1vZGUoImFjZS9tb2RlL2phdmFzY3JpcHQiKTsKfQ==",
],
[
"муром.модули",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQgPSB7fTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0L7QsdC7ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoItC/0YDQsNCy0LDRjy3QvtCx0LvQsNGB0YLRjCIpOwogICAgdmFyINC80L7QtNGD0LvQuCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAg0L7QsdC7LmFwcGVuZENoaWxkKNC80L7QtNGD0LvQuCk7CiAgICDQvNC+0LTRg9C70LguaWQgPSAi0LzRg9GA0L7QvC3QvNC+0LTRg9C70LgiOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCc0L7QtNGD0LvQuCA9INC80L7QtNGD0LvQuDsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBKCk7",
"муром.база_1.0.0",
"LyoKICogCiAqIFVVSUQKICoKICovCgovLyBDcmVhdGUgR1VJRCAvIFVVSUQgaW4gSmF2YVNjcmlwdD8KLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxMTc1MjMK0LzRg9GA0L7QvC51dWlkID0gZnVuY3Rpb24oKQp7CiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgKICAgICAgICAvW3h5XS9nLAogICAgICAgIGZ1bmN0aW9uKGMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7CiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTsKICAgICAgICB9CiAgICApOwp9OwoKLyoKICogCiAqINCj0LLQtdC00L7QvNC40YLQtdC70YwgLyBSZXBvcnRlcgogKgogKi8KCi8vIFJlcG9ydGVyU3Vic2NyaXB0aW9uIGNsYXNzLgpmdW5jdGlvbiBSZXBvcnRlclN1YnNjcmlwdGlvbihpZCwgY2FsbGJhY2ssIHJlcG9ydGVyKQp7CiAgICB0aGlzLmlkID0gaWQ7CiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7Cn0KCi8vIFJlcG9ydGVyIGNsYXNzLgpmdW5jdGlvbiBSZXBvcnRlcihuYW1lKQp7CiAgICB0aGlzLm5hbWUgPQogICAgICAgICh0eXBlb2YgbmFtZSAhPT0gInVuZGVmaW5lZCIpID8gCiAgICAgICAgbmFtZSA6CiAgICAgICAgIiI7CiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTsKfQpSZXBvcnRlci5wcm90b3R5cGUucmVwb3J0ID0gZnVuY3Rpb24oKQp7CiAgICBmb3IgKHZhciBpZCBpbiB0aGlzLnN1YnNjcmlwdGlvbnMpCiAgICB7CiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaXB0aW9uc1tpZF07CiAgICAgICAgc3Vic2NyaXB0aW9uLmNhbGxiYWNrKCk7CiAgICB9Cn0KUmVwb3J0ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKQp7CiAgICB2YXIgaWQgPSBtdXJvbS51dWlkKCk7CiAgICB2YXIgc3Vic2NyaXB0aW9uID0gbmV3IFJlcG9ydGVyU3Vic2NyaXB0aW9uKGlkLCBjYWxsYmFjaywgdGhpcyk7CiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pOwogICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKfQpSZXBvcnRlci5wcm90b3R5cGUuc3Vic2NyaWJlTWFueSA9IGZ1bmN0aW9uKGZ1bmNzKQp7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgKytpKQogICAgewogICAgICAgIHZhciBmdW5jID0gZnVuY3NbaV07CiAgICAgICAgdGhpcy5zdWJzY3JpYmUoZnVuYyk7CiAgICB9Cn0KCnZhciDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMID0gUmVwb3J0ZXI7ClJlcG9ydGVyLnByb3RvdHlwZS7Rg9Cy0LXQtNC+0LzQuNGC0YwgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMucmVwb3J0KCk7Cn07ClJlcG9ydGVyLnByb3RvdHlwZS7Qv9C+0LTQv9C40YHQsNGC0YwgPSBmdW5jdGlvbijRhNGD0L3QutGG0LjRjykKewogICAgdGhpcy5zdWJzY3JpYmUo0YTRg9C90LrRhtC40Y8pOwp9OwpSZXBvcnRlci5wcm90b3R5cGUu0L/QvtC00L/QuNGB0LDRgtGM0JzQvdC+0LPQviA9IGZ1bmN0aW9uKGZ1bmNzKQp7CiAgICB0aGlzLnN1YnNjcmliZU1hbnkoZnVuY3MpOwp9OwoKLyoKICogCiAqINCf0YPRgdC6IC8gU3RhcnQKICoKICovCgrQvNGD0YDQvtC8LtC/0YPRgdC6ID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKLy8gQ2FuIGFsc28gYmUgYWNjZXNzZWQgYXMgJ211cm9tLnJ1bicuCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtdXJvbSwgInJ1biIsIHsKICAgIGdldDogZnVuY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiDQvNGD0YDQvtC8LtC/0YPRgdC6OwogICAgfQp9KTsKbXVyb20uc3RhcnQgPSBmdW5jdGlvbigpCnsKICAgINC80YPRgNC+0Lwu0L/Rg9GB0Lou0YPQstC10LTQvtC80LjRgtGMKCk7Cn07",
{}
],
[
"муром.модули.статус",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHRgtCw0YLRg9GB0JzQvtC00YPQu9GPID0gZnVuY3Rpb24o0LzQvtC00YPQu9GMKQp7CiAgICBpZiAo0LzQvtC00YPQu9GMWzJdID09IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgcmV0dXJuIHRydWU7Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Qt9Cw0LTQsNGC0YzQodGC0LDRgtGD0YHQnNC+0LTRg9C70Y8gPSBmdW5jdGlvbijQvNC+0LTRg9C70YwsINGB0YLQsNGC0YPRgSkKewogICAgLy8g0KPQtNCw0LvQuNGC0Ywg0YLQtdC60YPRidC40Lkg0YHRgtCw0YLRg9GBINCyINGB0LvRg9GH0LDQtSDQvdCw0LvQuNGH0LjRjy4KICAgIGlmICjQvNC+0LTRg9C70YwubGVuZ3RoID09IDMpCiAgICB7CiAgICAgICAg0LzQvtC00YPQu9GMLnBvcCgpOwogICAgfQogICAgaWYgKCHRgdGC0LDRgtGD0YEpCiAgICB7CiAgICAgICAg0LzQvtC00YPQu9GMWzJdID0gZmFsc2U7CiAgICB9Cn07Cg==",
],
[
"муром.модули.сохранение",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjRgtGMID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjQu9C4ID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGB0KHQvtGF0YDQsNC90LXQvdC40Y8gPSBmdW5jdGlvbigpCnsKICAgINGB0L7RhdGA0LDQvdC10L3QuNC1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0JzQvtC00YPQu9C4LmFwcGVuZENoaWxkKNGB0L7RhdGA0LDQvdC10L3QuNC1KTsKICAgINGB0L7RhdGA0LDQvdC10L3QuNC1LmlubmVySFRNTCA9ICLQodC+0YXRgNCw0L3QuNGC0Ywg0LLRgdGRIjsKICAgINGB0L7RhdGA0LDQvdC10L3QuNC1Lm9uY2xpY2sgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjRgtGMLtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQodC+0YXRgNCw0L3QtdC90LjQtSA9INGB0L7RhdGA0LDQvdC10L3QuNC1Owp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjRgtGM0JLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0L3QvtC80LXRgCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQnNC+0LTRg9C70Y8o0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMKTsKICAgIGlmICgh0L3QvtC80LXRgCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICB2YXIg0LrQvtC0ID0g0LzRg9GA0L7QvC7RgNC10LTQsNC60YLQvtGALnNlc3Npb24uZ2V0VmFsdWUoKTsKICAgINC80L7QtNGD0LvRjFsxXSA9IGJhc2U2NEVuY29kZSjQutC+0LQpOwp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjRgtGM0JLQkdCw0LfQtSA9IGZ1bmN0aW9uKNC+0YLQutC70LjQuikKewogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCh0L7RhdGA0LDQvdC10L3QuNC1LmRpc2FibGVkID0gdHJ1ZTsKICAgIGxvY2FsZm9yYWdlLnNldEl0ZW0oItC80L7QtNGD0LvQuCIsINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4LCBmdW5jdGlvbijQvtGI0LjQsdC60LAsINC30L3QsNGH0LXQvdC40LUpewogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQodC+0YXRgNCw0L3QtdC90LjQtS5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgIGlmICjQvtGI0LjQsdC60LApCiAgICAgICAgewogICAgICAgICAgICBjb25zb2xlLmxvZygi0J7QqNCY0JHQmtCQINCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINC80L7QtNGD0LvQuDogJyIgKyDQvtGI0LjQsdC60LAgKyAiJyIpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICjQvtGC0LrQu9C40LopCiAgICAgICAgewogICAgICAgICAgICDQvtGC0LrQu9C40LooKTsKICAgICAgICB9CiAgICB9KTsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7RhdGA0LDQvdC40YLRjNCS0YHRkSA9IGZ1bmN0aW9uKCkKewogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjRgtGM0JLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMKCk7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC+0YXRgNCw0L3QuNGC0YzQktCR0LDQt9C1KGZ1bmN0aW9uKCl7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjQu9C4LtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfSk7Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgdCh0L7RhdGA0LDQvdC10L3QuNGPKCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7RhdGA0LDQvdC40YLRjC7Qv9C+0LTQv9C40YHQsNGC0Ywo0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtGF0YDQsNC90LjRgtGM0JLRgdGRKTs=",
"муром.лпо_1.0.0",
"0LzRg9GA0L7QvC7RgdC+0LfQtNCw0YLRjNCb0LXQstGD0Y7Qn9GA0LDQstGD0Y7QntCx0LvQsNGB0YLQuCA9IGZ1bmN0aW9uKCkKewogICAgLy8g0JvQtdCy0LDRjyDQvtCx0LvQsNGB0YLRjC4KICAgIHZhciDQu9C+ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQu9C+LmlkPSLQu9C10LLQsNGPLdC+0LHQu9Cw0YHRgtGMIjsKICAgINC70L4uc3R5bGUuY3NzVGV4dCA9CiAgICAgICAgInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA1MCU7IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0LvQvik7CiAgICAKICAgIC8vINCf0YDQsNCy0LDRjyDQvtCx0LvQsNGB0YLRjC4KICAgIHZhciDQv9C+ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQv9C+LmlkPSLQv9GA0LDQstCw0Y8t0L7QsdC70LDRgdGC0YwiOwogICAg0L/Qvi5zdHlsZS5jc3NUZXh0ID0KICAgICAgICAicG9zaXRpb246IGZpeGVkOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiA1MCU7IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0L/Qvik7CiAgICAKICAgIHJldHVybiBb0LvQviwg0L/Qvl07Cn07",
{}
],
[
"муром.модули.скачивание",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQutCw0YfQsNGC0YwgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQodC60LDRh9C40LLQsNC90LjRjyA9IGZ1bmN0aW9uKCkKewogICAg0YHQutCw0YfQuNCy0LDQvdC40LUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQnNC+0LTRg9C70LguYXBwZW5kQ2hpbGQo0YHQutCw0YfQuNCy0LDQvdC40LUpOwogICAg0YHQutCw0YfQuNCy0LDQvdC40LUuaW5uZXJIVE1MID0gItCh0LrQsNGH0LDRgtGMINGE0LDQudC7INGBINC40LfQvNC10L3QtdC90LjRj9C80LgiOwogICAg0YHQutCw0YfQuNCy0LDQvdC40LUub25jbGljayA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC60LDRh9Cw0YLRjC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0KHQutCw0YfQuNCy0LDQvdC40LUgPSDRgdC60LDRh9C40LLQsNC90LjQtTsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC40LzRj9Ck0LDQudC70LAgPSBmdW5jdGlvbigpCnsKICAgIHZhciDQv9GD0YLRjCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKICAgIHZhciDQuNC80Y/QpNCw0LnQu9CwID0g0L/Rg9GC0Ywuc3BsaXQoIi8iKS5wb3AoKTsKICAgINC40LzRj9Ck0LDQudC70LAgPSBkZWNvZGVVUkko0LjQvNGP0KTQsNC50LvQsCk7CiAgICByZXR1cm4g0LjQvNGP0KTQsNC50LvQsDsKfTsKCi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xODE5NzM0MQrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC60LDRh9Cw0YLRjNCk0LDQudC7ID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0YHQvtC00LXRgNC20LjQvNC+0LUgPSBiYXNlNjREZWNvZGUo0LzRg9GA0L7QvC7RhNCw0LnQuy7QvdCw0YfQsNC70L4pOwogICAgZm9yICh2YXIg0L3QvtC80LXRgCBpbiDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuCkKICAgIHsKICAgICAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0L3QvtC80LXRgF07CiAgICAgICAgdmFyINC40LzRjyA9INC80L7QtNGD0LvRjFswXTsKICAgICAgICB2YXIg0LfQvdCw0YfQtdC90LjQtSA9INC80L7QtNGD0LvRjFsxXTsKICAgICAgICB2YXIg0YHRgtCw0YLRg9GBID0gIiI7CiAgICAgICAgaWYgKNC80L7QtNGD0LvRjFsyXSA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgINGB0YLQsNGC0YPRgSA9CmBmYWxzZSwKYDsKICAgICAgICB9CiAgICAgICAg0YHQvtC00LXRgNC20LjQvNC+0LUgKz0gYApbCiJgICsg0LjQvNGPICsgYCIsCiJgICsg0LfQvdCw0YfQtdC90LjQtSArIGAiLApgCisK0YHRgtCw0YLRg9GBCisKYF0sCmAKICAgICAgICA7CiAgICB9CiAgICDRgdC+0LTQtdGA0LbQuNC80L7QtSArPSBiYXNlNjREZWNvZGUo0LzRg9GA0L7QvC7RhNCw0LnQuy7QutC+0L3QtdGGKTsKICAgINGB0L7QtNC10YDQttC40LzQvtC1ID0gYmFzZTY0RW5jb2RlKNGB0L7QtNC10YDQttC40LzQvtC1KTsKICAgIAogICAgdmFyINGB0YHRi9C70YwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICDRgdGB0YvQu9GMLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiICsg0YHQvtC00LXRgNC20LjQvNC+0LUpOwogICAgdmFyINC40LzRj9Ck0LDQudC70LAgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QuNC80Y/QpNCw0LnQu9CwKCk7CiAgICDRgdGB0YvQu9GMLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLCDQuNC80Y/QpNCw0LnQu9CwKTsKICAgINGB0YHRi9C70Ywuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo0YHRgdGL0LvRjCk7CiAgICDRgdGB0YvQu9GMLmNsaWNrKCk7CiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKNGB0YHRi9C70YwpOwp9CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgdCh0LrQsNGH0LjQstCw0L3QuNGPKCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0LrQsNGH0LDRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjCjQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC60LDRh9Cw0YLRjNCk0LDQudC7KTs=",
],
[
"муром.модули.список",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQotCw0LHQu9C40YbRiyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC/0YDQvtC80L7RgtC60LAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgINC/0YDQvtC80L7RgtC60LAuaWQgPSAi0LzRg9GA0L7QvC3QvNC+0LTRg9C70Lgt0L/RgNC+0LzQvtGC0LrQsCI7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0JzQvtC00YPQu9C4LmFwcGVuZENoaWxkKNC/0YDQvtC80L7RgtC60LApOwogICAgdmFyINGC0LDQsdC70LjRhtCwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKICAgINGC0LDQsdC70LjRhtCwLmlkID0gItC80YPRgNC+0Lwt0LzQvtC00YPQu9C4LdGC0LDQsdC70LjRhtCwIjsKICAgINC/0YDQvtC80L7RgtC60LAuYXBwZW5kQ2hpbGQo0YLQsNCx0LvQuNGG0LApOwogICAgCiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0KLQsNCx0LvQuNGG0LAgPSDRgtCw0LHQu9C40YbQsDsKICAgIAogICAgdmFyINCy0LjQtCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKNCy0LjQtCk7CiAgICAvLyBodHRwOi8vanNmaWRkbGUubmV0L1R3ZU5tLwogICAg0LLQuNC0LmlubmVySFRNTCA9CmAKI9C80YPRgNC+0Lwt0LzQvtC00YPQu9C4LdC/0YDQvtC80L7RgtC60LAKewogICAgaGVpZ2h0OiA5LjVlbTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKfQou0LzRg9GA0L7QvC3QvNC+0LTRg9C70Lgt0YLQsNCx0LvQuNGG0LAt0LjQvNGPCnsKICAgIHdpZHRoOiAxMDAlOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9Ci7QvNGD0YDQvtC8LdC80L7QtNGD0LvQuC3RgtCw0LHQu9C40YbQsC3QuNC80Y8t0LLRi9Cx0L7RgAp7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwp9CmA7Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvtGC0L7QsdGA0LDQt9C40YLRjNCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5ID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0YIgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0KLQsNCx0LvQuNGG0LA7CiAgICAvLyDQntGH0LjRgdGC0LjRgtGMINGC0LDQsdC70LjRhtGDLgogICAgd2hpbGUgKNGCLnJvd3MubGVuZ3RoKQogICAgewogICAgICAgINGCLmRlbGV0ZVJvdygwKTsKICAgIH07CiAgICAKICAgIHZhciDQvdC+0LzQtdGA0KDRj9C00LAgPSAwOwogICAgZm9yICh2YXIg0L3QvtC80LXRgNCc0L7QtNGD0LvRjyBpbiDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuCkKICAgIHsKICAgICAgICB2YXIg0YDRj9C0ID0g0YIuaW5zZXJ0Um93KNC90L7QvNC10YDQoNGP0LTQsCsrKTsKICAgICAgICB2YXIg0L3QvtC80LXRgNCv0YfQtdC50LrQuCA9IDA7CiAgICAgICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C90L7QvNC10YDQnNC+0LTRg9C70Y9dOwoKICAgICAgICB2YXIg0YHRgtCw0YLRg9GBID0gIiI7CiAgICAgICAgaWYgKNC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0YLQsNGC0YPRgdCc0L7QtNGD0LvRjyjQvNC+0LTRg9C70YwpKQogICAgICAgIHsKICAgICAgICAgICAgdmFyINGB0YLQsNGC0YPRgSA9ICJjaGVja2VkIjsKICAgICAgICB9CiAgICAgICAgdmFyINCy0LrQuyA9INGA0Y/QtC5pbnNlcnRDZWxsKNC90L7QvNC10YDQr9GH0LXQudC60LgrKyk7CiAgICAgICAg0LLQutC7LmlubmVySFRNTCA9IGA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkIGAgKyDRgdGC0LDRgtGD0YEgKyBgPjwvaW5wdXQ+YDsKICAgICAgICAKICAgICAgICB2YXIg0LjQvNGPID0g0YDRj9C0Lmluc2VydENlbGwo0L3QvtC80LXRgNCv0YfQtdC50LrQuCsrKTsKICAgICAgICDQuNC80Y8uaW5uZXJIVE1MID0g0LzQvtC00YPQu9GMWzBdOwogICAgICAgINC40LzRjy5jbGFzc0xpc3QuYWRkKCLQvNGD0YDQvtC8LdC80L7QtNGD0LvQuC3RgtCw0LHQu9C40YbQsC3QuNC80Y8iKTsKICAgIH0KfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGB0KLQsNCx0LvQuNGG0YsoKTsK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L7RgtC+0LHRgNCw0LfQuNGC0YzQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuSgpOw==",
"муром.редактор_1.0.0",
"0LzRg9GA0L7QvC7Qt9Cw0LPRgNGD0LfQuNGC0YxBQ0UgPSBmdW5jdGlvbigpCnsKICAgIC8vINCg0LXQtNCw0LrRgtC+0YAg0LrQvtC00LAgQUNFLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlLWJ1aWxkcy9ibG9iL21hc3Rlci9zcmMtbWluLW5vY29uZmxpY3QvYWNlLmpzCihmdW5jdGlvbigpe2Z1bmN0aW9uIG8obil7dmFyIGk9ZTtuJiYoZVtuXXx8KGVbbl09e30pLGk9ZVtuXSk7aWYoIWkuZGVmaW5lfHwhaS5kZWZpbmUucGFja2FnZWQpdC5vcmlnaW5hbD1pLmRlZmluZSxpLmRlZmluZT10LGkuZGVmaW5lLnBhY2thZ2VkPSEwO2lmKCFpLnJlcXVpcmV8fCFpLnJlcXVpcmUucGFja2FnZWQpci5vcmlnaW5hbD1pLnJlcXVpcmUsaS5yZXF1aXJlPXIsaS5yZXF1aXJlLnBhY2thZ2VkPSEwfXZhciBBQ0VfTkFNRVNQQUNFID0gImFjZSIsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpOyFlJiZ0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmKGU9d2luZG93KTtpZighQUNFX05BTUVTUEFDRSYmdHlwZW9mIHJlcXVpcmVqcyE9InVuZGVmaW5lZCIpcmV0dXJuO3ZhciB0PWZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyIpe3Qub3JpZ2luYWw/dC5vcmlnaW5hbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGNvbnNvbGUuZXJyb3IoImRyb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRlZmluZSB3YXNuJ3QgYSBzdHJpbmcuIiksY29uc29sZS50cmFjZSgpKTtyZXR1cm59YXJndW1lbnRzLmxlbmd0aD09MiYmKHI9biksdC5tb2R1bGVzW2VdfHwodC5wYXlsb2Fkc1tlXT1yLHQubW9kdWxlc1tlXT1udWxsKX07dC5tb2R1bGVzPXt9LHQucGF5bG9hZHM9e307dmFyIG49ZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIGk9cyhlLHQpO2lmKGkhPXVuZGVmaW5lZClyZXR1cm4gbiYmbigpLGl9ZWxzZSBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBBcnJheV0iKXt2YXIgbz1bXTtmb3IodmFyIHU9MCxhPXQubGVuZ3RoO3U8YTsrK3Upe3ZhciBmPXMoZSx0W3VdKTtpZihmPT11bmRlZmluZWQmJnIub3JpZ2luYWwpcmV0dXJuO28ucHVzaChmKX1yZXR1cm4gbiYmbi5hcHBseShudWxsLG8pfHwhMH19LHI9ZnVuY3Rpb24oZSx0KXt2YXIgaT1uKCIiLGUsdCk7cmV0dXJuIGk9PXVuZGVmaW5lZCYmci5vcmlnaW5hbD9yLm9yaWdpbmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppfSxpPWZ1bmN0aW9uKGUsdCl7aWYodC5pbmRleE9mKCIhIikhPT0tMSl7dmFyIG49dC5zcGxpdCgiISIpO3JldHVybiBpKGUsblswXSkrIiEiK2koZSxuWzFdKX1pZih0LmNoYXJBdCgwKT09Ii4iKXt2YXIgcj1lLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpO3Q9cisiLyIrdDt3aGlsZSh0LmluZGV4T2YoIi4iKSE9PS0xJiZzIT10KXt2YXIgcz10O3Q9dC5yZXBsYWNlKC9cL1wuXC8vLCIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCIiKX19cmV0dXJuIHR9LHM9ZnVuY3Rpb24oZSxyKXtyPWkoZSxyKTt2YXIgcz10Lm1vZHVsZXNbcl07aWYoIXMpe3M9dC5wYXlsb2Fkc1tyXTtpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7dmFyIG89e30sdT17aWQ6cix1cmk6IiIsZXhwb3J0czpvLHBhY2thZ2VkOiEwfSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocixlLHQpfSxmPXMoYSxvLHUpO289Znx8dS5leHBvcnRzLHQubW9kdWxlc1tyXT1vLGRlbGV0ZSB0LnBheWxvYWRzW3JdfXM9dC5tb2R1bGVzW3JdPW98fHN9cmV0dXJuIHN9O28oQUNFX05BTUVTUEFDRSl9KSgpLGFjZS5kZWZpbmUoImFjZS9saWIvcmVnZXhwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUpe3JldHVybihlLmdsb2JhbD8iZyI6IiIpKyhlLmlnbm9yZUNhc2U/ImkiOiIiKSsoZS5tdWx0aWxpbmU/Im0iOiIiKSsoZS5leHRlbmRlZD8ieCI6IiIpKyhlLnN0aWNreT8ieSI6IiIpfWZ1bmN0aW9uIHUoZSx0LG4pe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBlLmluZGV4T2YodCxuKTtmb3IodmFyIHI9bnx8MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX12YXIgcj17ZXhlYzpSZWdFeHAucHJvdG90eXBlLmV4ZWMsdGVzdDpSZWdFeHAucHJvdG90eXBlLnRlc3QsbWF0Y2g6U3RyaW5nLnByb3RvdHlwZS5tYXRjaCxyZXBsYWNlOlN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxzcGxpdDpTdHJpbmcucHJvdG90eXBlLnNwbGl0fSxpPXIuZXhlYy5jYWxsKC8oKT8/LywiIilbMV09PT11bmRlZmluZWQscz1mdW5jdGlvbigpe3ZhciBlPS9eL2c7cmV0dXJuIHIudGVzdC5jYWxsKGUsIiIpLCFlLmxhc3RJbmRleH0oKTtpZihzJiZpKXJldHVybjtSZWdFeHAucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5leGVjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLGE7aWYodHlwZW9mIGU9PSJzdHJpbmciJiZ0KXshaSYmdC5sZW5ndGg+MSYmdSh0LCIiKT4tMSYmKGE9UmVnRXhwKHRoaXMuc291cmNlLHIucmVwbGFjZS5jYWxsKG8odGhpcyksImciLCIiKSksci5yZXBsYWNlLmNhbGwoZS5zbGljZSh0LmluZGV4KSxhLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoLTI7ZSsrKWFyZ3VtZW50c1tlXT09PXVuZGVmaW5lZCYmKHRbZV09dW5kZWZpbmVkKX0pKTtpZih0aGlzLl94cmVnZXhwJiZ0aGlzLl94cmVnZXhwLmNhcHR1cmVOYW1lcylmb3IodmFyIGY9MTtmPHQubGVuZ3RoO2YrKyluPXRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzW2YtMV0sbiYmKHRbbl09dFtmXSk7IXMmJnRoaXMuZ2xvYmFsJiYhdFswXS5sZW5ndGgmJnRoaXMubGFzdEluZGV4PnQuaW5kZXgmJnRoaXMubGFzdEluZGV4LS19cmV0dXJuIHR9LHN8fChSZWdFeHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5leGVjLmNhbGwodGhpcyxlKTtyZXR1cm4gdCYmdGhpcy5nbG9iYWwmJiF0WzBdLmxlbmd0aCYmdGhpcy5sYXN0SW5kZXg+dC5pbmRleCYmdGhpcy5sYXN0SW5kZXgtLSwhIXR9KX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZXM1LXNoaW0iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiB3KGUpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNlbnRpbmVsIix7fSksInNlbnRpbmVsImluIGV9Y2F0Y2godCl7fX1mdW5jdGlvbiBIKGUpe3JldHVybiBlPStlLGUhPT1lP2U9MDplIT09MCYmZSE9PTEvMCYmZSE9PS0xLzAmJihlPShlPjB8fC0xKSpNYXRoLmZsb29yKE1hdGguYWJzKGUpKSksZX1mdW5jdGlvbiBCKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBlPT09bnVsbHx8dD09PSJ1bmRlZmluZWQifHx0PT09ImJvb2xlYW4ifHx0PT09Im51bWJlciJ8fHQ9PT0ic3RyaW5nIn1mdW5jdGlvbiBqKGUpe3ZhciB0LG4scjtpZihCKGUpKXJldHVybiBlO249ZS52YWx1ZU9mO2lmKHR5cGVvZiBuPT0iZnVuY3Rpb24iKXt0PW4uY2FsbChlKTtpZihCKHQpKXJldHVybiB0fXI9ZS50b1N0cmluZztpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dD1yLmNhbGwoZSk7aWYoQih0KSlyZXR1cm4gdH10aHJvdyBuZXcgVHlwZUVycm9yfUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycmLine truncated
{}
],
[
"муром.модули.список.выбор",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YDQsNC90LXQtdCS0YvQsdGA0LDQvdC90YvQudCc0L7QtNGD0LvRjCA9IG51bGw7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDQvdC90YvQudCc0L7QtNGD0LvRjCA9IG51bGw7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRjyA9IG51bGw7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDQu9C40JzQvtC00YPQu9GMID0gbmV3INCj0LLQtdC00L7QvNC40YLQtdC70YwoKTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGD0LvQsNCy0LvQuNCy0LDRgtGM0JLRi9Cx0L7RgNCc0L7QtNGD0LvRjyA9IGZ1bmN0aW9uKCkKeyAgICAKICAgIHZhciDRgiA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQotCw0LHQu9C40YbQsDsKICAgIC8vINCj0YHRgtCw0L3QvtCy0LjRgtGMINGD0LLQtdC00L7QvNC40YLQtdC70Y8uCiAgICBmb3IgKHZhciDQvdC+0LzQtdGAID0gMCwg0YDRj9C0OyDRgNGP0LQgPSDRgi5yb3dzW9C90L7QvNC10YBdOyArK9C90L7QvNC10YApCiAgICB7CiAgICAgICAgdmFyINC40LzRjyA9INGA0Y/QtC5jZWxsc1sxXTsKICAgICAgICDQuNC80Y8ub25jbGljayA9IGZ1bmN0aW9uKCkKICAgICAgICB7CiAgICAgICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGA0LDQvdC10LXQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPQogICAgICAgICAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMOwogICAgICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPSB0aGlzLmlubmVySFRNTDsKICAgICAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L3QvtC80LXRgNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPID0KICAgICAgICAgICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQnNC+0LTRg9C70Y8o0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMKTsKICAgICAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC70LjQnNC+0LTRg9C70Ywu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICAgICAgfTsKICAgIH0KfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQnNC+0LTRg9C70Y8gPSBmdW5jdGlvbijQuNC80Y8pCnsKICAgIGZvciAodmFyINC90L7QvNC10YAgaW4g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgpCiAgICB7CiAgICAgICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C90L7QvNC10YBdOwogICAgICAgIHZhciDQuNC80Y/QnNC+0LTRg9C70Y8gPSDQvNC+0LTRg9C70YxbMF07CiAgICAgICAgaWYgKNC40LzRjyA9PSDQuNC80Y/QnNC+0LTRg9C70Y8pCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g0L3QvtC80LXRgDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHJldHVybiBudWxsOwp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L7RgtC+0LHRgNCw0LfQuNGC0YzQktGL0LHQvtGA0JzQvtC00YPQu9GPID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0YIgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0KLQsNCx0LvQuNGG0LA7CiAgICAvLyDQo9Cx0YDQsNGC0Ywg0L/QvtC00YHQstC10YLQutGDLgogICAgdmFyINC90L7QvNC10YDQoNCw0L3QtdC1ID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L3QvtC80LXRgNCc0L7QtNGD0LvRjyjQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgNCw0L3QtdC10JLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMKTsKICAgIGlmICjQvdC+0LzQtdGA0KDQsNC90LXQtSkKICAgIHsKICAgICAgICB2YXIg0Y/Rh9C10LnQutCwID0g0YIucm93c1vQvdC+0LzQtdGA0KDQsNC90LXQtV0uY2VsbHNbMV07CiAgICAgICAg0Y/Rh9C10LnQutCwLmNsYXNzTGlzdC5yZW1vdmUoItC80YPRgNC+0Lwt0LzQvtC00YPQu9C4LdGC0LDQsdC70LjRhtCwLdC40LzRjy3QstGL0LHQvtGAIik7CiAgICB9CiAgICAvLyDQn9C+0LTRgdCy0LXRgtC40YLRjC4KICAgIHZhciDQvdC+0LzQtdGA0J3Ri9C90YfQtSA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRjzsKICAgIHZhciDRj9GH0LXQudC60LAgPSDRgi5yb3dzW9C90L7QvNC10YDQndGL0L3Rh9C1XS5jZWxsc1sxXTsKICAgINGP0YfQtdC50LrQsC5jbGFzc0xpc3QuYWRkKCLQvNGD0YDQvtC8LdC80L7QtNGD0LvQuC3RgtCw0LHQu9C40YbQsC3QuNC80Y8t0LLRi9Cx0L7RgCIpOwp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YPQu9Cw0LLQu9C40LLQsNGC0YzQktGL0LHQvtGA0JzQvtC00YPQu9GPKCk7CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0LvQuNCc0L7QtNGD0LvRjC7Qv9C+0LTQv9C40YHQsNGC0YwoCiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvtGC0L7QsdGA0LDQt9C40YLRjNCS0YvQsdC+0YDQnNC+0LTRg9C70Y8KKTs=",
],
[
"муром.модули.код-выбранного-модуля",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L7RgtC+0LHRgNCw0LfQuNGC0YzQmtC+0LTQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRjyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRj107CiAgICB2YXIg0LrQvtC0ID0gYmFzZTY0RGVjb2RlKNC80L7QtNGD0LvRjFsxXSk7CiAgICDQvNGD0YDQvtC8LtGA0LXQtNCw0LrRgtC+0YAuc2Vzc2lvbi5zZXRWYWx1ZSjQutC+0LQpOwp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC70LjQnNC+0LTRg9C70Ywu0L/QvtC00L/QuNGB0LDRgtGMKAogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L7RgtC+0LHRgNCw0LfQuNGC0YzQmtC+0LTQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRjwopOw==",
"муром.пу_1.0.0",
"LyoKICoKICog0JLQvdC10YjQvdC40Lkg0LLQuNC0CiAqCiAqLwoKZnVuY3Rpb24g0LfQsNC00LDRgtGM0JLQvdC10YjQvdC40LnQktC40LQoKQp7CiAgICB2YXIg0LLQuNC0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo0LLQuNC0KTsKICAgINCy0LjQtC5pbm5lckhUTUwgPQpgCi7QvNGD0YDQvtC8LdC60L3QvtC/0LrQsAp7CiAgICBwYWRkaW5nOiAwLjVlbSAyZW0gMC41ZW0gMmVtOwogICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTsKICAgIGZsb2F0OiByaWdodDsKICAgIGNvbG9yOiAjMjIyOwogICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzOyAvKiBTYWZhcmkgKi8KICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7Cn0KLtC80YPRgNC+0Lwt0LrQvdC+0L/QutCwOmhvdmVyCnsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMjI7Cn0KLtC80YPRgNC+0Lwt0L7RgtGB0YLRg9C/LdC/0L4t0YHRgtC+0YDQvtC90LDQvAp7CiAgICBtYXJnaW4tbGVmdDogMC41ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtOwp9CmA7Cn0KCi8qCiAqCiAqINCh0L/QuNGB0L7QuiDQvNC+0LTRg9C70LXQuQogKgogKi8KCmZ1bmN0aW9uINCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5KCkKewogICAgdmFyINGPID0gdGhpczsKCiAgICB0aGlzLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBKCk7CiAgICB0aGlzLtC30LDQtNCw0YLRjNCS0LjQtCgpOwogICAgdGhpcy7QstGL0LHRgNCw0LvQuCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CiAgICB0aGlzLtCy0YvQsdGA0LDQu9C4LtC/0L7QtNC/0LjRgdCw0YLRjChmdW5jdGlvbigpewogICAgICAgINGPLtC+0YLQvtCx0YDQsNC30LjRgtGM0JLRi9Cx0L7RgCgpOwogICAgfSk7Cn0K0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGBID0gZnVuY3Rpb24oKQp7CiAgICAvLyDQn9C+0LzQtdGJ0LDQtdC8INGC0LDQsdC70LjRhtGDINCyIGRpdiDQtNC70Y8g0YDQtdCw0LvQuNC30LDRhtC40Lgg0L/RgNC+0LzQvtGC0LrQuC4KICAgIHRoaXMu0LjRhCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy7RgtCw0LHQu9C40YbQsCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICB0aGlzLtC40YQuYXBwZW5kQ2hpbGQodGhpcy7RgtCw0LHQu9C40YbQsCk7Cn07CtCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5LnByb3RvdHlwZS7Qt9Cw0LTQsNGC0YzQktC40LQgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0LjRhC5zdHlsZS5jc3NUZXh0ID0KYApvdmVyZmxvdzogYXV0bzsKaGVpZ2h0OiAxOC41ZW07CmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Ci8qCnBhZGRpbmc6IDAuNWVtOwptYXJnaW46IDAuNWVtOwoqLwpgOwogICAgdGhpcy7RgtCw0LHQu9C40YbQsC5zdHlsZS5jc3NUZXh0ID0KYApjb2xvcjogIzY2NjY2NjsKZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CmN1cnNvcjogZGVmYXVsdDsKYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKYDsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC+0YfQuNGB0YLQuNGC0YwgPSBmdW5jdGlvbigpCnsKICAgIHdoaWxlICh0aGlzLtGC0LDQsdC70LjRhtCwLnJvd3MubGVuZ3RoKQogICAgewogICAgICAgIHRoaXMu0YLQsNCx0LvQuNGG0LAuZGVsZXRlUm93KDApOwogICAgfTsKfTsK0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LkucHJvdG90eXBlLtC00L7QsdCw0LLQuNGC0YzQrdC70LXQvNC10L3RgiA9IGZ1bmN0aW9uKNGB0YLQsNGC0YPRgSwg0LjQvNGPKQp7CiAgICB2YXIg0YHRgtCw0YLRg9GBSFRNTCA9ICIiOwogICAgaWYgKNGB0YLQsNGC0YPRgSkKICAgIHsKICAgICAgICDRgdGC0LDRgtGD0YFIVE1MID0gImNoZWNrZWQiOwogICAgfQoKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLmluc2VydFJvdygpOwogICAgdmFyINGP0YfQtdC50LrQsCA9IDA7CgogICAgdmFyINC90L7QvNC10YAgPSDRgNGP0LQuaW5zZXJ0Q2VsbCjRj9GH0LXQudC60LArKyk7CiAgICDQvdC+0LzQtdGALmlubmVySFRNTCA9IHRoaXMu0YLQsNCx0LvQuNGG0LAucm93cy5sZW5ndGggLSAxOwogICAg0L3QvtC80LXRgC5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyI7CgogICAgdmFyINCy0LrQuyA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINCy0LrQuy5pbm5lckhUTUwgPSBgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZCBgICsg0YHRgtCw0YLRg9GBSFRNTCArIGA+PC9pbnB1dD5gOwogICAgCiAgICB2YXIg0L3QsNC30LLQsNC90LjQtSA9INGA0Y/QtC5pbnNlcnRDZWxsKNGP0YfQtdC50LrQsCsrKTsKICAgINC90LDQt9Cy0LDQvdC40LUuaW5uZXJIVE1MID0g0LjQvNGPOwogICAg0L3QsNC30LLQsNC90LjQtS5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6IDAuNWVtOyB3aWR0aDogMTAwJTsiOwp9OwrQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuS5wcm90b3R5cGUu0L7RgtC+0LHRgNCw0LfQuNGC0YzQodC/0LjRgdC+0LogPSBmdW5jdGlvbijRgdC/0LjRgdC+0LopCnsKICAgIHRoaXMu0L7Rh9C40YHRgtC40YLRjCgpOwogICAgZm9yICh2YXIg0L3QvtC80LXRgCBpbiDRgdC/0LjRgdC+0LopCiAgICB7CiAgICAgICAgdmFyINGN0LvQtdC80LXQvdGCID0g0YHQv9C40YHQvtC6W9C90L7QvNC10YBdOwogICAgICAgIHZhciDRgdGC0LDRgtGD0YEgPSDRjdC70LXQvNC10L3RglswXTsKICAgICAgICB2YXIg0LjQvNGPID0g0Y3Qu9C10LzQtdC90YJbMV07CiAgICAgICAgdGhpcy7QtNC+0LHQsNCy0LjRgtGM0K3Qu9C10LzQtdC90YIo0YHRgtCw0YLRg9GBLCDQuNC80Y8pOwogICAgfQp9OwrQodC/0LjRgdC+0LrQnNC+0LTRg9C70LXQuS5wcm90b3R5cGUu0YPQu9Cw0LLQu9C40LLQsNGC0YzQktGL0LHQvtGA0K3Qu9C10LzQtdC90YLQsCA9IGZ1bmN0aW9uKNC90L7QvNC10YApCnsKICAgIHZhciDRjyA9IHRoaXM7CiAgICAKICAgIHZhciDRgNGP0LQgPSB0aGlzLtGC0LDQsdC70LjRhtCwLnJvd3Nb0L3QvtC80LXRgF0KICAgINGA0Y/QtC5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINGPLtCy0YvQsdC+0YDQoNCw0L3QtdC1ID0g0Y8u0LLRi9Cx0L7RgDsKICAgICAgICDRjy7QstGL0LHQvtGAID0g0L3QvtC80LXRgDsKICAgICAgICDRjy7QstGL0LHRgNCw0LvQuC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07Cn07CtCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5LnByb3RvdHlwZS7Rg9C70LDQstC70LjQstCw0YLRjNCS0YvQsdC+0YAgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMu0LLRi9Cx0L7RgNCg0LDQvdC10LUgPSBudWxsOwogICAgdGhpcy7QstGL0LHQvtGAID0gbnVsbDsKICAgIGZvciAodmFyINC90L7QvNC10YAgPSAwOyDQvdC+0LzQtdGAIDwgdGhpcy7RgtCw0LHQu9C40YbQsC5yb3dzLmxlbmd0aDsgKyvQvdC+0LzQtdGAKQogICAgewogICAgICAgIHRoaXMu0YPQu9Cw0LLQu9C40LLQsNGC0YzQktGL0LHQvtGA0K3Qu9C10LzQtdC90YLQsCjQvdC+0LLine truncated
{"status":true}
],
[
"муром.модули.выбрать-первый-модуль",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNGC0YzQn9C10YDQstGL0LnQnNC+0LTRg9C70YwgPSBmdW5jdGlvbigpCnsKICAgIHZhciDQvNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFswXTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGA0LDQvdC10LXQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70Yw7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPSDQvNC+0LTRg9C70YxbMF07CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvdC+0LzQtdGA0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8gPSAwOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC70LjQnNC+0LTRg9C70Ywu0YPQstC10LTQvtC80LjRgtGMKCk7Cn07CgrQvNGD0YDQvtC8LtGB0YLQsNGA0YIu0L/QvtC00L/QuNGB0LDRgtGMKNC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDRgtGM0J/QtdGA0LLRi9C50JzQvtC00YPQu9GMKTs=",
],
[
"муром.модули.редактирование",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCc0L7QtNGD0LvQuC5hcHBlbmRDaGlsZCjRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1KTsKICAgINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUuaWQgPSAi0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSIKICAgINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUuaW5uZXJIVE1MID0gItCg0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUiOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCg0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUgPSDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1OwogICAgCiAgICB2YXIg0LLQuNC0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo0LLQuNC0KTsKICAgINCy0LjQtC5pbm5lckhUTUwgPQpgCiPRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1CnsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7Cn0KYDsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGB0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjygpOw==",
],
[
"муром.модули.редактирование.имя",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Qv9C10YDQtdC40LzQtdC90L7QstCw0LvQuCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgdCg0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y/QmNC80LXQvdC4ID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0LjQvNGPID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtS5hcHBlbmRDaGlsZCjQuNC80Y8pOwogICAg0LjQvNGPLmlubmVySFRNTCA9CmAKPHRhYmxlIGlkID0gItGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUt0LjQvNGPIj4KICAgIDx0cj4KICAgICAgICA8dGQ+0JjQvNGPOjwvdGQ+CiAgICAgICAgPHRkPjxpbnB1dCBpZCA9ICLQuNC80Y8iPjwvaW5wdXQ+PC90ZD4KICAgICAgICA8dGQ+PGJ1dHRvbiBpZCA9ICLQv9C10YDQtdC40LzQtdC90L7QstCw0YLRjCI+0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Yw8L2J1dHRvbj48L3RkPgogICAgPC90cj4KPC90YWJsZT4KYDsKICAgIHZhciDQstC40LQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCjQstC40LQpOwogICAg0LLQuNC0LmlubmVySFRNTCA9CmAKI9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUt0LjQvNGPCnsKICAgIHdpZHRoOiAxMDAlOwp9CiPQuNC80Y8KewogICAgd2lkdGg6IDEwMCU7Cn0KYDsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQmNC80Y8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi0LjQvNGPIik7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwiKTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjC5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMLtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfTsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC+0YLQvtCx0YDQsNC30LjRgtGM0JjQvNGP0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8gPSBmdW5jdGlvbigpCnsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQmNC80Y8udmFsdWUgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70Yw7Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Qv9C10YDQtdC40LzQtdC90L7QstCw0YLRjNCS0YvQsdGA0LDQvdC90YvQudCc0L7QtNGD0LvRjCA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRj107CiAgICDQvNC+0LTRg9C70YxbMF0gPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0JjQvNGPLnZhbHVlOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC70Lgu0YPQstC10LTQvtC80LjRgtGMKCk7Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgdCg0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y/QmNC80LXQvdC4KCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDQu9C40JzQvtC00YPQu9GMLtC/0L7QtNC/0LjRgdCw0YLRjCgKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC+0YLQvtCx0YDQsNC30LjRgtGM0JjQvNGP0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8KKTsK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywu0L/QvtC00L/QuNGB0LDRgtGMKAogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YzQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwKKTsK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC70Lgu0L/QvtC00L/QuNGB0LDRgtGM0JzQvdC+0LPQvihbCiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvtGC0L7QsdGA0LDQt9C40YLRjNCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5LAogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YPQu9Cw0LLQu9C40LLQsNGC0YzQktGL0LHQvtGA0JzQvtC00YPQu9GPLAogICAgZnVuY3Rpb24oKXsKICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgNCw0L3QtdC10JLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMID0KICAgICAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMOwogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDQvdC90YvQudCc0L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQmNC80Y8udmFsdWU7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC70LjQnNC+0LTRg9C70Ywu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9LApdKTs=",
],
[
"муром.модули.редактирование.статус",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQutC70Y7Rh9C40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC/0LXRgNC10LrQu9GO0YfQuNC70LggPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0KHRgtCw0YLRg9GB0LAgPSBmdW5jdGlvbigpCnsKICAgIHZhciDRgdGC0LDRgtGD0YEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1LmFwcGVuZENoaWxkKNGB0YLQsNGC0YPRgSk7CiAgICDRgdGC0LDRgtGD0YEuaW5uZXJIVE1MID0KYArQodGC0LDRgtGD0YE6IDxzcGFuIGlkID0gItGB0YLQsNGC0YPRgSI+PC9zcGFuPiA8YnV0dG9uIGlkID0gItC/0LXRgNC10LrQu9GO0YfQuNGC0YwiPjwvYnV0dG9uPgpgOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCh0YLQsNGC0YPRgSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCLRgdGC0LDRgtGD0YEiKTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQn9C10YDQtdC60LvRjtGH0LjRgtGMID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoItC/0LXRgNC10LrQu9GO0YfQuNGC0YwiKTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQn9C10YDQtdC60LvRjtGH0LjRgtGMLm9uY2xpY2sgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQutC70Y7Rh9C40YLRjC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH07Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvtGC0L7QsdGA0LDQt9C40YLRjNCh0YLQsNGC0YPRgdCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0LzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70Lhb0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L3QvtC80LXRgNCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPXTsKICAgIHZhciDRgdGC0LDRgtGD0YEgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdGC0LDRgtGD0YHQnNC+0LTRg9C70Y8o0LzQvtC00YPQu9GMKTsKICAgIHZhciDRgtC10LrRgdGC0KHRgtCw0YLRg9GB0LAgPSAn0JLQutC70Y7Rh9C10L3Qvic7CiAgICB2YXIg0YLQtdC60YHRgtCa0L3QvtC/0LrQuCA9ICfQntGC0LrQu9GO0YfQuNGC0YwnOwogICAgaWYgKCHRgdGC0LDRgtGD0YEpCiAgICB7CiAgICAgICAg0YLQtdC60YHRgtCh0YLQsNGC0YPRgdCwID0gJ9Ce0YLQutC70Y7Rh9C10L3Qvic7CiAgICAgICAg0YLQtdC60YHRgtCa0L3QvtC/0LrQuCA9ICfQktC60LvRjtGH0LjRgtGMJzsKICAgIH0KICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0Lmh0bWzQodGC0LDRgtGD0YEuaW5uZXJIVE1MID0g0YLQtdC60YHRgtCh0YLQsNGC0YPRgdCwOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCf0LXRgNC10LrQu9GO0YfQuNGC0YwuaW5uZXJIVE1MID0g0YLQtdC60YHRgtCa0L3QvtC/0LrQuDsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC/0LXRgNC10LrQu9GO0YfQuNGC0YzQodGC0LDRgtGD0YHQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRjyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRj107CiAgICB2YXIg0YHRgtCw0YLRg9GBID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHRgtCw0YLRg9GB0JzQvtC00YPQu9GPKNC80L7QtNGD0LvRjCk7CiAgICDRgdGC0LDRgtGD0YEgPSAh0YHRgtCw0YLRg9GBOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LfQsNC00LDRgtGM0KHRgtCw0YLRg9GB0JzQvtC00YPQu9GPKNC80L7QtNGD0LvRjCwg0YHRgtCw0YLRg9GBKTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC/0LXRgNC10LrQu9GO0YfQuNC70Lgu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICAKICAgIGNvbnNvbGUubG9nKCLRgdGC0LDRgtGD0YEg0L/QvtGB0LvQtTogJyIrINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0YLQsNGC0YPRgdCc0L7QtNGD0LvRjyjQvNC+0LTRg9C70YwpICsgIiciKTsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGB0L7Qt9C00LDRgtGM0JjQvdGC0LXRgNGE0LXQudGB0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRj9Ch0YLQsNGC0YPRgdCwKCk7CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0LvQuNCc0L7QtNGD0LvRjC7Qv9C+0LTQv9C40YHQsNGC0YwoCiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvtGC0L7QsdGA0LDQt9C40YLRjNCh0YLQsNGC0YPRgdCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPCik7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC/0LXRgNC10LrQu9GO0YfQuNGC0Ywu0L/QvtC00L/QuNGB0LDRgtGMKAogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0L/QtdGA0LXQutC70Y7Rh9C40YLRjNCh0YLQsNGC0YPRgdCS0YvQsdGA0LDQvdC90L7Qs9C+0JzQvtC00YPQu9GPCik7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC/0LXRgNC10LrQu9GO0YfQuNC70Lgu0L/QvtC00L/QuNGB0LDRgtGM0JzQvdC+0LPQvihbICAgICAgICAKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC+0YLQvtCx0YDQsNC30LjRgtGM0KHQv9C40YHQvtC60JzQvtC00YPQu9C10LksCiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Rg9C70LDQstC70LjQstCw0YLRjNCS0YvQsdC+0YDQnNC+0LTRg9C70Y8sCiAgICBmdW5jdGlvbigpewogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGA0LDQvdC10LXQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPQogICAgICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70Yw7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCY0LzRjy52YWx1ZTsKICAgICAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0LvQuNCc0L7QtNGD0LvRjC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKICAgIH0sCl0pOw==",
],
[
"муром.модули.добавление",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LTQvtCx0LDQstC40YLRjCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC00L7QsdCw0LLQuNC70LggPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQlNC+0LHQsNCy0LvQtdC90LjRjyA9IGZ1bmN0aW9uKCkKewogICAgdmFyINC00L7QsdCw0LLQu9C10L3QuNC1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0JzQvtC00YPQu9C4LmFwcGVuZENoaWxkKNC00L7QsdCw0LLQu9C10L3QuNC1KTsKICAgINC00L7QsdCw0LLQu9C10L3QuNC1LmlubmVySFRNTCA9ICLQlNC+0LHQsNCy0LjRgtGMINC80L7QtNGD0LvRjCI7CiAgICDQtNC+0LHQsNCy0LvQtdC90LjQtS5vbmNsaWNrID0gZnVuY3Rpb24oKQogICAgewogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC00L7QsdCw0LLQuNGC0Ywu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9OwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCU0L7QsdCw0LLQu9C10L3QuNC1ID0g0LTQvtCx0LDQstC70LXQvdC40LU7Cn07CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QtNC+0LHQsNCy0LjRgtGM0JzQvtC00YPQu9GMID0gZnVuY3Rpb24oKQp7CiAgICB2YXIg0YHQu9GD0YfQsNC50L3QvtC10KfQuNGB0LvQviA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1hdGguZmxvb3IoMTAwMCkpOwogICAgdmFyINC40LzRjyA9ICLQvdC+0LLRi9C5LSIgKyDRgdC70YPRh9Cw0LnQvdC+0LXQp9C40YHQu9C+OyAKICAgIHZhciDQutC+0LQgPQpgCmNvbnNvbGUubG9nKCLQndCQ0JTQniDQlNC+0LHQsNCy0LjRgtGMINC60L7QtCDQsiDQvNC+0LTRg9C70YwgJ2AKKwrQuNC80Y8KKwpgJyIpO2A7CiAgICB2YXIg0LzQvtC00YPQu9GMID0gW9C40LzRjywgYmFzZTY0RW5jb2RlKNC60L7QtCldOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgucHVzaCjQvNC+0LTRg9C70YwpOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LTQvtCx0LDQstC40LvQuC7Rg9Cy0LXQtNC+0LzQuNGC0YwoKTsKfTsKCtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDRgtGM0J/QvtGB0LvQtdC00L3QuNC50JzQvtC00YPQu9GMID0gZnVuY3Rpb24oKQp7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvtGC0L7QsdGA0LDQt9C40YLRjNCh0L/QuNGB0L7QutCc0L7QtNGD0LvQtdC5KCk7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Rg9C70LDQstC70LjQstCw0YLRjNCS0YvQsdC+0YDQnNC+0LTRg9C70Y8oKTsKICAgIHZhciDQvdC+0LzQtdGAID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LgubGVuZ3RoIC0gMTsKICAgIHZhciDQvNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQuFvQvdC+0LzQtdGAXTsKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGA0LDQvdC10LXQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPSDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70Yw7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvdC+0LzQtdGA0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8gPSDQvdC+0LzQtdGAOwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNC90L3Ri9C50JzQvtC00YPQu9GMID0g0LzQvtC00YPQu9GMWzBdOwoKICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtCy0YvQsdGA0LDQu9C40JzQvtC00YPQu9GMLtGD0LLQtdC00L7QvNC40YLRjCgpOwp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQlNC+0LHQsNCy0LvQtdC90LjRjygpOwrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QtNC+0LHQsNCy0LjRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjCjQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QtNC+0LHQsNCy0LjRgtGM0JzQvtC00YPQu9GMKTsK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LTQvtCx0LDQstC40LvQuC7Qv9C+0LTQv9C40YHQsNGC0Ywo0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0LLRi9Cx0YDQsNGC0YzQn9C+0YHQu9C10LTQvdC40LnQnNC+0LTRg9C70YwpOw==",
],
[
"муром.модули.удаление",
"0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YPQtNCw0LvQuNGC0YwgPSBuZXcg0KPQstC10LTQvtC80LjRgtC10LvRjCgpOwrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Rg9C00LDQu9C40LvQuCA9IG5ldyDQo9Cy0LXQtNC+0LzQuNGC0LXQu9GMKCk7CgrQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7RgdC+0LfQtNCw0YLRjNCY0L3RgtC10YDRhNC10LnRgdCj0LTQsNC70LXQvdC40Y8gPSBmdW5jdGlvbigpCnsKICAgIHZhciDRg9C00LDQu9C10L3QuNC1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICDQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC5odG1s0JzQvtC00YPQu9C4LmFwcGVuZENoaWxkKNGD0LTQsNC70LXQvdC40LUpOwogICAg0YPQtNCw0LvQtdC90LjQtS5pbm5lckhUTUwgPSAi0KPQtNCw0LvQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Ri9C5INC80L7QtNGD0LvRjCI7CiAgICDRg9C00LDQu9C10L3QuNC1Lm9uY2xpY2sgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YPQtNCw0LvQuNGC0Ywu0YPQstC10LTQvtC80LjRgtGMKCk7CiAgICB9OwogICAg0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQuaHRtbNCj0LTQsNC70LXQvdC40LUgPSDRg9C00LDQu9C10L3QuNC1Owp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YPQtNCw0LvQuNGC0YzQktGL0LHRgNCw0L3QvdGL0LnQnNC+0LTRg9C70YwgPSBmdW5jdGlvbigpCnsKICAgIC8vINCj0LTQsNC70Y/QtdC8INC70LjRiNGMINCy0YvQutC70Y7Rh9C10L3QvdGL0Lkg0LzQvtC00YPQu9GMLgogICAgdmFyINC80L7QtNGD0LvRjCA9INC80YPRgNC+0Lwu0LzQvtC00YPQu9C4W9C80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtC90L7QvNC10YDQktGL0LHRgNCw0L3QvdC+0LPQvtCc0L7QtNGD0LvRj107CiAgICB2YXIg0YHRgtCw0YLRg9GBID0g0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHRgtCw0YLRg9GB0JzQvtC00YPQu9GPKNC80L7QtNGD0LvRjCk7CiAgICBpZiAo0YHRgtCw0YLRg9GBKQogICAgewogICAgICAgIGFsZXJ0KCLQntCo0JjQkdCa0JAg0KPQtNCw0LvQuNGC0Ywg0LzQvtC20L3QviDQu9C40YjRjCDQstGL0LrQu9GO0YfQtdC90L3Ri9C5INC80L7QtNGD0LvRjCIpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C4LnNwbGljZSjQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QvdC+0LzQtdGA0JLRi9Cx0YDQsNC90L3QvtCz0L7QnNC+0LTRg9C70Y8sIDEpOwogICAgICAgINC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGD0LTQsNC70LjQu9C4LtGD0LLQtdC00L7QvNC40YLRjCgpOwogICAgfQp9OwoK0LzRg9GA0L7QvC7QvNC+0LTRg9C70LXQstC10LQu0YHQvtC30LTQsNGC0YzQmNC90YLQtdGA0YTQtdC50YHQo9C00LDQu9C10L3QuNGPKCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGD0LTQsNC70LjRgtGMLtC/0L7QtNC/0LjRgdCw0YLRjCjQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7Rg9C00LDQu9C40YLRjNCS0YvQsdGA0LDQvdC90YvQudCc0L7QtNGD0LvRjCk7CtC80YPRgNC+0Lwu0LzQvtC00YPQu9C10LLQtdC0LtGD0LTQsNC70LjQu9C4LtC/0L7QtNC/0LjRgdCw0YLRjCjQvNGD0YDQvtC8LtC80L7QtNGD0LvQtdCy0LXQtC7QstGL0LHRgNCw0YLRjNCf0L7RgdC70LXQtNC90LjQudCc0L7QtNGD0LvRjCk7",
],
];
</script>
<script>
муром.модулиПодготовлены = new Уведомитель();
муром.подготовитьМодули = function()
{
localforage.config({ name: "murom" });
localforage.getItem("модули", function(ошибка, модули) {
if (модули)
{
муром.модули = модули;
}
муром.модулиПодготовлены.уведомить();
});
};
муром.модулиЗагружены = new Уведомитель();
муром.загрузитьМодули = function()
{
for (var номер in муром.модули)
Object.defineProperty(murom, "modules", {
get: function()
{
var модуль = муром.модули[номер];
var код = base64Decode(модуль[1]);
var статус = модуль[2];
if (статус == false)
{
console.log("ВНИМАНИЕ Загрузка модуля '" + модуль[0] + "' пропущена, т.к. модуль отключен в настройках");
}
else
{
try
{
eval(код);
}
catch (e)
{
console.log("ОШИБКА Не удалось загрузить модуль '" + модуль[0] + "': '" + e + "'");
}
}
return муром.модули;
},
set: function(значения)
{
муром.модули = значения;
}
муром.модулиЗагружены.уведомить();
}
муром.подготовитьМодули();
муром.модулиПодготовлены.подписать(муром.загрузитьМодули);
муром.модулиЗагружены.подписать(function(){
муром.старт.уведомить();
});
var загрузочныйМодуль = муром.модули[0];
var код = atob(загрузочныйМодуль[1]);
eval(код);
</script>
</body>
</html>
@@ -6,7 +6,7 @@ function добавитьЭкранЗаставки()
заставка.style.cssText = "position: absolute; left: 0; right: 0; top: 0; bottom: 0; pointer-events: none;";
заставка.innerHTML =
`
<h1 id = "заголовок">МУРОМ</h1>
<h1 id = "заголовок">Заставка</h1>
`;
var вид = document.createElement("style");
@@ -18,12 +18,13 @@ function добавитьЭкранЗаставки()
position: absolute;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
}
#заставка
{
opacity: 1;
background-color: grey;
animation: fadeOut 2s ease;
animation: fadeOut 1s ease;
animation-fill-mode: forwards;
}
@keyframes fadeOut
@@ -41,4 +42,5 @@ function добавитьЭкранЗаставки()
};
муром.старт.подписать(добавитьЭкранЗаставки);
муром.пуск.подписать(добавитьЭкранЗаставки);