wisp
Version:
Homoiconic JS with clojure syntax, s-expressions & macros
504 lines • 87.8 kB
JavaScript
{
var _ns_ = {
id: 'wisp.reader',
doc: 'Reader module provides functions for reading text input\n as wisp data structures'
};
var wisp_sequence = require('./sequence');
var list = wisp_sequence.list;
var isList = wisp_sequence.isList;
var count = wisp_sequence.count;
var isEmpty = wisp_sequence.isEmpty;
var first = wisp_sequence.first;
var second = wisp_sequence.second;
var third = wisp_sequence.third;
var rest = wisp_sequence.rest;
var map = wisp_sequence.map;
var vec = wisp_sequence.vec;
var cons = wisp_sequence.cons;
var conj = wisp_sequence.conj;
var rest = wisp_sequence.rest;
var concat = wisp_sequence.concat;
var last = wisp_sequence.last;
var butlast = wisp_sequence.butlast;
var sort = wisp_sequence.sort;
var reduce = wisp_sequence.reduce;
var set = wisp_sequence.set;
var wisp_runtime = require('./runtime');
var isOdd = wisp_runtime.isOdd;
var dictionary = wisp_runtime.dictionary;
var keys = wisp_runtime.keys;
var isNil = wisp_runtime.isNil;
var inc = wisp_runtime.inc;
var dec = wisp_runtime.dec;
var isVector = wisp_runtime.isVector;
var isString = wisp_runtime.isString;
var isNumber = wisp_runtime.isNumber;
var isBoolean = wisp_runtime.isBoolean;
var isObject = wisp_runtime.isObject;
var isDictionary = wisp_runtime.isDictionary;
var rePattern = wisp_runtime.rePattern;
var reMatches = wisp_runtime.reMatches;
var reFind = wisp_runtime.reFind;
var str = wisp_runtime.str;
var subs = wisp_runtime.subs;
var char = wisp_runtime.char;
var vals = wisp_runtime.vals;
var isEqual = wisp_runtime.isEqual;
var wisp_ast = require('./ast');
var isSymbol = wisp_ast.isSymbol;
var symbol = wisp_ast.symbol;
var isKeyword = wisp_ast.isKeyword;
var keyword = wisp_ast.keyword;
var meta = wisp_ast.meta;
var withMeta = wisp_ast.withMeta;
var name = wisp_ast.name;
var gensym = wisp_ast.gensym;
var wisp_string = require('./string');
var split = wisp_string.split;
var join = wisp_string.join;
}
var pushBackReader = exports.pushBackReader = function pushBackReader(source, uri) {
return {
'lines': split(source, '\n'),
'buffer': '',
'uri': uri,
'column': -1,
'line': 0
};
};
var peekChar = exports.peekChar = function peekChar(reader) {
return function () {
var lineø1 = (reader || 0)['lines'][(reader || 0)['line']];
var columnø1 = inc((reader || 0)['column']);
return isNil(lineø1) ? void 0 : lineø1[columnø1] || '\n';
}.call(this);
};
var readChar = exports.readChar = function readChar(reader) {
return function () {
var chø1 = peekChar(reader);
isNewline(peekChar(reader)) ? (function () {
(reader || 0)['line'] = inc((reader || 0)['line']);
return (reader || 0)['column'] = -1;
})() : (reader || 0)['column'] = inc((reader || 0)['column']);
return chø1;
}.call(this);
};
var isNewline = exports.isNewline = function isNewline(ch) {
return '\n' === ch;
};
var isBreakingWhitespace = exports.isBreakingWhitespace = function isBreakingWhitespace(ch) {
return ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r';
};
var isWhitespace = exports.isWhitespace = function isWhitespace(ch) {
return isBreakingWhitespace(ch) || ',' === ch;
};
var isNumeric = exports.isNumeric = function isNumeric(ch) {
return ch === '0' || ch === '1' || ch === '2' || ch === '3' || ch === '4' || ch === '5' || ch === '6' || ch === '7' || ch === '8' || ch === '9';
};
var isCommentPrefix = exports.isCommentPrefix = function isCommentPrefix(ch) {
return ';' === ch;
};
var isNumberLiteral = exports.isNumberLiteral = function isNumberLiteral(reader, initch) {
return isNumeric(initch) || ('+' === initch || '-' === initch) && isNumeric(peekChar(reader));
};
var readerError = exports.readerError = function readerError(reader, message) {
return function () {
var textø1 = '' + message + '\n' + 'line:' + (reader || 0)['line'] + '\n' + 'column:' + (reader || 0)['column'];
var errorø1 = SyntaxError(textø1, (reader || 0)['uri']);
errorø1.line = (reader || 0)['line'];
errorø1.column = (reader || 0)['column'];
errorø1.uri = (reader || 0)['uri'];
return (function () {
throw errorø1;
})();
}.call(this);
};
var isMacroTerminating = exports.isMacroTerminating = function isMacroTerminating(ch) {
return !(ch === '#') && !(ch === '\'') && !(ch === ':') && macros(ch);
};
var readToken = exports.readToken = function readToken(reader, initch) {
return function loop() {
var recur = loop;
var bufferø1 = initch;
var chø1 = peekChar(reader);
do {
recur = isNil(chø1) || isWhitespace(chø1) || isMacroTerminating(chø1) ? bufferø1 : (loop[0] = '' + bufferø1 + readChar(reader), loop[1] = peekChar(reader), loop);
} while (bufferø1 = loop[0], chø1 = loop[1], recur === loop);
return recur;
}.call(this);
};
var skipLine = exports.skipLine = function skipLine(reader, _) {
return function loop() {
var recur = loop;
do {
recur = function () {
var chø1 = readChar(reader);
return chø1 === '\n' || chø1 === '\r' || isNil(chø1) ? reader : (loop);
}.call(this);
} while (recur === loop);
return recur;
}.call(this);
};
var intPattern = exports.intPattern = rePattern('^([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)(N)?$');
var ratioPattern = exports.ratioPattern = rePattern('([-+]?[0-9]+)/([0-9]+)');
var floatPattern = exports.floatPattern = rePattern('([-+]?[0-9]+(\\.[0-9]*)?([eE][-+]?[0-9]+)?)(M)?');
var matchInt = exports.matchInt = function matchInt(s) {
return function () {
var groupsø1 = reFind(intPattern, s);
var group3ø1 = groupsø1[2];
return !(isNil(group3ø1) || count(group3ø1) < 1) ? 0 : function () {
var negateø1 = '-' === groupsø1[1] ? -1 : 1;
var aø1 = groupsø1[3] ? [
groupsø1[3],
10
] : groupsø1[4] ? [
groupsø1[4],
16
] : groupsø1[5] ? [
groupsø1[5],
8
] : groupsø1[7] ? [
groupsø1[7],
parseInt(groupsø1[7])
] : 'else' ? [
void 0,
void 0
] : void 0;
var nø1 = aø1[0];
var radixø1 = aø1[1];
return isNil(nø1) ? void 0 : negateø1 * parseInt(nø1, radixø1);
}.call(this);
}.call(this);
};
var matchRatio = exports.matchRatio = function matchRatio(s) {
return function () {
var groupsø1 = reFind(ratioPattern, s);
var numinatorø1 = groupsø1[1];
var denominatorø1 = groupsø1[2];
return parseInt(numinatorø1) / parseInt(denominatorø1);
}.call(this);
};
var matchFloat = exports.matchFloat = function matchFloat(s) {
return parseFloat(s);
};
var matchNumber = exports.matchNumber = function matchNumber(s) {
return reMatches(intPattern, s) ? matchInt(s) : reMatches(ratioPattern, s) ? matchRatio(s) : reMatches(floatPattern, s) ? matchFloat(s) : void 0;
};
var escapeCharMap = exports.escapeCharMap = function escapeCharMap(c) {
return c === 't' ? '\t' : c === 'r' ? '\r' : c === 'n' ? '\n' : c === '\\' ? '\\' : c === '"' ? '"' : c === 'b' ? '\b' : c === 'f' ? '\f' : 'else' ? void 0 : void 0;
};
var read2Chars = exports.read2Chars = function read2Chars(reader) {
return '' + readChar(reader) + readChar(reader);
};
var read4Chars = exports.read4Chars = function read4Chars(reader) {
return '' + readChar(reader) + readChar(reader) + readChar(reader) + readChar(reader);
};
var unicode2Pattern = exports.unicode2Pattern = rePattern('[0-9A-Fa-f]{2}');
var unicode4Pattern = exports.unicode4Pattern = rePattern('[0-9A-Fa-f]{4}');
var validateUnicodeEscape = exports.validateUnicodeEscape = function validateUnicodeEscape(unicodePattern, reader, escapeChar, unicodeStr) {
return reMatches(unicodePattern, unicodeStr) ? unicodeStr : readerError(reader, '' + 'Unexpected unicode escape ' + '\\' + escapeChar + unicodeStr);
};
var makeUnicodeChar = exports.makeUnicodeChar = function makeUnicodeChar(codeStr, base) {
return function () {
var baseø2 = base || 16;
var codeø1 = parseInt(codeStr, baseø2);
return char(codeø1);
}.call(this);
};
var escapeChar = exports.escapeChar = function escapeChar(buffer, reader) {
return function () {
var chø1 = readChar(reader);
var mapresultø1 = escapeCharMap(chø1);
return mapresultø1 ? mapresultø1 : chø1 === 'x' ? makeUnicodeChar(validateUnicodeEscape(unicode2Pattern, reader, chø1, read2Chars(reader))) : chø1 === 'u' ? makeUnicodeChar(validateUnicodeEscape(unicode4Pattern, reader, chø1, read4Chars(reader))) : isNumeric(chø1) ? char(chø1) : 'else' ? readerError(reader, '' + 'Unexpected unicode escape ' + '\\' + chø1) : void 0;
}.call(this);
};
var readPast = exports.readPast = function readPast(predicate, reader) {
return function loop() {
var recur = loop;
var _ø1 = void 0;
do {
recur = predicate(peekChar(reader)) ? (loop[0] = readChar(reader), loop) : peekChar(reader);
} while (_ø1 = loop[0], recur === loop);
return recur;
}.call(this);
};
var readDelimitedList = exports.readDelimitedList = function readDelimitedList(delim, reader, isRecursive) {
return function loop() {
var recur = loop;
var formsø1 = [];
do {
recur = function () {
var _ø1 = readPast(isWhitespace, reader);
var chø1 = readChar(reader);
!chø1 ? readerError(reader, 'EOF') : void 0;
return delim === chø1 ? formsø1 : function () {
var formø1 = readForm(reader, chø1);
return loop[0] = formø1 === reader ? formsø1 : conj(formsø1, formø1), loop;
}.call(this);
}.call(this);
} while (formsø1 = loop[0], recur === loop);
return recur;
}.call(this);
};
var notImplemented = exports.notImplemented = function notImplemented(reader, ch) {
return readerError(reader, '' + 'Reader for ' + ch + ' not implemented yet');
};
var readDispatch = exports.readDispatch = function readDispatch(reader, _) {
return function () {
var chø1 = readChar(reader);
var dmø1 = dispatchMacros(chø1);
return dmø1 ? dmø1(reader, _) : function () {
var objectø1 = maybeReadTaggedType(reader, chø1);
return objectø1 ? objectø1 : readerError(reader, 'No dispatch macro for ', chø1);
}.call(this);
}.call(this);
};
var readUnmatchedDelimiter = exports.readUnmatchedDelimiter = function readUnmatchedDelimiter(rdr, ch) {
return readerError(rdr, 'Unmatched delimiter ', ch);
};
var readList = exports.readList = function readList(reader, _) {
return function () {
var formø1 = readDelimitedList(')', reader, true);
return withMeta(list.apply(void 0, formø1), meta(formø1));
}.call(this);
};
var readComment = exports.readComment = function readComment(reader, _) {
return function loop() {
var recur = loop;
var bufferø1 = '';
var chø1 = readChar(reader);
do {
recur = isNil(chø1) || '\n' === chø1 ? reader || list(symbol(void 0, 'comment'), bufferø1) : '\\' === chø1 ? (loop[0] = '' + bufferø1 + escapeChar(bufferø1, reader), loop[1] = readChar(reader), loop) : 'else' ? (loop[0] = '' + bufferø1 + chø1, loop[1] = readChar(reader), loop) : void 0;
} while (bufferø1 = loop[0], chø1 = loop[1], recur === loop);
return recur;
}.call(this);
};
var readVector = exports.readVector = function readVector(reader) {
return readDelimitedList(']', reader, true);
};
var readMap = exports.readMap = function readMap(reader) {
return function () {
var formø1 = readDelimitedList('}', reader, true);
return isOdd(count(formø1)) ? readerError(reader, 'Map literal must contain an even number of forms') : withMeta(dictionary.apply(void 0, formø1), meta(formø1));
}.call(this);
};
var readSet = exports.readSet = function readSet(reader, _) {
return function () {
var formø1 = readDelimitedList('}', reader, true);
return withMeta(concat([symbol(void 0, 'set')], formø1), meta(formø1));
}.call(this);
};
var readNumber = exports.readNumber = function readNumber(reader, initch) {
return function loop() {
var recur = loop;
var bufferø1 = initch;
var chø1 = peekChar(reader);
do {
recur = isNil(chø1) || isWhitespace(chø1) || macros(chø1) ? (function () {
var match = matchNumber(bufferø1);
return isNil(match) ? readerError(reader, 'Invalid number format [', bufferø1, ']') : new Number(match);
})() : (loop[0] = '' + bufferø1 + readChar(reader), loop[1] = peekChar(reader), loop);
} while (bufferø1 = loop[0], chø1 = loop[1], recur === loop);
return recur;
}.call(this);
};
var readString = exports.readString = function readString(reader) {
return function loop() {
var recur = loop;
var bufferø1 = '';
var chø1 = readChar(reader);
do {
recur = isNil(chø1) ? readerError(reader, 'EOF while reading string') : '\\' === chø1 ? (loop[0] = '' + bufferø1 + escapeChar(bufferø1, reader), loop[1] = readChar(reader), loop) : '"' === chø1 ? new String(bufferø1) : 'default' ? (loop[0] = '' + bufferø1 + chø1, loop[1] = readChar(reader), loop) : void 0;
} while (bufferø1 = loop[0], chø1 = loop[1], recur === loop);
return recur;
}.call(this);
};
var readCharacter = exports.readCharacter = function readCharacter(reader) {
return new String(readChar(reader));
};
var readUnquote = exports.readUnquote = function readUnquote(reader) {
return function () {
var chø1 = peekChar(reader);
return !chø1 ? readerError(reader, 'EOF while reading character') : chø1 === '@' ? (function () {
readChar(reader);
return list(symbol(void 0, 'unquote-splicing'), read(reader, true, void 0, true));
})() : list(symbol(void 0, 'unquote'), read(reader, true, void 0, true));
}.call(this);
};
var specialSymbols = exports.specialSymbols = function specialSymbols(text, notFound) {
return text === 'nil' ? void 0 : text === 'true' ? true : text === 'false' ? false : 'else' ? notFound : void 0;
};
var readSymbol = exports.readSymbol = function readSymbol(reader, initch) {
return function () {
var tokenø1 = readToken(reader, initch);
var partsø1 = split(tokenø1, '/');
var hasNsø1 = count(partsø1) > 1 && count(tokenø1) > 1;
var nsø1 = first(partsø1);
var nameø1 = join('/', rest(partsø1));
return hasNsø1 ? symbol(nsø1, nameø1) : specialSymbols(tokenø1, symbol(tokenø1));
}.call(this);
};
var readKeyword = exports.readKeyword = function readKeyword(reader, initch) {
return function () {
var tokenø1 = readToken(reader, readChar(reader));
var partsø1 = split(tokenø1, '/');
var nameø1 = last(partsø1);
var nsø1 = count(partsø1) > 1 ? join('/', butlast(partsø1)) : void 0;
var issueø1 = last(nsø1) === ':' ? 'namespace can\'t ends with ":"' : last(nameø1) === ':' ? 'name can\'t end with ":"' : last(nameø1) === '/' ? 'name can\'t end with "/"' : count(split(tokenø1, '::')) > 1 ? 'name can\'t contain "::"' : void 0;
return issueø1 ? readerError(reader, 'Invalid token (', issueø1, '): ', tokenø1) : !nsø1 && first(nameø1) === ':' ? keyword(rest(nameø1)) : keyword(nsø1, nameø1);
}.call(this);
};
var desugarMeta = exports.desugarMeta = function desugarMeta(form) {
return isKeyword(form) ? dictionary(name(form), true) : isSymbol(form) ? { 'tag': form } : isString(form) ? { 'tag': form } : isDictionary(form) ? reduce(function (result, pair) {
(result || 0)[name(first(pair))] = second(pair);
return result;
}, {}, form) : 'else' ? form : void 0;
};
var wrappingReader = exports.wrappingReader = function wrappingReader(prefix) {
return function (reader) {
return list(prefix, read(reader, true, void 0, true));
};
};
var throwingReader = exports.throwingReader = function throwingReader(msg) {
return function (reader) {
return readerError(reader, msg);
};
};
var readMeta = exports.readMeta = function readMeta(reader, _) {
return function () {
var metadataø1 = desugarMeta(read(reader, true, void 0, true));
!isDictionary(metadataø1) ? readerError(reader, 'Metadata must be Symbol, Keyword, String or Map') : void 0;
return function () {
var formø1 = read(reader, true, void 0, true);
return isObject(formø1) ? withMeta(formø1, conj(metadataø1, meta(formø1))) : formø1;
}.call(this);
}.call(this);
};
var readRegex = exports.readRegex = function readRegex(reader) {
return function loop() {
var recur = loop;
var bufferø1 = '';
var chø1 = readChar(reader);
do {
recur = isNil(chø1) ? readerError(reader, 'EOF while reading string') : '\\' === chø1 ? (loop[0] = '' + bufferø1 + chø1 + readChar(reader), loop[1] = readChar(reader), loop) : '"' === chø1 ? rePattern(bufferø1) : 'default' ? (loop[0] = '' + bufferø1 + chø1, loop[1] = readChar(reader), loop) : void 0;
} while (bufferø1 = loop[0], chø1 = loop[1], recur === loop);
return recur;
}.call(this);
};
var readParam = exports.readParam = function readParam(reader, initch) {
return function () {
var formø1 = readSymbol(reader, initch);
return isEqual(formø1, symbol('%')) ? symbol('%1') : formø1;
}.call(this);
};
var isParam = exports.isParam = function isParam(form) {
return isSymbol(form) && '%' === first(name(form));
};
var lambdaParamsHash = exports.lambdaParamsHash = function lambdaParamsHash(form) {
return isParam(form) ? dictionary(form, form) : isDictionary(form) || isVector(form) || isList(form) ? conj.apply(void 0, map(lambdaParamsHash, vec(form))) : 'else' ? {} : void 0;
};
var lambdaParams = exports.lambdaParams = function lambdaParams(body) {
return function () {
var namesø1 = sort(vals(lambdaParamsHash(body)));
var variadicø1 = isEqual(first(namesø1), symbol('%&'));
var nø1 = variadicø1 && count(namesø1) === 1 ? 0 : count(namesø1) === 0 ? 0 : 'else' ? parseInt(rest(name(last(namesø1)))) : void 0;
var paramsø1 = function loop() {
var recur = loop;
var namesø2 = [];
var iø1 = 1;
do {
recur = iø1 <= nø1 ? (loop[0] = conj(namesø2, symbol('' + '%' + iø1)), loop[1] = inc(iø1), loop) : namesø2;
} while (namesø2 = loop[0], iø1 = loop[1], recur === loop);
return recur;
}.call(this);
return variadicø1 ? conj(paramsø1, symbol(void 0, '&'), symbol(void 0, '%&')) : namesø1;
}.call(this);
};
var readLambda = exports.readLambda = function readLambda(reader) {
return function () {
var bodyø1 = readList(reader);
return list(symbol(void 0, 'fn'), lambdaParams(bodyø1), bodyø1);
}.call(this);
};
var readDiscard = exports.readDiscard = function readDiscard(reader, _) {
read(reader, true, void 0, true);
return reader;
};
var macros = exports.macros = function macros(c) {
return c === '"' ? readString : c === '\\' ? readCharacter : c === ':' ? readKeyword : c === ';' ? readComment : c === '\'' ? wrappingReader(symbol(void 0, 'quote')) : c === '@' ? wrappingReader(symbol(void 0, 'deref')) : c === '^' ? readMeta : c === '`' ? wrappingReader(symbol(void 0, 'syntax-quote')) : c === '~' ? readUnquote : c === '(' ? readList : c === ')' ? readUnmatchedDelimiter : c === '[' ? readVector : c === ']' ? readUnmatchedDelimiter : c === '{' ? readMap : c === '}' ? readUnmatchedDelimiter : c === '%' ? readParam : c === '#' ? readDispatch : 'else' ? void 0 : void 0;
};
var dispatchMacros = exports.dispatchMacros = function dispatchMacros(s) {
return s === '{' ? readSet : s === '(' ? readLambda : s === '<' ? throwingReader('Unreadable form') : s === '"' ? readRegex : s === '!' ? readComment : s === '_' ? readDiscard : 'else' ? void 0 : void 0;
};
var readForm = exports.readForm = function readForm(reader, ch) {
return function () {
var startø1 = {
'line': (reader || 0)['line'],
'column': (reader || 0)['column']
};
var readMacroø1 = macros(ch);
var formø1 = readMacroø1 ? readMacroø1(reader, ch) : isNumberLiteral(reader, ch) ? readNumber(reader, ch) : 'else' ? readSymbol(reader, ch) : void 0;
var endø1 = {
'line': (reader || 0)['line'],
'column': inc((reader || 0)['column'])
};
var locationø1 = {
'uri': (reader || 0)['uri'],
'start': startø1,
'end': endø1
};
return formø1 === reader ? formø1 : !(isBoolean(formø1) || isNil(formø1) || isKeyword(formø1)) ? withMeta(formø1, conj(locationø1, meta(formø1))) : 'else' ? formø1 : void 0;
}.call(this);
};
var read = exports.read = function read(reader, eofIsError, sentinel, isRecursive) {
return function loop() {
var recur = loop;
do {
recur = function () {
var chø1 = readChar(reader);
var formø1 = isNil(chø1) ? eofIsError ? readerError(reader, 'EOF') : sentinel : isWhitespace(chø1) ? reader : isCommentPrefix(chø1) ? read(readComment(reader, chø1), eofIsError, sentinel, isRecursive) : 'else' ? readForm(reader, chø1) : void 0;
return formø1 === reader ? (loop) : formø1;
}.call(this);
} while (recur === loop);
return recur;
}.call(this);
};
var read_ = exports.read_ = function read_(source, uri) {
return function () {
var readerø1 = pushBackReader(source, uri);
var eofø1 = gensym();
return function loop() {
var recur = loop;
var formsø1 = [];
var formø1 = read(readerø1, false, eofø1, false);
do {
recur = formø1 === eofø1 ? formsø1 : (loop[0] = conj(formsø1, formø1), loop[1] = read(readerø1, false, eofø1, false), loop);
} while (formsø1 = loop[0], formø1 = loop[1], recur === loop);
return recur;
}.call(this);
}.call(this);
};
var readFromString = exports.readFromString = function readFromString(source, uri) {
return function () {
var readerø1 = pushBackReader(source, uri);
return read(readerø1, true, void 0, false);
}.call(this);
};
var readUuid = function readUuid(uuid) {
return isString(uuid) ? list.apply(void 0, [symbol(void 0, 'UUID.')].concat([uuid])) : readerError(void 0, 'UUID literal expects a string as its representation.');
};
var readQueue = function readQueue(items) {
return isVector(items) ? list.apply(void 0, [symbol(void 0, 'PersistentQueue.')].concat([items])) : readerError(void 0, 'Queue literal expects a vector for its elements.');
};
var readDate = function readDate(date) {
return isString(date) ? list.apply(void 0, [symbol(void 0, 'Date.')].concat([date])) : readerError(void 0, 'Date literal expects a string as its representation.');
};
var __tagTable__ = exports.__tagTable__ = dictionary('uuid', readUuid, 'queue', readQueue, 'inst', readDate);
var maybeReadTaggedType = exports.maybeReadTaggedType = function maybeReadTaggedType(reader, initch) {
return function () {
var tagø1 = readSymbol(reader, initch);
var pfnø1 = (__tagTable__ || 0)[name(tagø1)];
return pfnø1 ? pfnø1(read(reader, true, void 0, false)) : readerError(reader, '' + 'Could not find tag parser for ' + name(tagø1) + ' in ' + ('' + keys(__tagTable__)));
}.call(this);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFub255bW91cy53aXNwIl0sIm5hbWVzIjpbIl9uc18iLCJpZCIsImRvYyIsImxpc3QiLCJpc0xpc3QiLCJjb3VudCIsImlzRW1wdHkiLCJmaXJzdCIsInNlY29uZCIsInRoaXJkIiwicmVzdCIsIm1hcCIsInZlYyIsImNvbnMiLCJjb25qIiwiY29uY2F0IiwibGFzdCIsImJ1dGxhc3QiLCJzb3J0IiwicmVkdWNlIiwic2V0IiwiaXNPZGQiLCJkaWN0aW9uYXJ5Iiwia2V5cyIsImlzTmlsIiwiaW5jIiwiZGVjIiwiaXNWZWN0b3IiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiaXNPYmplY3QiLCJpc0RpY3Rpb25hcnkiLCJyZVBhdHRlcm4iLCJyZU1hdGNoZXMiLCJyZUZpbmQiLCJzdHIiLCJzdWJzIiwiY2hhciIsInZhbHMiLCJpc0VxdWFsIiwiaXNTeW1ib2wiLCJzeW1ib2wiLCJpc0tleXdvcmQiLCJrZXl3b3JkIiwibWV0YSIsIndpdGhNZXRhIiwibmFtZSIsImdlbnN5bSIsInNwbGl0Iiwiam9pbiIsInB1c2hCYWNrUmVhZGVyIiwiZXhwb3J0cyIsInNvdXJjZSIsInVyaSIsInBlZWtDaGFyIiwicmVhZGVyIiwibGluZcO4MSIsImNvbHVtbsO4MSIsInJlYWRDaGFyIiwiY2jDuDEiLCJpc05ld2xpbmUiLCJjaCIsImlzQnJlYWtpbmdXaGl0ZXNwYWNlIiwiaXNXaGl0ZXNwYWNlIiwiaXNOdW1lcmljIiwiaXNDb21tZW50UHJlZml4IiwiaXNOdW1iZXJMaXRlcmFsIiwiaW5pdGNoIiwicmVhZGVyRXJyb3IiLCJtZXNzYWdlIiwidGV4dMO4MSIsImVycm9yw7gxIiwiU3ludGF4RXJyb3IiLCJsaW5lIiwiY29sdW1uIiwiaXNNYWNyb1Rlcm1pbmF0aW5nIiwibWFjcm9zIiwicmVhZFRva2VuIiwiYnVmZmVyw7gxIiwic2tpcExpbmUiLCJfIiwiaW50UGF0dGVybiIsInJhdGlvUGF0dGVybiIsImZsb2F0UGF0dGVybiIsIm1hdGNoSW50IiwicyIsImdyb3Vwc8O4MSIsImdyb3VwM8O4MSIsIm5lZ2F0ZcO4MSIsImHDuDEiLCJwYXJzZUludCIsIm7DuDEiLCJyYWRpeMO4MSIsIm1hdGNoUmF0aW8iLCJudW1pbmF0b3LDuDEiLCJkZW5vbWluYXRvcsO4MSIsIm1hdGNoRmxvYXQiLCJwYXJzZUZsb2F0IiwibWF0Y2hOdW1iZXIiLCJlc2NhcGVDaGFyTWFwIiwiYyIsInJlYWQyQ2hhcnMiLCJyZWFkNENoYXJzIiwidW5pY29kZTJQYXR0ZXJuIiwidW5pY29kZTRQYXR0ZXJuIiwidmFsaWRhdGVVbmljb2RlRXNjYXBlIiwidW5pY29kZVBhdHRlcm4iLCJlc2NhcGVDaGFyIiwidW5pY29kZVN0ciIsIm1ha2VVbmljb2RlQ2hhciIsImNvZGVTdHIiLCJiYXNlIiwiYmFzZcO4MiIsImNvZGXDuDEiLCJidWZmZXIiLCJtYXByZXN1bHTDuDEiLCJyZWFkUGFzdCIsInByZWRpY2F0ZSIsIl/DuDEiLCJyZWFkRGVsaW1pdGVkTGlzdCIsImRlbGltIiwiaXNSZWN1cnNpdmUiLCJmb3Jtc8O4MSIsImZvcm3DuDEiLCJyZWFkRm9ybSIsIm5vdEltcGxlbWVudGVkIiwicmVhZERpc3BhdGNoIiwiZG3DuDEiLCJkaXNwYXRjaE1hY3JvcyIsIm9iamVjdMO4MSIsIm1heWJlUmVhZFRhZ2dlZFR5cGUiLCJyZWFkVW5tYXRjaGVkRGVsaW1pdGVyIiwicmRyIiwicmVhZExpc3QiLCJyZWFkQ29tbWVudCIsInJlYWRWZWN0b3IiLCJyZWFkTWFwIiwicmVhZFNldCIsInJlYWROdW1iZXIiLCJtYXRjaCIsInJlYWRTdHJpbmciLCJyZWFkQ2hhcmFjdGVyIiwicmVhZFVucXVvdGUiLCJyZWFkIiwic3BlY2lhbFN5bWJvbHMiLCJ0ZXh0Iiwibm90Rm91bmQiLCJyZWFkU3ltYm9sIiwidG9rZW7DuDEiLCJwYXJ0c8O4MSIsImhhc05zw7gxIiwibnPDuDEiLCJuYW1lw7gxIiwicmVhZEtleXdvcmQiLCJpc3N1ZcO4MSIsImRlc3VnYXJNZXRhIiwiZm9ybSIsInJlc3VsdCIsInBhaXIiLCJ3cmFwcGluZ1JlYWRlciIsInByZWZpeCIsInRocm93aW5nUmVhZGVyIiwibXNnIiwicmVhZE1ldGEiLCJtZXRhZGF0YcO4MSIsInJlYWRSZWdleCIsInJlYWRQYXJhbSIsImlzUGFyYW0iLCJsYW1iZGFQYXJhbXNIYXNoIiwibGFtYmRhUGFyYW1zIiwiYm9keSIsIm5hbWVzw7gxIiwidmFyaWFkaWPDuDEiLCJwYXJhbXPDuDEiLCJuYW1lc8O4MiIsImnDuDEiLCJyZWFkTGFtYmRhIiwiYm9kecO4MSIsInJlYWREaXNjYXJkIiwic3RhcnTDuDEiLCJyZWFkTWFjcm/DuDEiLCJlbmTDuDEiLCJsb2NhdGlvbsO4MSIsImVvZklzRXJyb3IiLCJzZW50aW5lbCIsInJlYWRfIiwicmVhZGVyw7gxIiwiZW9mw7gxIiwicmVhZEZyb21TdHJpbmciLCJyZWFkVXVpZCIsInV1aWQiLCJyZWFkUXVldWUiLCJpdGVtcyIsInJlYWREYXRlIiwiZGF0ZSIsIl9fdGFnVGFibGVfXyIsInRhZ8O4MSIsInBmbsO4MSJdLCJtYXBwaW5ncyI6IjtJQUFBLElBQUNBLEksR0FBRDtBQUFBLFlBQUFDLEUsRUFBSSxhQUFKO0FBQUEsWUFBQUMsRyxFQUNFLG9GQURGO0FBQUEsVTs7UUFHbUNDLElBQUEsRyxjQUFBQSxJO1FBQUtDLE1BQUEsRyxjQUFBQSxNO1FBQU1DLEtBQUEsRyxjQUFBQSxLO1FBQU1DLE9BQUEsRyxjQUFBQSxPO1FBQU9DLEtBQUEsRyxjQUFBQSxLO1FBQU1DLE1BQUEsRyxjQUFBQSxNO1FBQU9DLEtBQUEsRyxjQUFBQSxLO1FBQ3JDQyxJQUFBLEcsY0FBQUEsSTtRQUFLQyxHQUFBLEcsY0FBQUEsRztRQUFJQyxHQUFBLEcsY0FBQUEsRztRQUFJQyxJQUFBLEcsY0FBQUEsSTtRQUFLQyxJQUFBLEcsY0FBQUEsSTtRQUFLSixJQUFBLEcsY0FBQUEsSTtRQUFLSyxNQUFBLEcsY0FBQUEsTTtRQUFPQyxJQUFBLEcsY0FBQUEsSTtRQUNuQ0MsT0FBQSxHLGNBQUFBLE87UUFBUUMsSUFBQSxHLGNBQUFB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