@anpanman/opencv_ts
Version:
Experimental WIP TypeScript typings and OpenCV.js/wasm loader.
770 lines (731 loc) • 7.91 MB
JavaScript
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(function() {
return (root.cv = factory());
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else if (typeof window === 'object') {
// Browser globals
root.cv = factory();
} else if (typeof importScripts === 'function') {
// Web worker
root.cv = factory;
} else {
// Other shells, e.g. d8
root.cv = factory();
}
}(this, function() {
var cv = (function() {
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
return (
function(cv) {
cv = cv || {};
var Module = typeof cv !== "undefined" ? cv : {};
var moduleOverrides = {};
var key;
for (key in Module) {
if (Module.hasOwnProperty(key)) {
moduleOverrides[key] = Module[key]
}
}
var arguments_ = [];
var thisProgram = "./this.program";
var quit_ = function(status, toThrow) {
throw toThrow
};
var ENVIRONMENT_IS_WEB = false;
var ENVIRONMENT_IS_WORKER = false;
var ENVIRONMENT_IS_NODE = false;
var ENVIRONMENT_HAS_NODE = false;
var ENVIRONMENT_IS_SHELL = false;
ENVIRONMENT_IS_WEB = typeof window === "object";
ENVIRONMENT_IS_WORKER = typeof importScripts === "function";
ENVIRONMENT_HAS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string";
ENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
var scriptDirectory = "";
function locateFile(path) {
if (Module["locateFile"]) {
return Module["locateFile"](path, scriptDirectory)
}
return scriptDirectory + path
}
var read_, readAsync, readBinary, setWindowTitle;
if (ENVIRONMENT_IS_NODE) {
scriptDirectory = __dirname + "/";
var nodeFS;
var nodePath;
read_ = function shell_read(filename, binary) {
var ret;
ret = tryParseAsDataURI(filename);
if (!ret) {
if (!nodeFS) nodeFS = require("fs");
if (!nodePath) nodePath = require("path");
filename = nodePath["normalize"](filename);
ret = nodeFS["readFileSync"](filename)
}
return binary ? ret : ret.toString()
};
readBinary = function readBinary(filename) {
var ret = read_(filename, true);
if (!ret.buffer) {
ret = new Uint8Array(ret)
}
assert(ret.buffer);
return ret
};
if (process["argv"].length > 1) {
thisProgram = process["argv"][1].replace(/\\/g, "/")
}
arguments_ = process["argv"].slice(2);
process["on"]("uncaughtException", function(ex) {
if (!(ex instanceof ExitStatus)) {
throw ex
}
});
process["on"]("unhandledRejection", abort);
quit_ = function(status) {
process["exit"](status)
};
Module["inspect"] = function() {
return "[Emscripten Module object]"
}
} else if (ENVIRONMENT_IS_SHELL) {
if (typeof read != "undefined") {
read_ = function shell_read(f) {
var data = tryParseAsDataURI(f);
if (data) {
return intArrayToString(data)
}
return read(f)
}
}
readBinary = function readBinary(f) {
var data;
data = tryParseAsDataURI(f);
if (data) {
return data
}
if (typeof readbuffer === "function") {
return new Uint8Array(readbuffer(f))
}
data = read(f, "binary");
assert(typeof data === "object");
return data
};
if (typeof scriptArgs != "undefined") {
arguments_ = scriptArgs
} else if (typeof arguments != "undefined") {
arguments_ = arguments
}
if (typeof quit === "function") {
quit_ = function(status) {
quit(status)
}
}
if (typeof print !== "undefined") {
if (typeof console === "undefined") console = {};
console.log = print;
console.warn = console.error = typeof printErr !== "undefined" ? printErr : print
}
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
if (ENVIRONMENT_IS_WORKER) {
scriptDirectory = self.location.href
} else if (document.currentScript) {
scriptDirectory = document.currentScript.src
}
if (_scriptDir) {
scriptDirectory = _scriptDir
}
if (scriptDirectory.indexOf("blob:") !== 0) {
scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1)
} else {
scriptDirectory = ""
}
read_ = function shell_read(url) {
try {
var xhr = new XMLHttpRequest;
xhr.open("GET", url, false);
xhr.send(null);
return xhr.responseText
} catch (err) {
var data = tryParseAsDataURI(url);
if (data) {
return intArrayToString(data)
}
throw err
}
};
if (ENVIRONMENT_IS_WORKER) {
readBinary = function readBinary(url) {
try {
var xhr = new XMLHttpRequest;
xhr.open("GET", url, false);
xhr.responseType = "arraybuffer";
xhr.send(null);
return new Uint8Array(xhr.response)
} catch (err) {
var data = tryParseAsDataURI(url);
if (data) {
return data
}
throw err
}
}
}
readAsync = function readAsync(url, onload, onerror) {
var xhr = new XMLHttpRequest;
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function xhr_onload() {
if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
onload(xhr.response);
return
}
var data = tryParseAsDataURI(url);
if (data) {
onload(data.buffer);
return
}
onerror()
};
xhr.onerror = onerror;
xhr.send(null)
};
setWindowTitle = function(title) {
document.title = title
}
} else {}
var out = Module["print"] || console.log.bind(console);
var err = Module["printErr"] || console.warn.bind(console);
for (key in moduleOverrides) {
if (moduleOverrides.hasOwnProperty(key)) {
Module[key] = moduleOverrides[key]
}
}
moduleOverrides = null;
if (Module["arguments"]) arguments_ = Module["arguments"];
if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
if (Module["quit"]) quit_ = Module["quit"];
var STACK_ALIGN = 16;
function dynamicAlloc(size) {
var ret = HEAP32[DYNAMICTOP_PTR >> 2];
var end = ret + size + 15 & -16;
if (end > _emscripten_get_heap_size()) {
abort()
}
HEAP32[DYNAMICTOP_PTR >> 2] = end;
return ret
}
function getNativeTypeSize(type) {
switch (type) {
case "i1":
case "i8":
return 1;
case "i16":
return 2;
case "i32":
return 4;
case "i64":
return 8;
case "float":
return 4;
case "double":
return 8;
default: {
if (type[type.length - 1] === "*") {
return 4
} else if (type[0] === "i") {
var bits = parseInt(type.substr(1));
assert(bits % 8 === 0, "getNativeTypeSize invalid bits " + bits + ", type " + type);
return bits / 8
} else {
return 0
}
}
}
}
function warnOnce(text) {
if (!warnOnce.shown) warnOnce.shown = {};
if (!warnOnce.shown[text]) {
warnOnce.shown[text] = 1;
err(text)
}
}
function convertJsFunctionToWasm(func, sig) {
var typeSection = [1, 0, 1, 96];
var sigRet = sig.slice(0, 1);
var sigParam = sig.slice(1);
var typeCodes = {
"i": 127,
"j": 126,
"f": 125,
"d": 124
};
typeSection.push(sigParam.length);
for (var i = 0; i < sigParam.length; ++i) {
typeSection.push(typeCodes[sigParam[i]])
}
if (sigRet == "v") {
typeSection.push(0)
} else {
typeSection = typeSection.concat([1, typeCodes[sigRet]])
}
typeSection[1] = typeSection.length - 2;
var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0]));
var module = new WebAssembly.Module(bytes);
var instance = new WebAssembly.Instance(module, {
e: {
f: func
}
});
var wrappedFunc = instance.exports.f;
return wrappedFunc
}
function addFunctionWasm(func, sig) {
var table = wasmTable;
var ret = table.length;
try {
table.grow(1)
} catch (err) {
if (!err instanceof RangeError) {
throw err
}
throw "Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH."
}
try {
table.set(ret, func)
} catch (err) {
if (!err instanceof TypeError) {
throw err
}
assert(typeof sig !== "undefined", "Missing signature argument to addFunction");
var wrapped = convertJsFunctionToWasm(func, sig);
table.set(ret, wrapped)
}
return ret
}
function removeFunctionWasm(index) {}
var funcWrappers = {};
function dynCall(sig, ptr, args) {
if (args && args.length) {
return Module["dynCall_" + sig].apply(null, [ptr].concat(args))
} else {
return Module["dynCall_" + sig].call(null, ptr)
}
}
var tempRet0 = 0;
var setTempRet0 = function(value) {
tempRet0 = value
};
var wasmBinary;
if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
var noExitRuntime;
if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"];
if (typeof WebAssembly !== "object") {
err("no native wasm support detected")
}
function setValue(ptr, value, type, noSafe) {
type = type || "i8";
if (type.charAt(type.length - 1) === "*") type = "i32";
switch (type) {
case "i1":
HEAP8[ptr >> 0] = value;
break;
case "i8":
HEAP8[ptr >> 0] = value;
break;
case "i16":
HEAP16[ptr >> 1] = value;
break;
case "i32":
HEAP32[ptr >> 2] = value;
break;
case "i64":
tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1];
break;
case "float":
HEAPF32[ptr >> 2] = value;
break;
case "double":
HEAPF64[ptr >> 3] = value;
break;
default:
abort("invalid type for setValue: " + type)
}
}
var wasmMemory;
var wasmTable = new WebAssembly.Table({
"initial": 9914,
"maximum": 9914 + 0,
"element": "anyfunc"
});
var ABORT = false;
var EXITSTATUS = 0;
function assert(condition, text) {
if (!condition) {
abort("Assertion failed: " + text)
}
}
function getCFunc(ident) {
var func = Module["_" + ident];
assert(func, "Cannot call unknown function " + ident + ", make sure it is exported");
return func
}
function ccall(ident, returnType, argTypes, args, opts) {
var toC = {
"string": function(str) {
var ret = 0;
if (str !== null && str !== undefined && str !== 0) {
var len = (str.length << 2) + 1;
ret = stackAlloc(len);
stringToUTF8(str, ret, len)
}
return ret
},
"array": function(arr) {
var ret = stackAlloc(arr.length);
writeArrayToMemory(arr, ret);
return ret
}
};
function convertReturnValue(ret) {
if (returnType === "string") return UTF8ToString(ret);
if (returnType === "boolean") return Boolean(ret);
return ret
}
var func = getCFunc(ident);
var cArgs = [];
var stack = 0;
if (args) {
for (var i = 0; i < args.length; i++) {
var converter = toC[argTypes[i]];
if (converter) {
if (stack === 0) stack = stackSave();
cArgs[i] = converter(args[i])
} else {
cArgs[i] = args[i]
}
}
}
var ret = func.apply(null, cArgs);
ret = convertReturnValue(ret);
if (stack !== 0) stackRestore(stack);
return ret
}
var ALLOC_NONE = 3;
function allocate(slab, types, allocator, ptr) {
var zeroinit, size;
if (typeof slab === "number") {
zeroinit = true;
size = slab
} else {
zeroinit = false;
size = slab.length
}
var singleType = typeof types === "string" ? types : null;
var ret;
if (allocator == ALLOC_NONE) {
ret = ptr
} else {
ret = [_malloc, stackAlloc, dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length))
}
if (zeroinit) {
var stop;
ptr = ret;
assert((ret & 3) == 0);
stop = ret + (size & ~3);
for (; ptr < stop; ptr += 4) {
HEAP32[ptr >> 2] = 0
}
stop = ret + size;
while (ptr < stop) {
HEAP8[ptr++ >> 0] = 0
}
return ret
}
if (singleType === "i8") {
if (slab.subarray || slab.slice) {
HEAPU8.set(slab, ret)
} else {
HEAPU8.set(new Uint8Array(slab), ret)
}
return ret
}
var i = 0,
type, typeSize, previousType;
while (i < size) {
var curr = slab[i];
type = singleType || types[i];
if (type === 0) {
i++;
continue
}
if (type == "i64") type = "i32";
setValue(ret + i, curr, type);
if (previousType !== type) {
typeSize = getNativeTypeSize(type);
previousType = type
}
i += typeSize
}
return ret
}
function getMemory(size) {
if (!runtimeInitialized) return dynamicAlloc(size);
return _malloc(size)
}
var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined;
function UTF8ArrayToString(u8Array, idx, maxBytesToRead) {
var endIdx = idx + maxBytesToRead;
var endPtr = idx;
while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;
if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
return UTF8Decoder.decode(u8Array.subarray(idx, endPtr))
} else {
var str = "";
while (idx < endPtr) {
var u0 = u8Array[idx++];
if (!(u0 & 128)) {
str += String.fromCharCode(u0);
continue
}
var u1 = u8Array[idx++] & 63;
if ((u0 & 224) == 192) {
str += String.fromCharCode((u0 & 31) << 6 | u1);
continue
}
var u2 = u8Array[idx++] & 63;
if ((u0 & 240) == 224) {
u0 = (u0 & 15) << 12 | u1 << 6 | u2
} else {
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63
}
if (u0 < 65536) {
str += String.fromCharCode(u0)
} else {
var ch = u0 - 65536;
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
}
}
}
return str
}
function UTF8ToString(ptr, maxBytesToRead) {
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""
}
function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
if (!(maxBytesToWrite > 0)) return 0;
var startIdx = outIdx;
var endIdx = outIdx + maxBytesToWrite - 1;
for (var i = 0; i < str.length; ++i) {
var u = str.charCodeAt(i);
if (u >= 55296 && u <= 57343) {
var u1 = str.charCodeAt(++i);
u = 65536 + ((u & 1023) << 10) | u1 & 1023
}
if (u <= 127) {
if (outIdx >= endIdx) break;
outU8Array[outIdx++] = u
} else if (u <= 2047) {
if (outIdx + 1 >= endIdx) break;
outU8Array[outIdx++] = 192 | u >> 6;
outU8Array[outIdx++] = 128 | u & 63
} else if (u <= 65535) {
if (outIdx + 2 >= endIdx) break;
outU8Array[outIdx++] = 224 | u >> 12;
outU8Array[outIdx++] = 128 | u >> 6 & 63;
outU8Array[outIdx++] = 128 | u & 63
} else {
if (outIdx + 3 >= endIdx) break;
outU8Array[outIdx++] = 240 | u >> 18;
outU8Array[outIdx++] = 128 | u >> 12 & 63;
outU8Array[outIdx++] = 128 | u >> 6 & 63;
outU8Array[outIdx++] = 128 | u & 63
}
}
outU8Array[outIdx] = 0;
return outIdx - startIdx
}
function stringToUTF8(str, outPtr, maxBytesToWrite) {
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite)
}
function lengthBytesUTF8(str) {
var len = 0;
for (var i = 0; i < str.length; ++i) {
var u = str.charCodeAt(i);
if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023;
if (u <= 127) ++len;
else if (u <= 2047) len += 2;
else if (u <= 65535) len += 3;
else len += 4
}
return len
}
var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined;
function writeArrayToMemory(array, buffer) {
HEAP8.set(array, buffer)
}
function writeAsciiToMemory(str, buffer, dontAddNull) {
for (var i = 0; i < str.length; ++i) {
HEAP8[buffer++ >> 0] = str.charCodeAt(i)
}
if (!dontAddNull) HEAP8[buffer >> 0] = 0
}
var PAGE_SIZE = 16384;
var WASM_PAGE_SIZE = 65536;
function alignUp(x, multiple) {
if (x % multiple > 0) {
x += multiple - x % multiple
}
return x
}
var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
function updateGlobalBufferAndViews(buf) {
buffer = buf;
Module["HEAP8"] = HEAP8 = new Int8Array(buf);
Module["HEAP16"] = HEAP16 = new Int16Array(buf);
Module["HEAP32"] = HEAP32 = new Int32Array(buf);
Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf);
Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf);
Module["HEAPF32"] = HEAPF32 = new Float32Array(buf);
Module["HEAPF64"] = HEAPF64 = new Float64Array(buf)
}
var STACK_BASE = 6548160,
DYNAMIC_BASE = 6548160,
DYNAMICTOP_PTR = 1305120;
var INITIAL_TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 134217728;
if (Module["wasmMemory"]) {
wasmMemory = Module["wasmMemory"]
} else {
wasmMemory = new WebAssembly.Memory({
"initial": INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE,
"maximum": 1073741824 / WASM_PAGE_SIZE
})
}
if (wasmMemory) {
buffer = wasmMemory.buffer
}
INITIAL_TOTAL_MEMORY = buffer.byteLength;
updateGlobalBufferAndViews(buffer);
HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;
function callRuntimeCallbacks(callbacks) {
while (callbacks.length > 0) {
var callback = callbacks.shift();
if (typeof callback == "function") {
callback();
continue
}
var func = callback.func;
if (typeof func === "number") {
if (callback.arg === undefined) {
Module["dynCall_v"](func)
} else {
Module["dynCall_vi"](func, callback.arg)
}
} else {
func(callback.arg === undefined ? null : callback.arg)
}
}
}
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATMAIN__ = [];
var __ATEXIT__ = [];
var __ATPOSTRUN__ = [];
var runtimeInitialized = false;
var runtimeExited = false;
function preRun() {
if (Module["preRun"]) {
if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];
while (Module["preRun"].length) {
addOnPreRun(Module["preRun"].shift())
}
}
callRuntimeCallbacks(__ATPRERUN__)
}
function initRuntime() {
runtimeInitialized = true;
if (!Module["noFSInit"] && !FS.init.initialized) FS.init();
TTY.init();
callRuntimeCallbacks(__ATINIT__)
}
function preMain() {
FS.ignorePermissions = false;
callRuntimeCallbacks(__ATMAIN__)
}
function exitRuntime() {
runtimeExited = true
}
function postRun() {
if (Module["postRun"]) {
if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];
while (Module["postRun"].length) {
addOnPostRun(Module["postRun"].shift())
}
}
callRuntimeCallbacks(__ATPOSTRUN__)
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb)
}
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb)
}
var Math_abs = Math.abs;
var Math_ceil = Math.ceil;
var Math_floor = Math.floor;
var Math_min = Math.min;
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null;
function getUniqueRunDependency(id) {
return id
}
function addRunDependency(id) {
runDependencies++;
if (Module["monitorRunDependencies"]) {
Module["monitorRunDependencies"](runDependencies)
}
}
function removeRunDependency(id) {
runDependencies--;
if (Module["monitorRunDependencies"]) {
Module["monitorRunDependencies"](runDependencies)
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback()
}
}
}
Module["preloadedImages"] = {};
Module["preloadedAudios"] = {};
function abort(what) {
if (Module["onAbort"]) {
Module["onAbort"](what)
}
what += "";
out(what);
err(what);
ABORT = true;
EXITSTATUS = 1;
throw "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."
}
var dataURIPrefix = "data:application/octet-stream;base64,";
function isDataURI(filename) {
return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0
}
var wasmBinaryFile = "data:application/octet-stream;base64,AGFzbQEAAAAB5Cn3A2AEf39/fwBgAAF/YAF/AX9gAn9/AX9gA39/fwF/YAR/f39/AX9gBX9/f39/AX9gA39/fwBgAn9/AGAFf39/fHwAYAR/f398AGACf38BfGABfwBgCH9/f39/f39/AX9gB39/f39/f38Bf2AGf39/f39/AX9gAn98AGACf30AYAZ/f39/f38AYAp/f39/fH9/fHx/AGAFf39/f38AYAZ/f3x8f38AYAV/f3x8fwBgBH9/fHwAYAZ/f398fH8AYAl/f398fHx8f38AYAh/f398fHx8fwBgB39/f3x8fHwAYAZ/f398fHwAYAl/f3x8f3x8fHwAYAh/f3x8f3x8fABgB39/fHx/fHwAYAZ/f3x8f3wAYAd/f39/fHx/AGAGf39/f3x8AGAFf39/f3wAYAh/f39/f3x8fwBgB39/f39/fHwAYAZ/f39/f3wAYAl/f39/f398fH8AYAh/f39/f398fABgB39/f39/f3wAYAd/f3x/f398AGAHf3x/fHx/fwBgBn98f3x8fwBgBH9/fH8AYAd/f39/f39/AGAKf39/fH9/f398fwBgC39/f39/f39/f398AGAKf39/f39/f39/fwBgCX9/f39/f39/fwBgCH9/f39/f39/AGAMf39/f39/f39/f39/AXxgC39/f39/f39/f39/AXxgCn9/f39/f39/f38BfGADf39/AXxgAX8BfGADf398AGAGf39/f3x/AGAFf39/fH8AYAR8f39/AGADfH9/AGAHf39/f399fwBgBn9/f39/fQBgCn9/f3x8fH9/f38AYAl/f398fHx/f38AYAh/f398fHx/fwBgB39/f3x8fH8AYAl/f39/f3x/fH8AYAh/f39/f3x/fABgB39/f39/fH8AYAh/f39/fH9/fABgB39/f398f38AYAd/f39/f39/AXxgB39/fH98f38AYAZ/f3x/fH8AYAl/f398fH9/f3wAYAh/f398fH9/fwBgB39/f3x8f38AYAp/f398fH9/f398AGAJf39/fHx/f39/AGAGf39/f39/AXxgBH9/f3wBfGAEf39/fwF8YAd/f3x8f39/AGADf3x/AGAJf39/f3x/f39/AGAIf39/f3x/f38AYAh/f39/f398fwBgDH9/f39/f39/fXx/fwF/YAt/f39/f39/f318fwF/YAp/f39/f39/f318AX9gCX9/f39/f39/fQF/YAV/f3x8fwF8YAh/f3x/f39/fwBgB39/fH9/f38AYAZ/f3x/f38AYAV/f3x/fwBgCH9/f399f39/AGAHf39/f31/fwBgBn9/f399fwBgBX9/f399AGAEf39/fQBgBn9/f319fwBgBX9/f319AGAIf39/f399fX8AYAd/f39/f319AGAEf399fwBgA39/fQBgAX8BfWAIf39/fH9/f38AYAd/f398f39/AGAGf39/fH9/AGALf39/f398f39/f38AYAp/f39/f3x/f39/AGAJf39/f398f39/AGAIf39/f398f38AYAZ/f399f38AYAV/f399fwBgB39/fHx/f3wAYAh/f3x8f39/fABgDH9/f39/f39/f39/fwF/YAl/f39/fH9/fHwAYAd/f399f39/AGAKf39/f3x8f3x8fwBgCX9/f398fH98fABgCH9/f398fH98AGAEf319fQBgA399fQBgCn9/fX9/f39/f38AYAl/f31/f39/f38AYAh/f31/f39/fwBgB39/fX9/f38AYAZ/f31/f38AYAV/f31/fwBgBX99fX19AGAFf39+f38AYA1/f39/f39/f39/fHx/AGAKf39/f39/f3x8fwBgBH98f38AYAt/f39/f39/f398fABgA39/fwF9YAZ/f39/fX8Bf2ADf31/AGAHf39/f3x/fwF/YAN/f3wBf2AOf39/f399f398f3x/f38Bf2ACf34AYAJ/fwF9YAR/f398AX9gA39+fwBgAABgBH9/f34AYAN/f38BfmACf38BfmAEf39/fwF+YAR/f39/AX1gA39+fwF+YAZ/fH9/f38Bf2AFf39/f34Bf2AFf39/f3wBf2ANf39/f39/f39/f39/fwBgDH9/f39/f39/f39/fwBgAXwBfGABfQF9YAV/f39/fwF9YAV/f39/fwF8YAl/f39/f39/f38Bf2AEf39/fQF/YAp/f39/fHx8fH9/AGAJf39/f3x8fHx/AGAIf39/f3x8fHwAYAd/f39/fHx8AGAKf39/fHx/fHx8fABgCX9/f3x8f3x8fABgCH9/f3x8f3x8AGAHf39/fHx/fABgCX9/f39/f398fABgCH9/f39/f398AGAIf39/fH9/f3wAYAh/f3x/fHx/fwBgB39/fH98fH8AYAt/f39/fH9/f398fwBgDH9/f39/f39/f39/fABgC39/f39/f39/f39/AGANf39/f39/f39/f39/fwF8YAV/fH9/fwBgCH9/f39/f31/AGAHf39/f39/fQBgC39/f398fHx/f39/AGAKf39/f3x8fH9/fwBgCX9/f398fHx/fwBgCH9/f398fHx/AGAJf39/f398f3x/AX9gCH9/f39/fH98AX9gB39/f39/fH8Bf2AGf39/f398AX9gCH9/f398f398AX9gBn9/f398fwF/YAh/f39/f39/fwF8YAh/f398f3x/fwBgB39/f3x/fH8AYAR/f3x8AX9gCn9/f398fH9/f3wAYAl/f39/fHx/f38AYAh/f39/fHx/fwBgC39/f398fH9/f398AGAKf39/f3x8f39/fwBgBX9/f398AXxgCX9/f39/f398fwBgDX9/f39/f39/f318f38Bf2AMf39/f39/f39/fXx/AX9gC39/f39/f39/f318AX9gCn9/f39/f39/f30Bf2AGf39/fHx/AXxgCH9/fH9/f39/AX9gB39/fH9/f38Bf2AGf398f39/AX9gBX9/fH9/AX9gBH9/fH8Bf2AIf39/f31/f38Bf2AHf39/f31/fwF/YAV/f39/fQF/YAZ/f399fX8Bf2AFf39/fX0Bf2AIf39/f399fX8Bf2AHf39/f399fQF/YAN/fH8Bf2ACf3wBf2AEf399fwF/YAN/f30Bf2AMf39/f39/fH9/f39/AGALf39/f39/fH9/f38AYAp/f39/f398f39/AGAJf39/f39/fH9/AGAIf39/f399f38AYAd/f3x8f398AX9gBn9/fHx/fwF/YAV/f3x8fwF/YAh/f3x8f39/fAF/YA1/f39/f39/fH98f39/AX9gC39/f39/fH9/fHx/AGAKf39/f398f398fABgCX9/f39/fH9/fABgB39/f31/f38Bf2AGf39/fX9/AX9gBX9/f31/AX9gCn9/f398fH98fH8Bf2AJf39/f3x8f3x8AX9gCH9/f398fH98AX9gB39/f398fH8Bf2AGf39/f3x8AX9gBH99fX0Bf2ADf319AX9gAn99AX9gCn9/fX9/f39/f38Bf2AJf399f39/f39/AX9gCH9/fX9/f39/AX9gB39/fX9/f38Bf2AGf399f39/AX9gBX9/fX9/AX9gBX99fX19AX9gA3x8fwBgAX8BfmAPf39/f39/f39/f39/f39/AGACfX0BfWAPf39/f31/f31/f39/f39/AGAPf39/f3x/f3x/f39/f39/AGAHf39/f3x/fABgBH99f38Bf2AAAX5gAn9+AX9gBH9+fn8AYAp/f39/f39/f39/AX9gFX9/f39/f39/f39/f39/f39/f398fwBgDH9/f39/f39/f3x8fwBgBX9/f3x/AX9gDn9/f39/f39/f39/f39/AGAGf39/fHx/AX9gA39/fQF9YAl/fX9/f39/f38AYAd/f39/fX19AGAEf31/fwBgDX9/f39/f39/f399f38AYAh/f399fX9/fwF/YAh/f39/f39/fwF9YAl/f39/fX19fX0AYAd/f39/fX99AGAGf39/f319AGALf39/f31/f31/f38AYA1/f39/f39/f39/f398AGAEfHx/fwF/YAd/f39/f398AX9gB3x8fHx/f38Bf2AJfHx8fHx/f39/AX9gGH9/f3x8fHx8fHx8fHx8fHx8fHx8fHx8fwF/YAt/f39/f39/f39/fwF/YAp/fH9/fH98fHx8AGAKf39/f3x8fHx8fwBgA398fABgC39/f39/fH9/f398AGAMf39/f39/f398fHx8AGADfH9/AXxgCX9/f3x/f3x8fwBgA39/fgF+YAV/f39+fwBgBn9/f39+fwBgA39/fAF8YAJ+fwF/YAJ9fwF/YAV/f39/fgBgAXwBfWADf35/AX9gA39/fgF/YAN/f34AYAN+f38Bf2ABfAF/YAJ8fAF8YAJ8fwF8YAF9AX9gBH9/f34BfmAFf35+fn4AYAR+fn5+AX9gAn5+AXxgAn5+AX1gAnx/AX9gA3x8fwF8YAJ9fwF9YAZ/f39/fn4Bf2AHf39/f39+fgF/YAJ+fgF/YAR/fn9/AX9gBn9/f39/fwF9YAt/f39/f3x8fHx/fwBgCn9/f39/fHx8fH8AYAl/f39/f3x8fHwAYAh/f39/f3x8fABgC39/f398fH98fHx8AGAKf39/f3x8f3x8fABgC39/f39/f39/fHx/AGAKf39/f39/f398fABgCX9/f39/f39/fABgCX9/f398f39/fABgCX9/f3x/fHx/fwBgCH9/f3x/fHx/AGAMf39/f398f39/f3x/AGAOf39/f39/f39/f39/f38BfGAJf39/f39/f31/AGAIf39/f39/f30AYAx/f39/f3x8fH9/f38AYAt/f39/f3x8fH9/fwBgCn9/f39/fHx8f38AYAl/f39/f3x8fH8AYAp/f39/f398f3x/AX9gCn9/f39/f3x/fH8AYAl/f39/f398f3wBf2AJf39/f39/fH98AGAIf39/f39/fH8Bf2AJf39/f398f398AX9gCH9/f39/fH9/AX9gCX9/f39/f39/fwF8YAl/f39/fH98f38AYAh/f39/fH98fwBgBX9/f3x8AX9gC39/f39/fHx/f398AGAKf39/f398fH9/fwBgCX9/f39/fHx/fwBgDH9/f39/fHx/f39/fABgC39/f39/fHx/f39/AGAGf39/f398AXxgCn9/f39/f39/fH8AYA5/f39/f39/f39/fXx/fwF/YA1/f39/f39/f39/fXx/AX9gDH9/f39/f39/f399fAF/YAt/f39/f39/f39/fQF/YAd/f39/fHx/AXxgCX9/f3x/f39/fwF/YAl/f398f39/f38AYAh/f398f39/fwF/YAd/f398f39/AX9gBn9/f3x/fwF/YAl/f39/f31/f38Bf2AJf39/f399f39/AGAIf39/f399f38Bf2AHf39/f399fwF/YAZ/f39/f30Bf2AHf39/f319fwF/YAd/f39/fX1/AGAGf39/f319AX9gCX9/f39/f319fwF/YAl/f39/f399fX8AYAh/f39/f399fQF/YAh/f39/f399fQBgDX9/f39/f398f39/f38AYAx/f39/f39/fH9/f38AYAt/f39/f39/fH9/fwBgCn9/f39/f398f38AYAl/f39/f399f38AYAh/f398fH9/fAF/YAh/f398fH9/fABgB39/f3x8f38Bf2AJf39/fHx/f398AX9gDn9/f39/f39/fH98f39/AX9gDX9/f39/f39/f39/f38Bf2AMf39/f39/fH9/fHx/AGALf39/f39/fH9/fHwAYAp/f39/f398f398AGALf39/f398fH98fH8Bf2ALf39/f398fH98fH8AYAp/f39/f3x8f3x8AX9gCn9/f39/fHx/fHwAYAl/f39/f3x8f3wBf2AJf39/f398fH98AGAIf39/f398fH8Bf2AHf39/f398fAF/YAV/f319fQF/YAV/f319fQBgBH9/fX0Bf2AEf399fQBgC39/f31/f39/f39/AX9gC39/f31/f39/f39/AGAKf39/fX9/f39/fwF/YAp/f399f39/f39/AGAJf39/fX9/f39/AX9gCX9/f31/f39/fwBgCH9/f31/f39/AX9gCH9/f31/f39/AGAGf399fX19AX9gBn9/fX19fQBgDn9/f39/f39/f39/fHx/AGAMf39/f39/f39/f3x8AGAPf39/f39/fX9/fH98f39/AX9gAn9/AGAAAGABfwBgCH9/f39/f39/AGADf39/AGAEf39/fwBgAAF/YAd/f39/f39/AGABfwF/YAJ/fwF/YAV/f39/fwBgBH9/fHwBf2AEf39/fwF/YAd/f39/f39/AX9gA39/fwF/YAZ/f39/f38Bf2AFf39/f38Bf2AGf39/f39/AGAFf39/fH8AYAR/f398AGAGf39/fH9/AGAGf39/f398AGAIf39/f398f38AYBV/f39/f39/f39/f39/f39/f39/fH8AYAN/f38BfGADf398AGAJf39/f39/f39/AGALf39/f39/f39/f38AYAd/f39/f398AGAIf39/fX1/fHwAYAp/f399fX9/f3x8AGAHf319f39/fwBgCX9/f3x8fHx/fwBgG39/f39/f39/f39/f39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAR/f31/AGADf399AGADf31/AGAFf39/f38BfWAFf399fX8AYAR/f399AGAEf319fwF/YAt/f39/f39/f39/fwF9YAR/fX1/AX1gBX99f39/AX9gCH9/f399f39/AX1gCH9/f39/f39/AX1gBXx8f39/AGANf39/f39/f39/f39/fwF8YA5/f39/f39/f39/f39/fwF8YAp/f39/f31/f3x/AX9gCHx8fHx8fH9/AGADf3x/AGAMf3x8fHx8fHx8fH9/AGAKf3x/f3x/fHx8fABgCn9/f398fHx8fH8AYAl/f39/f398fH8AYAt/f39/f3x/f39/fABgDH9/f39/f39/fHx8fABgCX9/f398f39/fwBgB398f398f38AYAt/f39/f39/fXx/fwF/YAh/f39/f3x/fABgCn9/f398f398fHwAYAR/fn9/AGACfn4Bf2ADf35+AGABfwF+YAJ/fwF+YAF8AXxgAX0BfQK9DUIDZW52EF9lbXZhbF9uZXdfYXJyYXkAAQNlbnYRX2VtdmFsX3Rha2VfdmFsdWUAAwNlbnYSX2VtdmFsX25ld19jc3RyaW5nAAIDZW52E19lbXZhbF9zZXRfcHJvcGVydHkABwNlbnYNX2VtdmFsX2RlY3JlZgAMA2Vudg1fZW12YWxfaW5jcmVmAAwDZW52GF9lbXZhbF9nZXRfbWV0aG9kX2NhbGxlcgADA2VudhdfZW12YWxfY2FsbF92b2lkX21ldGhvZAAAA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzAKEBA2VudiJfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yABIDZW52JV9lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY2xhc3NfZnVuY3Rpb24ALgNlbnYfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19wcm9wZXJ0eQAxA2Vudh9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uADMDZW52HV9lbWJpbmRfcmVnaXN0ZXJfdmFsdWVfb2JqZWN0ABIDZW52I19lbWJpbmRfcmVnaXN0ZXJfdmFsdWVfb2JqZWN0X2ZpZWxkADEDZW52HV9lbWJpbmRfZmluYWxpemVfdmFsdWVfb2JqZWN0AAwDZW52GV9lbWJpbmRfcmVnaXN0ZXJfZnVuY3Rpb24AEgNlbnYcX2VtYmluZF9yZWdpc3Rlcl92YWx1ZV9hcnJheQASA2VudiRfZW1iaW5kX3JlZ2lzdGVyX3ZhbHVlX2FycmF5X2VsZW1lbnQAMgNlbnYcX2VtYmluZF9maW5hbGl6ZV92YWx1ZV9hcnJheQAMA2VudhlfZW1iaW5kX3JlZ2lzdGVyX2NvbnN0YW50ADkDZW52E19lbXZhbF9nZXRfcHJvcGVydHkAAwNlbnYJX2VtdmFsX2FzADcDZW52Fl9lbXZhbF9ydW5fZGVzdHJ1Y3RvcnMADANlbnYaX2VtYmluZF9yZWdpc3Rlcl9zbWFydF9wdHIAogEDZW52GF9fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbgACA2VudgtfX2N4YV90aHJvdwAHA2VudgdzeXNjb25mAAIDZW52DGdldHRpbWVvZmRheQADA2VudgVyb3VuZACjAQNlbnYLc2NoZWRfeWllbGQAAQNlbnYKX19zeXNjYWxsNQADDXdhc2lfdW5zdGFibGUIZmRfY2xvc2UAAgNlbnYMX19zeXNjYWxsMjIxAAMDZW52C19fc3lzY2FsbDU0AAMNd2FzaV91bnN0YWJsZQhmZF93cml0ZQAFA2VudgZfX2xvY2sADANlbnYIX191bmxvY2sADA13YXNpX3Vuc3RhYmxlB2ZkX3JlYWQABQNlbnYKX19zeXNjYWxsMwADA2VudgpfX3N5c2NhbGw0AAMDZW52BnJvdW5kZgCkAQ13YXNpX3Vuc3RhYmxlEWVudmlyb25fc2l6ZXNfZ2V0AAMNd2FzaV91bnN0YWJsZQtlbnZpcm9uX2dldAADA2Vudg1jbG9ja19nZXR0aW1lAAMDZW52Cl9fbWFwX2ZpbGUAAwNlbnYLX19zeXNjYWxsOTEAAwNlbnYKc3RyZnRpbWVfbAAGA2VudgVhYm9ydACXAQNlbnYWcHRocmVhZF9tdXRleGF0dHJfaW5pdAACA2VudhlwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlAAMDZW52GXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kAAgNlbnYVX2VtYmluZF9yZWdpc3Rlcl92b2lkAAgDZW52FV9lbWJpbmRfcmVnaXN0ZXJfYm9vbAAUA2VudhtfZW1iaW5kX3JlZ2lzdGVyX3N0ZF9zdHJpbmcACANlbnYcX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZwAHA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2VtdmFsAAgDZW52GF9lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcgAUA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0AAcDZW52HF9lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcABwNlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAACA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcABANlbnYLc2V0VGVtcFJldDAADA13YXNpX3Vuc3RhYmxlB2ZkX3NlZWsABgNlbnYGbWVtb3J5AgGAEICAAQNlbnYFdGFibGUBcAC6TQPiasFclwEGCQcKCAAHAAcLCggHCAcHCAgHCLADCAgCBwgIDQ0ODwYFALADsAMACAgIAwyxA7EDsQOxA7EDsQOxA7EDsQOxAwIMAgEDAgQDBQQGBQ8EBwUAAwcIAwgICAgICAgIAgMCAiIAIwcEFAAA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