UNPKG

wisp

Version:

Homoiconic JS with clojure syntax, s-expressions & macros

668 lines 104 kB
{ var _ns_ = { id: 'wisp.analyzer', doc: void 0 }; var wisp_ast = require('./ast'); var meta = wisp_ast.meta; var withMeta = wisp_ast.withMeta; var isSymbol = wisp_ast.isSymbol; var isKeyword = wisp_ast.isKeyword; var isQuote = wisp_ast.isQuote; var symbol = wisp_ast.symbol; var namespace = wisp_ast.namespace; var name = wisp_ast.name; var prStr = wisp_ast.prStr; var isUnquote = wisp_ast.isUnquote; var isUnquoteSplicing = wisp_ast.isUnquoteSplicing; var wisp_sequence = require('./sequence'); var isList = wisp_sequence.isList; var list = wisp_sequence.list; var conj = wisp_sequence.conj; var partition = wisp_sequence.partition; var seq = wisp_sequence.seq; var isEmpty = wisp_sequence.isEmpty; var map = wisp_sequence.map; var vec = wisp_sequence.vec; var isEvery = wisp_sequence.isEvery; var concat = wisp_sequence.concat; var first = wisp_sequence.first; var second = wisp_sequence.second; var third = wisp_sequence.third; var rest = wisp_sequence.rest; var last = wisp_sequence.last; var butlast = wisp_sequence.butlast; var interleave = wisp_sequence.interleave; var cons = wisp_sequence.cons; var count = wisp_sequence.count; var some = wisp_sequence.some; var assoc = wisp_sequence.assoc; var reduce = wisp_sequence.reduce; var filter = wisp_sequence.filter; var isSeq = wisp_sequence.isSeq; var wisp_runtime = require('./runtime'); var isNil = wisp_runtime.isNil; var isDictionary = wisp_runtime.isDictionary; var isVector = wisp_runtime.isVector; var keys = wisp_runtime.keys; var vals = wisp_runtime.vals; var isString = wisp_runtime.isString; var isNumber = wisp_runtime.isNumber; var isBoolean = wisp_runtime.isBoolean; var isDate = wisp_runtime.isDate; var isRePattern = wisp_runtime.isRePattern; var isEven = wisp_runtime.isEven; var isEqual = wisp_runtime.isEqual; var max = wisp_runtime.max; var dec = wisp_runtime.dec; var dictionary = wisp_runtime.dictionary; var subs = wisp_runtime.subs; var inc = wisp_runtime.inc; var dec = wisp_runtime.dec; var wisp_expander = require('./expander'); var macroexpand = wisp_expander.macroexpand; var wisp_string = require('./string'); var split = wisp_string.split; var join = wisp_string.join; } var syntaxError = exports.syntaxError = function syntaxError(message, form) { return function () { var metadataø1 = meta(form); var lineø1 = ((metadataø1 || 0)['start'] || 0)['line']; var uriø1 = (metadataø1 || 0)['uri']; var columnø1 = ((metadataø1 || 0)['start'] || 0)['column']; var errorø1 = SyntaxError('' + message + '\n' + 'Form: ' + prStr(form) + '\n' + 'URI: ' + uriø1 + '\n' + 'Line: ' + lineø1 + '\n' + 'Column: ' + columnø1); errorø1.lineNumber = lineø1; errorø1.line = lineø1; errorø1.columnNumber = columnø1; errorø1.column = columnø1; errorø1.fileName = uriø1; errorø1.uri = uriø1; return (function () { throw errorø1; })(); }.call(this); }; var analyzeKeyword = exports.analyzeKeyword = function analyzeKeyword(env, form) { return { 'op': 'constant', 'form': form }; }; var __specials__ = exports.__specials__ = {}; var installSpecial = exports.installSpecial = function installSpecial(op, analyzer) { return (__specials__ || 0)[name(op)] = analyzer; }; var analyzeSpecial = exports.analyzeSpecial = function analyzeSpecial(analyzer, env, form) { return function () { var metadataø1 = meta(form); var astø1 = analyzer(env, form); return conj({ 'start': (metadataø1 || 0)['start'], 'end': (metadataø1 || 0)['end'] }, astø1); }.call(this); }; var analyzeIf = exports.analyzeIf = function analyzeIf(env, form) { return function () { var formsø1 = rest(form); var testø1 = analyze(env, first(formsø1)); var consequentø1 = analyze(env, second(formsø1)); var alternateø1 = analyze(env, third(formsø1)); count(formsø1) < 2 ? syntaxError('Malformed if expression, too few operands', form) : void 0; return { 'op': 'if', 'form': form, 'test': testø1, 'consequent': consequentø1, 'alternate': alternateø1 }; }.call(this); }; installSpecial('if', analyzeIf); var analyzeThrow = exports.analyzeThrow = function analyzeThrow(env, form) { return function () { var expressionø1 = analyze(env, second(form)); return { 'op': 'throw', 'form': form, 'throw': expressionø1 }; }.call(this); }; installSpecial('throw', analyzeThrow); var analyzeTry = exports.analyzeTry = function analyzeTry(env, form) { return function () { var formsø1 = vec(rest(form)); var tailø1 = last(formsø1); var finalizerFormø1 = isList(tailø1) && isEqual(symbol(void 0, 'finally'), first(tailø1)) ? rest(tailø1) : void 0; var finalizerø1 = finalizerFormø1 ? analyzeBlock(env, finalizerFormø1) : void 0; var bodyFormø1 = finalizerø1 ? butlast(formsø1) : formsø1; var tailø2 = last(bodyFormø1); var handlerFormø1 = isList(tailø2) && isEqual(symbol(void 0, 'catch'), first(tailø2)) ? rest(tailø2) : void 0; var handlerø1 = handlerFormø1 ? conj({ 'name': analyze(env, first(handlerFormø1)) }, analyzeBlock(env, rest(handlerFormø1))) : void 0; var bodyø1 = handlerFormø1 ? analyzeBlock(subEnv(env), butlast(bodyFormø1)) : analyzeBlock(subEnv(env), bodyFormø1); return { 'op': 'try', 'form': form, 'body': bodyø1, 'handler': handlerø1, 'finalizer': finalizerø1 }; }.call(this); }; installSpecial('try', analyzeTry); var analyzeSet = exports.analyzeSet = function analyzeSet(env, form) { return function () { var bodyø1 = rest(form); var leftø1 = first(bodyø1); var rightø1 = second(bodyø1); var targetø1 = isSymbol(leftø1) ? analyzeSymbol(env, leftø1) : isList(leftø1) ? analyzeList(env, leftø1) : 'else' ? leftø1 : void 0; var valueø1 = analyze(env, rightø1); return { 'op': 'set!', 'target': targetø1, 'value': valueø1, 'form': form }; }.call(this); }; installSpecial('set!', analyzeSet); var analyzeNew = exports.analyzeNew = function analyzeNew(env, form) { return function () { var bodyø1 = rest(form); var constructorø1 = analyze(env, first(bodyø1)); var paramsø1 = vec(map(function ($1) { return analyze(env, $1); }, rest(bodyø1))); return { 'op': 'new', 'constructor': constructorø1, 'form': form, 'params': paramsø1 }; }.call(this); }; installSpecial('new', analyzeNew); var analyzeAget = exports.analyzeAget = function analyzeAget(env, form) { return function () { var bodyø1 = rest(form); var targetø1 = analyze(env, first(bodyø1)); var attributeø1 = second(bodyø1); var fieldø1 = isQuote(attributeø1) && isSymbol(second(attributeø1)) && second(attributeø1); return isNil(attributeø1) ? syntaxError('Malformed aget expression expected (aget object member)', form) : { 'op': 'member-expression', 'computed': !fieldø1, 'form': form, 'target': targetø1, 'property': fieldø1 ? conj(analyzeSpecial(analyzeIdentifier, env, fieldø1), { 'binding': void 0 }) : analyze(env, attributeø1) }; }.call(this); }; installSpecial('aget', analyzeAget); var parseDef = exports.parseDef = function parseDef() { switch (arguments.length) { case 1: var id = arguments[0]; return { 'id': id }; case 2: var id = arguments[0]; var init = arguments[1]; return { 'id': id, 'init': init }; case 3: var id = arguments[0]; var doc = arguments[1]; var init = arguments[2]; return { 'id': id, 'doc': doc, 'init': init }; default: throw RangeError('Wrong number of arguments passed'); } }; var analyzeDef = exports.analyzeDef = function analyzeDef(env, form) { return function () { var paramsø1 = parseDef.apply(void 0, vec(rest(form))); var idø1 = (paramsø1 || 0)['id']; var metadataø1 = meta(idø1); var bindingø1 = analyzeSpecial(analyzeDeclaration, env, idø1); var initø1 = analyze(env, (paramsø1 || 0)['init']); var docø1 = (paramsø1 || 0)['doc'] || (metadataø1 || 0)['doc']; return { 'op': 'def', 'doc': docø1, 'id': bindingø1, 'init': initø1, 'export': (env || 0)['top'] && !(metadataø1 || 0)['private'], 'form': form }; }.call(this); }; installSpecial('def', analyzeDef); var analyzeDo = exports.analyzeDo = function analyzeDo(env, form) { return function () { var expressionsø1 = rest(form); var bodyø1 = analyzeBlock(env, expressionsø1); return conj(bodyø1, { 'op': 'do', 'form': form }); }.call(this); }; installSpecial('do', analyzeDo); var analyzeSymbol = exports.analyzeSymbol = function analyzeSymbol(env, form) { return function () { var formsø1 = split(name(form), '.'); var metadataø1 = meta(form); var startø1 = (metadataø1 || 0)['start']; var endø1 = (metadataø1 || 0)['end']; var expansionø1 = count(formsø1) > 1 ? list(symbol(void 0, 'aget'), withMeta(symbol(first(formsø1)), conj(metadataø1, { 'start': startø1, 'end': { 'line': (endø1 || 0)['line'], 'column': 1 + (startø1 || 0)['column'] + count(first(formsø1)) } })), list(symbol(void 0, 'quote'), withMeta(symbol(join('.', rest(formsø1))), conj(metadataø1, { 'end': endø1, 'start': { 'line': (startø1 || 0)['line'], 'column': 1 + (startø1 || 0)['column'] + count(first(formsø1)) } })))) : void 0; return expansionø1 ? analyze(env, withMeta(expansionø1, meta(form))) : analyzeSpecial(analyzeIdentifier, env, form); }.call(this); }; var analyzeIdentifier = exports.analyzeIdentifier = function analyzeIdentifier(env, form) { return { 'op': 'var', 'type': 'identifier', 'form': form, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'], 'binding': resolveBinding(env, form) }; }; var unresolvedBinding = exports.unresolvedBinding = function unresolvedBinding(env, form) { return { 'op': 'unresolved-binding', 'type': 'unresolved-binding', 'identifier': { 'type': 'identifier', 'form': symbol(namespace(form), name(form)) }, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'] }; }; var resolveBinding = exports.resolveBinding = function resolveBinding(env, form) { return ((env || 0)['locals'] || 0)[name(form)] || ((env || 0)['enclosed'] || 0)[name(form)] || unresolvedBinding(env, form); }; var analyzeShadow = exports.analyzeShadow = function analyzeShadow(env, id) { return function () { var bindingø1 = resolveBinding(env, id); return { 'depth': inc((bindingø1 || 0)['depth'] || 0), 'shadow': bindingø1 }; }.call(this); }; var analyzeBinding = exports.analyzeBinding = function analyzeBinding(env, form) { return function () { var idø1 = first(form); var bodyø1 = second(form); return conj(analyzeShadow(env, idø1), { 'op': 'binding', 'type': 'binding', 'id': idø1, 'init': analyze(env, bodyø1), 'form': form }); }.call(this); }; var analyzeDeclaration = exports.analyzeDeclaration = function analyzeDeclaration(env, form) { !!(namespace(form) || 1 < count(split('.', '' + form))) ? (function () { throw Error('' + 'Assert failed: ' + '' + '(not (or (namespace form) (< 1 (count (split "." (str form))))))'); })() : void 0; return conj(analyzeShadow(env, form), { 'op': 'var', 'type': 'identifier', 'depth': 0, 'id': form, 'form': form }); }; var analyzeParam = exports.analyzeParam = function analyzeParam(env, form) { return conj(analyzeShadow(env, form), { 'op': 'param', 'type': 'parameter', 'id': form, 'form': form, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'] }); }; var withBinding = exports.withBinding = function withBinding(env, form) { return conj(env, { 'locals': assoc((env || 0)['locals'], name((form || 0)['id']), form), 'bindings': conj((env || 0)['bindings'], form) }); }; var withParam = exports.withParam = function withParam(env, form) { return conj(withBinding(env, form), { 'params': conj((env || 0)['params'], form) }); }; var subEnv = exports.subEnv = function subEnv(env) { return { 'enclosed': conj({}, (env || 0)['enclosed'], (env || 0)['locals']), 'locals': {}, 'bindings': [], 'params': (env || 0)['params'] || [] }; }; var analyzeLet_ = exports.analyzeLet_ = function analyzeLet_(env, form, isLoop) { return function () { var expressionsø1 = rest(form); var bindingsø1 = first(expressionsø1); var bodyø1 = rest(expressionsø1); var isValidBindingsø1 = isVector(bindingsø1) && isEven(count(bindingsø1)); var _ø1 = !isValidBindingsø1 ? (function () { throw Error('' + 'Assert failed: ' + 'bindings must be vector of even number of elements' + 'valid-bindings?'); })() : void 0; var scopeø1 = reduce(function ($1, $2) { return withBinding($1, analyzeBinding($1, $2)); }, subEnv(env), partition(2, bindingsø1)); var bindingsø2 = (scopeø1 || 0)['bindings']; var expressionsø2 = analyzeBlock(isLoop ? conj(scopeø1, { 'params': bindingsø2 }) : scopeø1, bodyø1); return { 'op': 'let', 'form': form, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'], 'bindings': bindingsø2, 'statements': (expressionsø2 || 0)['statements'], 'result': (expressionsø2 || 0)['result'] }; }.call(this); }; var analyzeLet = exports.analyzeLet = function analyzeLet(env, form) { return analyzeLet_(env, form, false); }; installSpecial('let*', analyzeLet); var analyzeLoop = exports.analyzeLoop = function analyzeLoop(env, form) { return conj(analyzeLet_(env, form, true), { 'op': 'loop' }); }; installSpecial('loop*', analyzeLoop); var analyzeRecur = exports.analyzeRecur = function analyzeRecur(env, form) { return function () { var paramsø1 = (env || 0)['params']; var formsø1 = vec(map(function ($1) { return analyze(env, $1); }, rest(form))); return isEqual(count(paramsø1), count(formsø1)) ? { 'op': 'recur', 'form': form, 'params': formsø1 } : syntaxError('Recurs with wrong number of arguments', form); }.call(this); }; installSpecial('recur', analyzeRecur); var analyzeQuotedList = exports.analyzeQuotedList = function analyzeQuotedList(form) { return { 'op': 'list', 'items': map(analyzeQuoted, vec(form)), 'form': form, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'] }; }; var analyzeQuotedVector = exports.analyzeQuotedVector = function analyzeQuotedVector(form) { return { 'op': 'vector', 'items': map(analyzeQuoted, form), 'form': form, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'] }; }; var analyzeQuotedDictionary = exports.analyzeQuotedDictionary = function analyzeQuotedDictionary(form) { return function () { var namesø1 = vec(map(analyzeQuoted, keys(form))); var valuesø1 = vec(map(analyzeQuoted, vals(form))); return { 'op': 'dictionary', 'form': form, 'keys': namesø1, 'values': valuesø1, 'start': (meta(form) || 0)['start'], 'end': (meta(form) || 0)['end'] }; }.call(this); }; var analyzeQuotedSymbol = exports.analyzeQuotedSymbol = function analyzeQuotedSymbol(form) { return { 'op': 'symbol', 'name': name(form), 'namespace': namespace(form), 'form': form }; }; var analyzeQuotedKeyword = exports.analyzeQuotedKeyword = function analyzeQuotedKeyword(form) { return { 'op': 'keyword', 'name': name(form), 'namespace': namespace(form), 'form': form }; }; var analyzeQuoted = exports.analyzeQuoted = function analyzeQuoted(form) { return isSymbol(form) ? analyzeQuotedSymbol(form) : isKeyword(form) ? analyzeQuotedKeyword(form) : isList(form) ? analyzeQuotedList(form) : isVector(form) ? analyzeQuotedVector(form) : isDictionary(form) ? analyzeQuotedDictionary(form) : 'else' ? { 'op': 'constant', 'form': form } : void 0; }; var analyzeQuote = exports.analyzeQuote = function analyzeQuote(env, form) { return analyzeQuoted(second(form)); }; installSpecial('quote', analyzeQuote); var analyzeStatement = exports.analyzeStatement = function analyzeStatement(env, form) { return function () { var statementsø1 = (env || 0)['statements'] || []; var bindingsø1 = (env || 0)['bindings'] || []; var statementø1 = analyze(conj(env, { 'statements': void 0 }), form); var opø1 = (statementø1 || 0)['op']; var defsø1 = isEqual(opø1, 'def') ? [(statementø1 || 0)['var']] : 'else' ? void 0 : void 0; return conj(env, { 'statements': conj(statementsø1, statementø1), 'bindings': concat(bindingsø1, defsø1) }); }.call(this); }; var analyzeBlock = exports.analyzeBlock = function analyzeBlock(env, form) { return function () { var bodyø1 = count(form) > 1 ? reduce(analyzeStatement, env, butlast(form)) : void 0; var resultø1 = analyze(bodyø1 || env, last(form)); return { 'statements': (bodyø1 || 0)['statements'], 'result': resultø1 }; }.call(this); }; var analyzeFnMethod = exports.analyzeFnMethod = function analyzeFnMethod(env, form) { return function () { var signatureø1 = isList(form) && isVector(first(form)) ? first(form) : syntaxError('Malformed fn overload form', form); var bodyø1 = rest(form); var variadicø1 = some(function ($1) { return isEqual(symbol(void 0, '&'), $1); }, signatureø1); var paramsø1 = variadicø1 ? filter(function ($1) { return !isEqual(symbol(void 0, '&'), $1); }, signatureø1) : signatureø1; var arityø1 = variadicø1 ? dec(count(paramsø1)) : count(paramsø1); var scopeø1 = reduce(function ($1, $2) { return withParam($1, analyzeParam($1, $2)); }, conj(env, { 'params': [] }), paramsø1); return conj(analyzeBlock(scopeø1, bodyø1), { 'op': 'overload', 'variadic': variadicø1, 'arity': arityø1, 'params': (scopeø1 || 0)['params'], 'form': form }); }.call(this); }; var analyzeFn = exports.analyzeFn = function analyzeFn(env, form) { return function () { var formsø1 = rest(form); var formsø2 = isSymbol(first(formsø1)) ? formsø1 : cons(void 0, formsø1); var idø1 = first(formsø2); var bindingø1 = idø1 ? analyzeSpecial(analyzeDeclaration, env, idø1) : void 0; var bodyø1 = rest(formsø2); var overloadsø1 = isVector(first(bodyø1)) ? list(bodyø1) : isList(first(bodyø1)) && isVector(first(first(bodyø1))) ? bodyø1 : 'else' ? syntaxError('' + 'Malformed fn expression, ' + 'parameter declaration (' + prStr(first(bodyø1)) + ') must be a vector', form) : void 0; var scopeø1 = bindingø1 ? withBinding(subEnv(env), bindingø1) : subEnv(env); var methodsø1 = map(function ($1) { return analyzeFnMethod(scopeø1, $1); }, vec(overloadsø1)); var arityø1 = max.apply(void 0, map(function ($1) { return ($1 || 0)['arity']; }, methodsø1)); var variadicø1 = some(function ($1) { return ($1 || 0)['variadic']; }, methodsø1); return { 'op': 'fn', 'type': 'function', 'id': bindingø1, 'variadic': variadicø1, 'methods': methodsø1, 'form': form }; }.call(this); }; installSpecial('fn*', analyzeFn); var parseReferences = exports.parseReferences = function parseReferences(forms) { return reduce(function (references, form) { return isSeq(form) ? assoc(references, name(first(form)), vec(rest(form))) : references; }, {}, forms); }; var parseRequire = exports.parseRequire = function parseRequire(form) { return function () { var requirementø1 = isSymbol(form) ? [form] : vec(form); var idø1 = first(requirementø1); var paramsø1 = dictionary.apply(void 0, rest(requirementø1)); var renamesø1 = (paramsø1 || 0)['\uA789rename']; var namesø1 = (paramsø1 || 0)['\uA789refer']; var aliasø1 = (paramsø1 || 0)['\uA789as']; var referencesø1 = !isEmpty(namesø1) ? reduce(function (refers, reference) { return conj(refers, { 'op': 'refer', 'form': reference, 'name': reference, 'rename': (renamesø1 || 0)[reference] || (renamesø1 || 0)[name(reference)], 'ns': idø1 }); }, [], namesø1) : void 0; return { 'op': 'require', 'alias': aliasø1, 'ns': idø1, 'refer': referencesø1, 'form': form }; }.call(this); }; var analyzeNs = exports.analyzeNs = function analyzeNs(env, form) { return function () { var formsø1 = rest(form); var nameø1 = first(formsø1); var bodyø1 = rest(formsø1); var docø1 = isString(first(bodyø1)) ? first(bodyø1) : void 0; var referencesø1 = parseReferences(docø1 ? rest(bodyø1) : bodyø1); var requirementsø1 = (referencesø1 || 0)['require'] ? map(parseRequire, (referencesø1 || 0)['require']) : void 0; return { 'op': 'ns', 'name': nameø1, 'doc': docø1, 'require': requirementsø1 ? vec(requirementsø1) : void 0, 'form': form }; }.call(this); }; installSpecial('ns', analyzeNs); var analyzeList = exports.analyzeList = function analyzeList(env, form) { return function () { var expansionø1 = macroexpand(form, env); var operatorø1 = first(form); var analyzerø1 = isSymbol(operatorø1) && (__specials__ || 0)[name(operatorø1)]; return !(expansionø1 === form) ? analyze(env, expansionø1) : analyzerø1 ? analyzeSpecial(analyzerø1, env, expansionø1) : 'else' ? analyzeInvoke(env, expansionø1) : void 0; }.call(this); }; var analyzeVector = exports.analyzeVector = function analyzeVector(env, form) { return function () { var itemsø1 = vec(map(function ($1) { return analyze(env, $1); }, form)); return { 'op': 'vector', 'form': form, 'items': itemsø1 }; }.call(this); }; var analyzeDictionary = exports.analyzeDictionary = function analyzeDictionary(env, form) { return function () { var namesø1 = vec(map(function ($1) { return analyze(env, $1); }, keys(form))); var valuesø1 = vec(map(function ($1) { return analyze(env, $1); }, vals(form))); return { 'op': 'dictionary', 'keys': namesø1, 'values': valuesø1, 'form': form }; }.call(this); }; var analyzeInvoke = exports.analyzeInvoke = function analyzeInvoke(env, form) { return function () { var calleeø1 = analyze(env, first(form)); var paramsø1 = vec(map(function ($1) { return analyze(env, $1); }, rest(form))); return { 'op': 'invoke', 'callee': calleeø1, 'params': paramsø1, 'form': form }; }.call(this); }; var analyzeConstant = exports.analyzeConstant = function analyzeConstant(env, form) { return { 'op': 'constant', 'form': form }; }; var analyze = exports.analyze = function analyze() { switch (arguments.length) { case 1: var form = arguments[0]; return analyze({ 'locals': {}, 'bindings': [], 'top': true }, form); case 2: var env = arguments[0]; var form = arguments[1]; return isNil(form) ? analyzeConstant(env, form) : isSymbol(form) ? analyzeSymbol(env, form) : isList(form) ? isEmpty(form) ? analyzeQuoted(form) : analyzeList(env, form) : isDictionary(form) ? analyzeDictionary(env, form) : isVector(form) ? analyzeVector(env, form) : isKeyword(form) ? analyzeKeyword(env, form) : 'else' ? analyzeConstant(env, form) : void 0; default: throw RangeError('Wrong number of arguments passed'); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFub255bW91cy53aXNwIl0sIm5hbWVzIjpbIl9uc18iLCJpZCIsImRvYyIsIm1ldGEiLCJ3aXRoTWV0YSIsImlzU3ltYm9sIiwiaXNLZXl3b3JkIiwiaXNRdW90ZSIsInN5bWJvbCIsIm5hbWVzcGFjZSIsIm5hbWUiLCJwclN0ciIsImlzVW5xdW90ZSIsImlzVW5xdW90ZVNwbGljaW5nIiwiaXNMaXN0IiwibGlzdCIsImNvbmoiLCJwYXJ0aXRpb24iLCJzZXEiLCJpc0VtcHR5IiwibWFwIiwidmVjIiwiaXNFdmVyeSIsImNvbmNhdCIsImZpcnN0Iiwic2Vjb25kIiwidGhpcmQiLCJyZXN0IiwibGFzdCIsImJ1dGxhc3QiLCJpbnRlcmxlYXZlIiwiY29ucyIsImNvdW50Iiwic29tZSIsImFzc29jIiwicmVkdWNlIiwiZmlsdGVyIiwiaXNTZXEiLCJpc05pbCIsImlzRGljdGlvbmFyeSIsImlzVmVjdG9yIiwia2V5cyIsInZhbHMiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiaXNEYXRlIiwiaXNSZVBhdHRlcm4iLCJpc0V2ZW4iLCJpc0VxdWFsIiwibWF4IiwiZGVjIiwiZGljdGlvbmFyeSIsInN1YnMiLCJpbmMiLCJtYWNyb2V4cGFuZCIsInNwbGl0Iiwiam9pbiIsInN5bnRheEVycm9yIiwiZXhwb3J0cyIsIm1lc3NhZ2UiLCJmb3JtIiwibWV0YWRhdGHDuDEiLCJsaW5lw7gxIiwidXJpw7gxIiwiY29sdW1uw7gxIiwiZXJyb3LDuDEiLCJTeW50YXhFcnJvciIsImxpbmVOdW1iZXIiLCJsaW5lIiwiY29sdW1uTnVtYmVyIiwiY29sdW1uIiwiZmlsZU5hbWUiLCJ1cmkiLCJhbmFseXplS2V5d29yZCIsImVudiIsIl9fc3BlY2lhbHNfXyIsImluc3RhbGxTcGVjaWFsIiwib3AiLCJhbmFseXplciIsImFuYWx5emVTcGVjaWFsIiwiYXN0w7gxIiwiYW5hbHl6ZUlmIiwiZm9ybXPDuDEiLCJ0ZXN0w7gxIiwiYW5hbHl6ZSIsImNvbnNlcXVlbnTDuDEiLCJhbHRlcm5hdGXDuDEiLCJhbmFseXplVGhyb3ciLCJleHByZXNzaW9uw7gxIiwiYW5hbHl6ZVRyeSIsInRhaWzDuDEiLCJmaW5hbGl6ZXJGb3Jtw7gxIiwiZmluYWxpemVyw7gxIiwiYW5hbHl6ZUJsb2NrIiwiYm9keUZvcm3DuDEiLCJ0YWlsw7gyIiwiaGFuZGxlckZvcm3DuDEiLCJoYW5kbGVyw7gxIiwiYm9kecO4MSIsInN1YkVudiIsImFuYWx5emVTZXQiLCJsZWZ0w7gxIiwicmlnaHTDuDEiLCJ0YXJnZXTDuDEiLCJhbmFseXplU3ltYm9sIiwiYW5hbHl6ZUxpc3QiLCJ2YWx1ZcO4MSIsImFuYWx5emVOZXciLCJjb25zdHJ1Y3RvcsO4MSIsInBhcmFtc8O4MSIsIiQxIiwiYW5hbHl6ZUFnZXQiLCJhdHRyaWJ1dGXDuDEiLCJmaWVsZMO4MSIsImFuYWx5emVJZGVudGlmaWVyIiwicGFyc2VEZWYiLCJpbml0IiwiYW5hbHl6ZURlZiIsImlkw7gxIiwiYmluZGluZ8O4MSIsImFuYWx5emVEZWNsYXJhdGlvbiIsImluaXTDuDEiLCJkb2PDuDEiLCJhbmFseXplRG8iLCJleHByZXNzaW9uc8O4MSIsInN0YXJ0w7gxIiwiZW5kw7gxIiwiZXhwYW5zaW9uw7gxIiwicmVzb2x2ZUJpbmRpbmciLCJ1bnJlc29sdmVkQmluZGluZyIsImFuYWx5emVTaGFkb3ciLCJhbmFseXplQmluZGluZyIsImFuYWx5emVQYXJhbSIsIndpdGhCaW5kaW5nIiwid2l0aFBhcmFtIiwiYW5hbHl6ZUxldF8iLCJpc0xvb3AiLCJiaW5kaW5nc8O4MSIsImlzVmFsaWRCaW5kaW5nc8O4MSIsIl/DuDEiLCJzY29wZcO4MSIsIiQyIiwiYmluZGluZ3PDuDIiLCJleHByZXNzaW9uc8O4MiIsImFuYWx5emVMZXQiLCJhbmFseXplTG9vcCIsImFuYWx5emVSZWN1ciIsImFuYWx5emVRdW90ZWRMaXN0IiwiYW5hbHl6ZVF1b3RlZCIsImFuYWx5emVRdW90ZWRWZWN0b3IiLCJhbmFseXplUXVvdGVkRGljdGlvbmFyeSIsIm5hbWVzw7gxIiwidmFsdWVzw7gxIiwiYW5hbHl6ZVF1b3RlZFN5bWJvbCIsImFuYWx5emVRdW90ZWRLZXl3b3JkIiwiYW5hbHl6ZVF1b3RlIiwiYW5hbHl6ZVN0YXRlbWVudCIsInN0YXRlbWVudHPDuDEiLCJzdGF0ZW1lbnTDuDEiLCJvcMO4MSIsImRlZnPDuDEiLCJyZXN1bHTDuDEiLCJhbmFseXplRm5NZXRob2QiLCJzaWduYXR1cmXDuDEiLCJ2YXJpYWRpY8O4MSIsImFyaXR5w7gxIiwiYW5hbHl6ZUZuIiwiZm9ybXPDuDIiLCJvdmVybG9hZHPDuDEiLCJtZXRob2Rzw7gxIiwicGFyc2VSZWZlcmVuY2VzIiwiZm9ybXMiLCJyZWZlcmVuY2VzIiwicGFyc2VSZXF1aXJlIiwicmVxdWlyZW1lbnTDuDEiLCJyZW5hbWVzw7gxIiwiYWxpYXPDuDEiLCJyZWZlcmVuY2Vzw7gxIiwicmVmZXJzIiwicmVmZXJlbmNlIiwiYW5hbHl6ZU5zIiwibmFtZcO4MSIsInJlcXVpcmVtZW50c8O4MSIsIm9wZXJhdG9yw7gxIiwiYW5hbHl6ZXLDuDEiLCJhbmFseXplSW52b2tlIiwiYW5hbHl6ZVZlY3RvciIsIml0ZW1zw7gxIiwiYW5hbHl6ZURpY3Rpb25hcnkiLCJjYWxsZWXDuDEiLCJhbmFseXplQ29uc3RhbnQiXSwibWFwcGluZ3MiOiI7SUFBQSxJQUFDQSxJLEdBQUQ7QUFBQSxZQUFBQyxFLEVBQUksZUFBSjtBQUFBLFlBQUFDLEcsRUFBQSxLLENBQUE7QUFBQSxVOztRQUM4QkMsSUFBQSxHLFNBQUFBLEk7UUFBS0MsUUFBQSxHLFNBQUFBLFE7UUFBVUMsUUFBQSxHLFNBQUFBLFE7UUFBUUMsU0FBQSxHLFNBQUFBLFM7UUFDdkJDLE9BQUEsRyxTQUFBQSxPO1FBQU9DLE1BQUEsRyxTQUFBQSxNO1FBQU9DLFNBQUEsRyxTQUFBQSxTO1FBQVVDLElBQUEsRyxTQUFBQSxJO1FBQUtDLEtBQUEsRyxTQUFBQSxLO1FBQzdCQyxTQUFBLEcsU0FBQUEsUztRQUFTQyxpQkFBQSxHLFNBQUFBLGlCOztRQUNKQyxNQUFBLEcsY0FBQUEsTTtRQUFNQyxJQUFBLEcsY0FBQUEsSTtRQUFLQyxJQUFBLEcsY0FBQUEsSTtRQUFLQyxTQUFBLEcsY0FBQUEsUztRQUFVQyxHQUFBLEcsY0FBQUEsRztRQUMxQkMsT0FBQSxHLGNBQUFBLE87UUFBT0MsR0FBQSxHLGNBQUFBLEc7UUFBSUMsR0FBQSxHLGNBQUFBLEc7UUFBSUMsT0FBQSxHLGNBQUFBLE87UUFBT0MsTUFBQSxHLGNBQUFBLE07UUFDdEJDLEtBQUEsRyxjQUFBQSxLO1FBQU1DLE1BQUEsRyxjQUFBQSxNO1FBQU9DLEtBQUEsRyxjQUFBQSxLO1FBQU1DLElBQUEsRyxjQUFBQSxJO1FBQUtDLElBQUEsRyxjQUFBQSxJO1FBQ3hCQyxPQUFBLEcsY0FBQUEsTztRQUFRQyxVQUFBLEcsY0FBQUEsVTtRQUFXQyxJQUFBLEcsY0FBQUEsSTtRQUFLQyxLQUFBLEcsY0FBQUEsSztRQUN4QkMsSUFBQSxHLGNBQUFBLEk7UUFBS0MsS0FBQSxHLGNBQUFBLEs7UUFBTUMsTUFBQSxHLGNBQUFBLE07UUFBT0MsTUFBQSxHLGNBQUFBLE07UUFBT0MsS0FBQSxHLGNBQUFBLEs7O1FBQzFCQyxLQUFBLEcsYUFBQUEsSztRQUFLQyxZQUFBLEcsYUFBQUEsWTtRQUFZQyxRQUFBLEcsYUFBQUEsUTtRQUFRQyxJQUFBLEcsYUFBQUEsSTtRQUN6QkMsSUFBQSxHLGFBQUFBLEk7UUFBS0MsUUFBQSxHLGFBQUFBLFE7UUFBUUMsUUFBQSxHLGFBQUFBLFE7UUFBUUMsU0FBQSxHLGFBQUFBLFM7UUFDckJDLE1BQUEsRyxhQUFBQSxNO1FBQU1DLFdBQUEsRyxhQUFBQSxXO1FBQVlDLE1BQUEsRyxhQUFBQSxNO1FBQU1DLE9BQUEsRyxhQUFBQSxPO1FBQUVDLEdBQUEsRyxhQUFBQSxHO1FBQzFCQyxHQUFBLEcsYUFBQUEsRztRQUFJQyxVQUFBLEcsYUFBQUEsVTtRQUFXQyxJQUFBLEcsYUFBQUEsSTtRQUFLQyxHQUFBLEcsYUFBQUEsRztRQUFJSCxHQUFBLEcsYUFBQUEsRzs7UUFDdkJJLFdBQUEsRyxjQUFBQSxXOztRQUNGQyxLQUFBLEcsWUFBQUEsSztRQUFNQyxJQUFBLEcsWUFBQUEsSTs7QUFFdkMsSUFBTUMsV0FBQSxHQUFBQyxPQUFBLENBQUFELFdBQUEsR0FBTixTQUFNQSxXQUFOLENBQ0dFLE9BREgsRUFDV0MsSUFEWCxFQUVFO0FBQUEsZSxZQUFNO0FBQUEsZ0JBQUFDLFUsR0FBVTNELElBQUQsQ0FBTTBELElBQU4sQ0FBVDtBQUFBLFlBQ0EsSUFBQUUsTSxLQUFvQkQsVSxNQUFSLEMsT0FBQSxDLE1BQVAsQyxNQUFBLENBQUwsQ0FEQTtBQUFBLFlBRUEsSUFBQUUsSyxJQUFVRixVLE1BQU4sQyxLQUFBLENBQUosQ0FGQTtBQUFBLFlBR0EsSUFBQUcsUSxLQUF3QkgsVSxNQUFSLEMsT0FBQSxDLE1BQVQsQyxRQUFBLENBQVAsQ0FIQTtBQUFBLFlBSUEsSUFBQUksTyxHQUFPQyxXQUFELEMsS0FBa0JQLE8sR0FBUSxJLEdBQ1IsUSxHQUFVakQsS0FBRCxDQUFRa0QsSUFBUixDLEdBQWMsSSxHQUN2QixPLEdBQVFHLEssR0FBSSxJLEdBQ1osUSxHQUFTRCxNLEdBQUssSSxHQUNkLFVBSkwsR0FJZ0JFLFFBSjdCLENBQU4sQ0FKQTtBQUFBLFlBU0VDLE9BQUEsQ0FBTUUsVUFBWixHQUF1QkwsTUFBdkIsQ0FUSTtBQUFBLFlBVUVHLE9BQUEsQ0FBTUcsSUFBWixHQUFpQk4sTUFBakIsQ0FWSTtBQUFBLFlBV0VHLE9BQUEsQ0FBTUksWUFBWixHQUF5QkwsUUFBekIsQ0FYSTtBQUFBLFlBWUVDLE9BQUEsQ0FBTUssTUFBWixHQUFtQk4sUUFBbkIsQ0FaSTtBQUFBLFlBYUVDLE9BQUEsQ0FBTU0sUUFBWixHQUFxQlIsS0FBckIsQ0FiSTtBQUFBLFlBY0VFLE9BQUEsQ0FBTU8sR0FBWixHQUFnQlQsS0FBaEIsQ0FkSTtBQUFBLFlBZUosTyxhQUFBO0FBQUEsc0JBQU9FLE9BQVA7QUFBQSxhLENBQUEsR0FmSTtBQUFBLFMsS0FBTixDLElBQUE7QUFBQSxLQUZGLEM7QUFvQkEsSUFBTVEsY0FBQSxHQUFBZixPQUFBLENBQUFlLGNBQUEsR0FBTixTQUFNQSxjQUFOLENBS0dDLEdBTEgsRUFLT2QsSUFMUCxFQU1FO0FBQUE7QUFBQSxZLGdCQUFBO0FBQUEsWSxRQUNPQSxJQURQO0FBQUE7QUFBQSxLQU5GLEM7QUFTQSxJQUFLZSxZQUFBLEdBQUFqQixPQUFBLENBQUFpQixZQUFBLEdBQWEsRUFBbEIsQztBQUVBLElBQU1DLGNBQUEsR0FBQWxCLE9BQUEsQ0FBQWtCLGNBQUEsR0FBTixTQUFNQSxjQUFOLENBQ0dDLEVBREgsRUFDTUMsUUFETixFQUVFO0FBQUEsZSxDQUFXSCxZLE1BQUwsQ0FBbUJsRSxJQUFELENBQU1vRSxFQUFOLENBQWxCLENBQU4sR0FBbUNDLFFBQW5DO0FBQUEsS0FGRixDO0FBSUEsSUFBTUMsY0FBQSxHQUFBckIsT0FBQSxDQUFBcUIsY0FBQSxHQUFOLFNBQU1BLGNBQU4sQ0FDR0QsUUFESCxFQUNZSixHQURaLEVBQ2dCZCxJQURoQixFQUVFO0FBQUEsZSxZQUFNO0FBQUEsZ0JBQUFDLFUsR0FBVTNELElBQUQsQ0FBTTBELElBQU4sQ0FBVDtBQUFBLFlBQ0EsSUFBQW9CLEssR0FBS0YsUUFBRCxDQUFVSixHQUFWLEVBQWNkLElBQWQsQ0FBSixDQURBO0FBQUEsWUFFSixPQUFDN0MsSUFBRCxDQUFNO0FBQUEsZ0IsVUFBZ0I4QyxVLE1BQVIsQyxPQUFBLENBQVI7QUFBQSxnQixRQUNZQSxVLE1BQU4sQyxLQUFBLENBRE47QUFBQSxhQUFOLEVBRU1tQixLQUZOLEVBRkk7QUFBQSxTLEtBQU4sQyxJQUFBO0FBQUEsS0FGRixDO0FBUUEsSUFBTUMsU0FBQSxHQUFBdkIsT0FBQSxDQUFBdUIsU0FBQSxHQUFOLFNBQU1BLFNBQU4sQ0FpQkdQLEdBakJILEVBaUJPZCxJQWpCUCxFQWtCRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBc0IsTyxHQUFPeEQsSUFBRCxDQUFNa0MsSUFBTixDQUFOO0FBQUEsWUFDQSxJQUFBdUIsTSxHQUFNQyxPQUFELENBQVNWLEdBQVQsRUFBY25ELEtBQUQsQ0FBTzJELE9BQVAsQ0FBYixDQUFMLENBREE7QUFBQSxZQUVBLElBQUFHLFksR0FBWUQsT0FBRCxDQUFTVixHQUFULEVBQWNsRCxNQUFELENBQVEwRCxPQUFSLENBQWIsQ0FBWCxDQUZBO0FBQUEsWUFHQSxJQUFBSSxXLEdBQVdGLE9BQUQsQ0FBU1YsR0FBVCxFQUFjakQsS0FBRCxDQUFPeUQsT0FBUCxDQUFiLENBQVYsQ0FIQTtBQUFBLFlBSUluRCxLQUFELENBQU9tRCxPQUFQLENBQUgsR0FBaUIsQ0FBckIsR0FDR3pCLFdBQUQsQ0FBYywyQ0FBZCxFQUEwREcsSUFBMUQsQ0FERixHLE1BQUEsQ0FKSTtBQUFBLFlBTUo7QUFBQSxnQixVQUFBO0FBQUEsZ0IsUUFDT0EsSUFEUDtBQUFBLGdCLFFBRU91QixNQUZQO0FBQUEsZ0IsY0FHYUUsWUFIYjtBQUFBLGdCLGFBSVlDLFdBSlo7QUFBQSxjQU5JO0FBQUEsUyxLQUFOLEMsSUFBQTtBQUFBLEtBbEJGLEM7QUE4QkNWLGNBQUQsQyxJQUFBLEVBQXNCSyxTQUF0QixFO0FBRUEsSUFBTU0sWUFBQSxHQUFBN0IsT0FBQSxDQUFBNkIsWUFBQSxHQUFOLFNBQU1BLFlBQU4sQ0FhR2IsR0FiSCxFQWFPZCxJQWJQLEVBY0U7QUFBQSxlLFlBQU07QUFBQSxnQkFBQTRCLFksR0FBWUosT0FBRCxDQUFTVixHQUFULEVBQWNsRCxNQUFELENBQVFvQyxJQUFSLENBQWIsQ0FBWDtBQUFBLFlBQ0o7QUFBQSxnQixhQUFBO0FBQUEsZ0IsUUFDT0EsSUFEUDtBQUFBLGdCLFNBRVE0QixZQUZSO0FBQUEsY0FESTtBQUFBLFMsS0FBTixDLElBQUE7QUFBQSxLQWRGLEM7QUFtQkNaLGNBQUQsQyxPQUFBLEVBQXlCVyxZQUF6QixFO0FBRUEsSUFBTUUsVUFBQSxHQUFBL0IsT0FBQSxDQUFBK0IsVUFBQSxHQUFOLFNBQU1BLFVBQU4sQ0FDR2YsR0FESCxFQUNPZCxJQURQLEVBRUU7QUFBQSxlLFlBQU07QUFBQSxnQkFBQXNCLE8sR0FBTzlELEdBQUQsQ0FBTU0sSUFBRCxDQUFNa0MsSUFBTixDQUFMLENBQU47QUFBQSxZQUdBLElBQUE4QixNLEdBQU0vRCxJQUFELENBQU11RCxPQUFOLENBQUwsQ0FIQTtBQUFBLFlBSUEsSUFBQVMsZSxHQUF5QjlFLE1BQUQsQ0FBTzZFLE1BQVAsQ0FBTCxJQUNNMUMsT0FBRCxDLE1BQUksQyxNQUFBLEUsU0FBQSxDQUFKLEVBQWF6QixLQUFELENBQU9tRSxNQUFQLENBQVosQ0FEVCxHQUVHaEUsSUFBRCxDQUFNZ0UsTUFBTixDQUZGLEcsTUFBZixDQUpBO0FBQUEsWUFPQSxJQUFBRSxXLEdBQWNELGVBQUosR0FDR0UsWUFBRCxDQUFlbkIsR0FBZixFQUFtQmlCLGVBQW5CLENBREYsRyxNQUFWLENBUEE7QUFBQSxZQVdBLElBQUFHLFUsR0FBY0YsV0FBSixHQUNHaEUsT0FBRCxDQUFTc0QsT0FBVCxDQURGLEdBRUVBLE9BRlosQ0FYQTtBQUFBLFlBZUEsSUFBQWEsTSxHQUFNcEUsSUFBRCxDQUFNbUUsVUFBTixDQUFMLENBZkE7QUFBQSxZQWdCQSxJQUFBRSxhLEdBQXVCbkYsTUFBRCxDQUFPa0YsTUFBUCxDQUFMLElBQ00vQyxPQUFELEMsTUFBSSxDLE1BQUEsRSxPQUFBLENBQUosRUFBV3pCLEtBQUQsQ0FBT3dFLE1BQVAsQ0FBVixDQURULEdBRUdyRSxJQUFELENBQU1xRSxNQUFOLENBRkYsRyxNQUFiLENBaEJBO0FBQUEsWUFtQkEsSUFBQUUsUyxHQUFZRCxhQUFKLEdBQ0dqRixJQUFELENBQU0sRSxRQUFRcUUsT0FBRCxDQUFTVixHQUFULEVBQWNuRCxLQUFELENBQU95RSxhQUFQLENBQWIsQ0FBUCxFQUFOLEVBQ09ILFlBQUQsQ0FBZW5CLEdBQWYsRUFBb0JoRCxJQUFELENBQU1zRSxhQUFOLENBQW5CLENBRE4sQ0FERixHLE1BQVIsQ0FuQkE7QUFBQSxZQXdCQSxJQUFBRSxNLEdBQVNGLGFBQUosR0FDR0gsWUFBRCxDQUFnQk0sTUFBRCxDQUFTekIsR0FBVCxDQUFmLEVBQThCOUMsT0FBRCxDQUFTa0UsVUFBVCxDQUE3QixDQURGLEdBRUdELFlBQUQsQ0FBZ0JNLE1BQUQsQ0FBU3pCLEdBQVQsQ0FBZixFQUE2Qm9CLFVBQTdCLENBRlAsQ0F4QkE7QUFBQSxZQTJCSjtBQUFBLGdCLFdBQUE7QUFBQSxnQixRQUNPbEMsSUFEUDtBQUFBLGdCLFFBRU9zQyxNQUZQO0FBQUEsZ0IsV0FHVUQsU0FIVjtBQUFBLGdCLGFBSVlMLFdBSlo7QUFBQSxjQTNCSTtBQUFBLFMsS0FBTixDLElBQUE7QUFBQSxLQUZGLEM7QUFtQ0NoQixjQUFELEMsS0FBQSxFQUF1QmEsVUFBdkIsRTtBQUVBLElBQU1XLFVBQUEsR0FBQTFDLE9BQUEsQ0FBQTBDLFVBQUEsR0FBTixTQUFNQSxVQUFOLENBQ0cxQixHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBc0MsTSxHQUFNeEUsSUFBRCxDQUFNa0MsSUFBTixDQUFMO0FBQUEsWUFDQSxJQUFBeUMsTSxHQUFNOUUsS0FBRCxDQUFPMkUsTUFBUCxDQUFMLENBREE7QUFBQSxZQUVBLElBQUFJLE8sR0FBTzlFLE1BQUQsQ0FBUTBFLE1BQVIsQ0FBTixDQUZBO0FBQUEsWUFHQSxJQUFBSyxRLEdBQWNuRyxRQUFELENBQVNpRyxNQUFULENBQU4sR0FBc0JHLGFBQUQsQ0FBZ0I5QixHQUFoQixFQUFvQjJCLE1BQXBCLENBQXJCLEdBQ094RixNQUFELENBQU93RixNQUFQLEMsR0FBY0ksV0FBRCxDQUFjL0IsR0FBZCxFQUFrQjJCLE1BQWxCLEMsWUFDUEEsTSxTQUZuQixDQUhBO0FBQUEsWUFNQSxJQUFBSyxPLEdBQU90QixPQUFELENBQVNWLEdBQVQsRUFBYTRCLE9BQWIsQ0FBTixDQU5BO0FBQUEsWUFPSjtBQUFBLGdCLFlBQUE7QUFBQSxnQixVQUNTQyxRQURUO0FBQUEsZ0IsU0FFUUcsT0FGUjtBQUFBLGdCLFFBR085QyxJQUhQO0FBQUEsY0FQSTtBQUFBLFMsS0FBTixDLElBQUE7QUFBQSxLQUZGLEM7QUFhQ2dCLGNBQUQsQyxNQUFBLEVBQXdCd0IsVUFBeEIsRTtBQUVBLElBQU1PLFVBQUEsR0FBQWpELE9BQUEsQ0FBQWlELFVBQUEsR0FBTixTQUFNQSxVQUFOLENBQ0dqQyxHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBc0MsTSxHQUFNeEUsSUFBRCxDQUFNa0MsSUFBTixDQUFMO0FBQUEsWUFDQSxJQUFBZ0QsYSxHQUFheEIsT0FBRCxDQUFTVixHQUFULEVBQWNuRCxLQUFELENBQU8yRSxNQUFQLENBQWIsQ0FBWixDQURBO0FBQUEsWUFFQSxJQUFBVyxRLEdBQVF6RixHQUFELENBQU1ELEdBQUQsQ0FBSyxVQUFjMkYsRUFBZCxFOzJCQUFFMUIsTyxDQUFRVixHLEVBQUlvQyxFO2lCQUFuQixFQUF1QnBGLElBQUQsQ0FBTXdFLE1BQU4sQ0FBdEIsQ0FBTCxDQUFQLENBRkE7QUFBQSxZQUdKO0FBQUEsZ0IsV0FBQTtBQUFBLGdCLGVBQ2NVLGFBRGQ7QUFBQSxnQixRQUVPaEQsSUFGUDtBQUFBLGdCLFVBR1NpRCxRQUhUO0FBQUEsY0FISTtBQUFBLFMsS0FBTixDLElBQUE7QUFBQSxLQUZGLEM7QUFTQ2pDLGNBQUQsQyxLQUFBLEVBQXVCK0IsVUFBdkIsRTtBQUVBLElBQU1JLFdBQUEsR0FBQXJELE9BQUEsQ0FBQXFELFdBQUEsR0FBTixTQUFNQSxXQUFOLENBQ0dyQyxHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBc0MsTSxHQUFNeEUsSUFBRCxDQUFNa0MsSUFBTixDQUFMO0FBQUEsWUFDQSxJQUFBMkMsUSxHQUFRbkIsT0FBRCxDQUFTVixHQUFULEVBQWNuRCxLQUFELENBQU8yRSxNQUFQLENBQWIsQ0FBUCxDQURBO0FBQUEsWUFFQSxJQUFBYyxXLEdBQVd4RixNQUFELENBQVEwRSxNQUFSLENBQVYsQ0FGQTtBQUFBLFlBR0EsSUFBQWUsTyxHQUFZM0csT0FBRCxDQUFRMEcsV0FBUixDLElBQ0M1RyxRQUFELENBQVVvQixNQUFELENBQVF3RixXQUFSLENBQVQsQ0FETCxJQUVNeEYsTUFBRCxDQUFRd0YsV0FBUixDQUZYLENBSEE7QUFBQSxZQU1KLE9BQUszRSxLQUFELENBQU0yRSxXQUFOLENBQUosR0FDR3ZELFdBQUQsQ0FBYyx5REFBZCxFQUNjRyxJQURkLENBREYsR0FHRTtBQUFBLGdCLHlCQUFBO0FBQUEsZ0IsWUFDVyxDQUFLcUQsT0FEaEI7QUFBQSxnQixRQUVPckQsSUFGUDtBQUFBLGdCLFVBR1MyQyxRQUhUO0FBQUEsZ0IsWUFNZVUsT0FBSixHQUNHbEcsSUFBRCxDQUFPZ0UsY0FBRCxDQUFpQm1DLGlCQUFqQixFQUFvQ3hDLEdBQXBDLEVBQXdDdUMsT0FBeEMsQ0FBTixFQUNNLEUsaUJBQUEsRUFETixDQURGLEdBR0c3QixPQUFELENBQVNWLEdBQVQsRUFBYXNDLFdBQWIsQ0FUYjtBQUFBLGFBSEYsQ0FOSTtBQUFBLFMsS0FBTixDLElBQUE7QUFBQSxLQUZGLEM7QUFxQkNwQyxjQUFELEMsTUFBQSxFQUF3Qm1DLFdBQXhCLEU7QUFFQSxJQUFNSSxRQUFBLEdBQUF6RCxPQUFBLENBQUF5RCxRQUFBLEdBQU4sU0FBTUEsUUFBTixHOzs7Z0JBQ0luSCxFQUFBLEc7WUFBSSxTLE1BQUtBLEVBQUwsRzs7Z0JBQ0pBLEVBQUEsRztnQkFBR29ILElBQUEsRztZQUFNO0FBQUEsZ0IsTUFBS3BILEVBQUw7QUFBQSxnQixRQUFjb0gsSUFBZDtBQUFBLGM7O2dCQUNUcEgsRUFBQSxHO2dCQUFHQyxHQUFBLEc7Z0JBQUltSCxJQUFBLEc7WUFBTTtBQUFBLGdCLE1BQUtwSCxFQUFMO0FBQUEsZ0IsT0FBYUMsR0FBYjtBQUFBLGdCLFFBQXVCbUgsSUFBdkI7QUFBQSxjOzs7O0tBSGpCLEM7QUFLQSxJQUFNQyxVQUFBLEdBQUEzRCxPQUFBLENBQUEyRCxVQUFBLEdBQU4sU0FBTUEsVUFBTixDQUNHM0MsR0FESCxFQUNPZCxJQURQLEVBRUU7QUFBQSxlLFlBQU07QUFBQSxnQkFBQWlELFEsR0FBY00sUSxNQUFQLEMsTUFBQSxFQUFrQi9GLEdBQUQsQ0FBTU0sSUFBRCxDQUFNa0MsSUFBTixDQUFMLENBQWpCLENBQVA7QUFBQSxZQUNBLElBQUEwRCxJLElBQVFULFEsTUFBTCxDLElBQUEsQ0FBSCxDQURBO0FBQUEsWUFFQSxJQUFBaEQsVSxHQUFVM0QsSUFBRCxDQUFNb0gsSUFBTixDQUFULENBRkE7QUFBQSxZQUlBLElBQUFDLFMsR0FBU3hDLGNBQUQsQ0FBaUJ5QyxrQkFBakIsRUFBcUM5QyxHQUFyQyxFQUF5QzRDLElBQXpDLENBQVIsQ0FKQTtBQUFBLFlBTUEsSUFBQUcsTSxHQUFNckMsT0FBRCxDQUFTVixHQUFULEUsQ0FBb0JtQyxRLE1BQVAsQyxNQUFBLENBQWIsQ0FBTCxDQU5BO0FBQUEsWUFRQSxJQUFBYSxLLElBQWNiLFEsTUFBTixDLEtBQUEsQ0FBSixJLENBQ1VoRCxVLE1BQU4sQyxLQUFBLENBRFIsQ0FSQTtBQUFBLFlBVUo7QUFBQSxnQixXQUFBO0FBQUEsZ0IsT0FDTTZELEtBRE47QUFBQSxnQixNQUVLSCxTQUZMO0FBQUEsZ0IsUUFHT0UsTUFIUDtBQUFBLGdCLFdBSW9CL0MsRyxNQUFOLEMsS0FBQSxDQUFMLElBQ0ssQyxDQUFlYixVLE1BQVYsQyxTQUFBLENBTG5CO0FBQUEsZ0IsUUFNT0QsSUFOUDtBQUFBLGNBVkk7QUFBQSxTLEtBQU4sQyxJQUFBO0FBQUEsS0FGRixDO0FBbUJDZ0IsY0FBRCxDLEtBQUEsRUFBdUJ5QyxVQUF2QixFO0FBRUEsSUFBTU0sU0FBQSxHQUFBakUsT0FBQSxDQUFBaUUsU0FBQSxHQUFOLFNBQU1BLFNBQU4sQ0FDR2pELEdBREgsRUFDT2QsSUFEUCxFQUVFO0FBQUEsZSxZQUFNO0FBQUEsZ0JBQUFnRSxhLEdBQWFsRyxJQUFELENBQU1rQyxJQUFOLENBQVo7QUFBQSxZQUNBLElBQUFzQyxNLEdBQU1MLFlBQUQsQ0FBZW5CLEdBQWYsRUFBbUJrRCxhQUFuQixDQUFMLENBREE7QUFBQSxZQUVKLE9BQUM3RyxJQUFELENBQU1tRixNQUFOLEVBQVc7QUFBQSxnQixVQUFBO0FBQUEsZ0IsUUFDT3RDLElBRFA7QUFBQSxhQUFYLEVBRkk7QUFBQSxTLEtBQU4sQyxJQUFBO0FBQUEsS0FGRixDO0FBTUNnQixjQUFELEMsSUFBQSxFQUFzQitDLFNBQXRCLEU7QUFFQSxJQUFNbkIsYUFBQSxHQUFBOUMsT0FBQSxDQUFBOEMsYUFBQSxHQUFOLFNBQU1BLGFBQU4sQ0FJRzlCLEdBSkgsRUFJT2QsSUFKUCxFQUtFO0FBQUEsZSxZQUFNO0FBQUEsZ0JBQUFzQixPLEdBQU8zQixLQUFELENBQVE5QyxJQUFELENBQU1tRCxJQUFOLENBQVAsRUFBbUIsR0FBbkIsQ0FBTjtBQUFBLFlBQ0EsSUFBQUMsVSxHQUFVM0QsSUFBRCxDQUFNMEQsSUFBTixDQUFULENBREE7QUFBQSxZQUVBLElBQUFpRSxPLElBQWNoRSxVLE1BQVIsQyxPQUFBLENBQU4sQ0FGQTtBQUFBLFlBR0EsSUFBQWlFLEssSUFBVWpFLFUsTUFBTixDLEtBQUEsQ0FBSixDQUhBO0FBQUEsWUFJQSxJQUFBa0UsVyxHQUFrQmhHLEtBQUQsQ0FBT21ELE9BQVAsQ0FBSCxHQUFpQixDQUFyQixHQUNFcEUsSUFBRCxDLE1BQU8sQyxNQUFBLEUsTUFBQSxDQUFQLEVBQ09YLFFBQUQsQ0FBWUksTUFBRCxDQUFTZ0IsS0FBRCxDQUFPMkQsT0FBUCxDQUFSLENBQVgsRUFDR25FLElBQUQsQ0FBTThDLFVBQU4sRUFDTTtBQUFBLG9CLFNBQVFnRSxPQUFSO0FBQUEsb0IsT0FDTTtBQUFBLHdCLFNBQWNDLEssTUFBUCxDLE1BQUEsQ0FBUDtBQUFBLHdCLFVBQ1ksQyxJQUFXRCxPLE1BQVQsQyxRQUFBLENBQUwsR0FBc0I5RixLQUFELENBQVFSLEtBQUQsQ0FBTzJELE9BQVAsQ0FBUCxDQUQ5QjtBQUFBLHFCQUROO0FBQUEsaUJBRE4sQ0FERixDQUROLEVBTU9wRSxJQUFELEMsTUFBTyxDLE1BQUEsRSxPQUFBLENBQVAsRUFDT1gsUUFBRCxDQUFZSSxNQUFELENBQVNpRCxJQUFELENBQU0sR0FBTixFQUFVOUIsSUFBRCxDQUFNd0QsT0FBTixDQUFULENBQVIsQ0FBWCxFQUNHbkUsSUFBRCxDQUFNOEMsVUFBTixFQUNNO0FBQUEsb0IsT0FBTWlFLEtBQU47QUFBQSxvQixTQUNRO0FBQUEsd0IsU0FBY0QsTyxNQUFQLEMsTUFBQSxDQUFQO0FBQUEsd0IsVUFDWSxDLElBQVdBLE8sTUFBVCxDLFFBQUEsQ0FBTCxHQUFzQjlGLEtBQUQsQ0FBUVIsS0FBRCxDQUFPMkQsT0FBUCxDQUFQLENBRDlCO0FBQUEscUJBRFI7QUFBQSxpQkFETixDQURGLENBRE4sQ0FOTixDQURELEcsTUFBVixDQUpBO0FBQUEsWUFpQkosT0FBSTZDLFdBQUosR0FDRzNDLE9BQUQsQ0FBU1YsR0FBVCxFQUFjdkUsUUFBRCxDQUFXNEgsV0FBWCxFQUFzQjdILElBQUQsQ0FBTTBELElBQU4sQ0FBckIsQ0FBYixDQURGLEdBRUdtQixjQUFELENBQWlCbUMsaUJBQWpCLEVBQW9DeEMsR0FBcEMsRUFBd0NkLElBQXhDLENBRkYsQ0FqQkk7QUFBQSxTLEtBQU4sQyxJQUFBO0FBQUEsS0FMRixDO0FBMEJBLElBQU1zRCxpQkFBQSxHQUFBeEQsT0FBQSxDQUFBd0QsaUJBQUEsR0FBTixTQUFNQSxpQkFBTixDQUNHeEMsR0FESCxFQUNPZCxJQURQLEVBRUU7QUFBQTtBQUFBLFksV0FBQTtBQUFBLFksb0JBQUE7QUFBQSxZLFFBRU9BLElBRlA7QUFBQSxZLFVBR2lCMUQsSUFBRCxDQUFNMEQsSUFBTixDLE1BQVIsQyxPQUFBLENBSFI7QUFBQSxZLFFBSWExRCxJQUFELENBQU0wRCxJQUFOLEMsTUFBTixDLEtBQUEsQ0FKTjtBQUFBLFksV0FLV29FLGNBQUQsQ0FBaUJ0RCxHQUFqQixFQUFxQmQsSUFBckIsQ0FMVjtBQUFBO0FBQUEsS0FGRixDO0FBU0EsSUFBTXFFLGlCQUFBLEdBQUF2RSxPQUFBLENBQUF1RSxpQkFBQSxHQUFOLFNBQU1BLGlCQUFOLENBQ0d2RCxHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBO0FBQUEsWSwwQkFBQTtBQUFBLFksNEJBQUE7QUFBQSxZLGNBRWE7QUFBQSxnQixvQkFBQTtBQUFBLGdCLFFBQ1FyRCxNQUFELENBQVNDLFNBQUQsQ0FBV29ELElBQVgsQ0FBUixFQUNTbkQsSUFBRCxDQUFNbUQsSUFBTixDQURSLENBRFA7QUFBQSxhQUZiO0FBQUEsWSxVQUtpQjFELElBQUQsQ0FBTTBELElBQU4sQyxNQUFSLEMsT0FBQSxDQUxSO0FBQUEsWSxRQU1hMUQsSUFBRCxDQUFNMEQsSUFBTixDLE1BQU4sQyxLQUFBLENBTk47QUFBQTtBQUFBLEtBRkYsQztBQVVBLElBQU1vRSxjQUFBLEdBQUF0RSxPQUFBLENBQUFzRSxjQUFBLEdBQU4sU0FBTUEsY0FBTixDQUNHdEQsR0FESCxFQUNPZCxJQURQLEVBRUU7QUFBQSxlLEVBQWtCYyxHLE1BQVQsQyxRQUFBLEMsTUFBTCxDQUFvQmpFLElBQUQsQ0FBTW1ELElBQU4sQ0FBbkIsQyxNQUNnQmMsRyxNQUFYLEMsVUFBQSxDLE1BQUwsQ0FBc0JqRSxJQUFELENBQU1tRCxJQUFOLENBQXJCLENBREosSUFFS3FFLGlCQUFELENBQW9CdkQsR0FBcEIsRUFBd0JkLElBQXhCLENBRko7QUFBQSxLQUZGLEM7QUFNQSxJQUFNc0UsYUFBQSxHQUFBeEUsT0FBQSxDQUFBd0UsYUFBQSxHQUFOLFNBQU1BLGFBQU4sQ0FDR3hELEdBREgsRUFDTzFFLEVBRFAsRUFFRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBdUgsUyxHQUFTUyxjQUFELENBQWlCdEQsR0FBakIsRUFBcUIxRSxFQUFyQixDQUFSO0FBQUEsWUFDSjtBQUFBLGdCLFNBQVNxRCxHQUFELEMsQ0FBaUJrRSxTLE1BQVIsQyxPQUFBLENBQUosSUFBcUIsQ0FBMUIsQ0FBUjtBQUFBLGdCLFVBQ1NBLFNBRFQ7QUFBQSxjQURJO0FBQUEsUyxLQUFOLEMsSUFBQTtBQUFBLEtBRkYsQztBQU1BLElBQU1ZLGNBQUEsR0FBQXpFLE9BQUEsQ0FBQXlFLGNBQUEsR0FBTixTQUFNQSxjQUFOLENBQ0d6RCxHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBMEQsSSxHQUFJL0YsS0FBRCxDQUFPcUMsSUFBUCxDQUFIO0FBQUEsWUFDQSxJQUFBc0MsTSxHQUFNMUUsTUFBRCxDQUFRb0MsSUFBUixDQUFMLENBREE7QUFBQSxZQUVKLE9BQUM3QyxJQUFELENBQU9tSCxhQUFELENBQWdCeEQsR0FBaEIsRUFBb0I0QyxJQUFwQixDQUFOLEVBQ007QUFBQSxnQixlQUFBO0FBQUEsZ0IsaUJBQUE7QUFBQSxnQixNQUVLQSxJQUZMO0FBQUEsZ0IsUUFHUWxDLE9BQUQsQ0FBU1YsR0FBVCxFQUFhd0IsTUFBYixDQUhQO0FBQUEsZ0IsUUFJT3RDLElBSlA7QUFBQSxhQUROLEVBRkk7QUFBQSxTLEtBQU4sQyxJQUFBO0FBQUEsS0FGRixDO0FBV0EsSUFBTTRELGtCQUFBLEdBQUE5RCxPQUFBLENBQUE4RCxrQkFBQSxHQUFOLFNBQU1BLGtCQUFOLENBQ0c5QyxHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBLFEsQ0FBUSxDQUFLLENBQUtwRCxTQUFELENBQVdvRCxJQUFYLENBQUosSUFDTyxDQUFILEdBQU03QixLQUFELENBQVF3QixLQUFELENBQU8sR0FBUCxFLEVBQVUsR0FBS0ssSUFBZixDQUFQLENBRFQsQ0FBYixHOztZQUFBLEcsTUFBQTtBQUFBLFFBRUEsT0FBQzdDLElBQUQsQ0FBT21ILGFBQUQsQ0FBZ0J4RCxHQUFoQixFQUFvQmQsSUFBcEIsQ0FBTixFQUNNO0FBQUEsWSxXQUFBO0FBQUEsWSxvQkFBQTtBQUFBLFksU0FFUSxDQUZSO0FBQUEsWSxNQUdLQSxJQUhMO0FBQUEsWSxRQUlPQSxJQUpQO0FBQUEsU0FETixFQUZBO0FBQUEsS0FGRixDO0FBV0EsSUFBTXdFLFlBQUEsR0FBQTFFLE9BQUEsQ0FBQTBFLFlBQUEsR0FBTixTQUFNQSxZQUFOLENBQ0cxRCxHQURILEVBQ09kLElBRFAsRUFFRTtBQUFBLGVBQUM3QyxJQUFELENBQU9tSCxhQUFELENBQWdCeEQsR0FBaEIsRUFBb0JkLElBQXBCLENBQU4sRUFDTTtBQUFBLFksYUFBQTtBQUFBLFksbUJBQUE7QUFBQSxZLE1BRUtBLElBRkw7QUFBQSxZLFFBR09BLElBSFA7QUFBQSxZLFVBSWlCMUQsSUFBRCxDQUFNMEQsSUFBTixDLE1BQVIsQyxPQUFBLENBSlI7QUFBQSxZLFFBS2ExRCxJQUFELENBQU0wRCxJQUFOLEMsTUFBTixDLEtBQUEsQ0FMTjtBQUFBLFNBRE47QUFBQSxLQUZGLEM7QUFVQSxJQUFNeUUsV0FBQSxHQUFBM0UsT0FBQSxDQUFBMkUsV0FBQSxHQUFOLFNBQU1BLFdBQU4sQ0FHRzNELEdBSEgsRUFHT2QsSUFIUCxFQUlFO0FBQUEsZUFBQzdDLElBQUQsQ0FBTTJELEdBQU4sRUFBVTtBQUFBLFksVUFBVXpDLEtBQUQsQyxDQUFnQnlDLEcsTUFBVCxDLFFBQUEsQ0FBUCxFQUFzQmpFLElBQUQsQyxDQUFXbUQsSSxNQUFMLEMsSUFBQSxDQUFOLENBQXJCLEVBQXVDQSxJQUF2QyxDQUFUO0FBQUEsWSxZQUNZN0MsSUFBRCxDLENBQWlCMkQsRyxNQUFYLEMsVUFBQSxDQUFOLEVBQXNCZCxJQUF0QixDQURYO0FBQUEsU0FBVjtBQUFBLEtBSkYsQztBQU9BLElBQU0wRSxTQUFBLEdBQUE1RSxPQUFBLENBQUE0RSxTQUFBLEdBQU4sU0FBTUEsU0FBTixDQUNHNUQsR0FESCxFQUNPZCxJQURQLEVBRUU7QUFBQSxlQUFDN0MsSUFBRCxDQUFPc0gsV0FBRCxDQUFjM0QsR0FBZCxFQUFrQmQsSUFBbEIsQ0FBTixFQUNNLEUsVUFBVTdDLElBQUQsQyxDQUFlMkQsRyxNQUFULEMsUUFBQSxDQUFOLEVBQW9CZCxJQUFwQixDQUFULEVBRE47QUFBQSxLQUZGLEM7QUFLQSxJQUFNdUMsTUFBQSxHQUFBekMsT0FBQSxDQUFBeUMsTUFBQSxHQUFOLFNBQU1BLE1BQU4sQ0FDR3pCLEdBREgsRUFFRTtBQUFBO0FBQUEsWSxZQUFZM0QsSUFBRCxDQUFNLEVBQU4sRSxDQUNpQjJELEcsTUFBWCxDLFVBQUEsQ0FETixFLENBRWVBLEcsTUFBVCxDLFFBQUEsQ0FGTixDQUFYO0FBQUEsWSxVQUdTLEVBSFQ7QUFBQSxZLFlBSVcsRUFKWDtBQUFBLFksV0FLc0JBLEcsTUFBVCxDLFFBQUEsQ0FBSixJQUFrQixFQUwzQjtBQUFBO0FBQUEsS0FGRixDO0FBVUEsSUFBTTZELFdBQUEsR0FBQTdFLE9BQUEsQ0FBQTZFLFdBQUEsR0FBTixTQUFNQSxXQUFOLENBR0c3RCxHQUhILEVBR09kLElBSFAsRUFHWTRFLE1BSFosRUFJRTtBQUFBLGUsWUFBTTtBQUFBLGdCQUFBWixhLEdBQWFsRyxJQUFELENBQU1rQyxJQUFOLENBQVo7QUFBQSxZQUNBLElBQUE2RSxVLEdBQVVsSCxLQUFELENBQU9xRyxhQUFQLENBQVQsQ0FEQTtBQUFBLFlBRUEsSUFBQTFCLE0sR0FBTXhFLElBQUQsQ0FBTWtHLGFBQU4sQ0FBTCxDQUZBO0FBQUEsWUFJQSxJQUFBYyxpQixHQUFzQm5HLFFBQUQsQ0FBU2tHLFVBQVQsQ0FBTCxJQUNNMUYsTUFBRCxDQUFRaEIsS0FBRCxDQUFPMEcsVUFBUCxDQUFQLENBRHJCLENBSkE7QUFBQSxZQU9BLElBQUFFLEcsSUFBVUQsaUJBQVIsRzt5REFDUSxvRDtvQkFEUixHLE1BQUYsQ0FQQTtBQUFBLFlBVUEsSUFBQUUsTyxHQUFPMUcsTUFBRCxDQUFRLFVBQW1DNEUsRUFBbkMsRUFBc0MrQixFQUF0QyxFOzJCQUFFUixXLENBQWF2QixFLEVBQUlxQixjQUFELENBQWlCckIsRUFBakIsRUFBb0IrQixFQUFwQixDO2lCQUExQixFQUNTMUMsTUFBRCxDQUFTekIsR0FBVCxDQURSLEVBRVMxRCxTQUFELENBQVcsQ0FBWCxFQUFheUgsVUFBYixDQUZSLENBQU4sQ0FWQTtBQUFBLFlBY0EsSUFBQUssVSxJQUFvQkYsTyxNQUFYLEMsVUFBQSxDQUFULENBZEE7QUFBQSxZQWdCQSxJQUFBRyxhLEdBQWFsRCxZQUFELENBQW1CMkMsTUFBSixHQUNHekgsSUFBRCxDQUFNNkgsT0FBTixFQUFZLEUsVUFBU0UsVUFBVCxFQUFaLENBREYsR0FFRUYsT0FGakIsRUFHZTFDLE1BSGYsQ0FBWixDQWhCQTtBQUFBLFlBcUJKO0FBQUEsZ0IsV0FBQTtBQUFBLGdCLFFBQ090QyxJQURQO0FBQUEsZ0IsVUFFaUIxRCxJQUFELENBQU0wRCxJQUFOLEMsTUFBUixDLE9BQUEsQ0FGUjtBQUFBLGdCLFFBR2ExRCxJQUFELENBQU0wRCxJQUFOLEMsTUFBTixDLEtBQUEsQ0FITjtBQUFBLGdCLFlBSVdrRixVQUpYO0FBQUEsZ0IsZUFLMEJDLGEsTUFBYixDLFlBQUEsQ0FMYjtBQUFBLGdCLFdBTWtCQSxhLE1