diff --git "a/demo/ort-phi3/dist/esm/ort.training.wasm.js" "b/demo/ort-phi3/dist/esm/ort.training.wasm.js" new file mode 100644--- /dev/null +++ "b/demo/ort-phi3/dist/esm/ort.training.wasm.js" @@ -0,0 +1,5641 @@ +/*! + * ONNX Runtime Web v1.18.0 + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// common/dist/esm/backend-impl.js +var backends, backendsSortedByPriority, registerBackend, tryResolveAndInitializeBackend, resolveBackendAndExecutionProviders; +var init_backend_impl = __esm({ + "common/dist/esm/backend-impl.js"() { + "use strict"; + backends = /* @__PURE__ */ new Map(); + backendsSortedByPriority = []; + registerBackend = (name, backend, priority) => { + if (backend && typeof backend.init === "function" && typeof backend.createInferenceSessionHandler === "function") { + const currentBackend = backends.get(name); + if (currentBackend === void 0) { + backends.set(name, { backend, priority }); + } else if (currentBackend.priority > priority) { + return; + } else if (currentBackend.priority === priority) { + if (currentBackend.backend !== backend) { + throw new Error(`cannot register backend "${name}" using priority ${priority}`); + } + } + if (priority >= 0) { + const i = backendsSortedByPriority.indexOf(name); + if (i !== -1) { + backendsSortedByPriority.splice(i, 1); + } + for (let i2 = 0; i2 < backendsSortedByPriority.length; i2++) { + if (backends.get(backendsSortedByPriority[i2]).priority <= priority) { + backendsSortedByPriority.splice(i2, 0, name); + return; + } + } + backendsSortedByPriority.push(name); + } + return; + } + throw new TypeError("not a valid backend"); + }; + tryResolveAndInitializeBackend = async (backendName) => { + const backendInfo = backends.get(backendName); + if (!backendInfo) { + return "backend not found."; + } + if (backendInfo.initialized) { + return backendInfo.backend; + } else if (backendInfo.aborted) { + return backendInfo.error; + } else { + const isInitializing = !!backendInfo.initPromise; + try { + if (!isInitializing) { + backendInfo.initPromise = backendInfo.backend.init(backendName); + } + await backendInfo.initPromise; + backendInfo.initialized = true; + return backendInfo.backend; + } catch (e) { + if (!isInitializing) { + backendInfo.error = `${e}`; + backendInfo.aborted = true; + } + return backendInfo.error; + } finally { + delete backendInfo.initPromise; + } + } + }; + resolveBackendAndExecutionProviders = async (options) => { + const eps = options.executionProviders || []; + const backendHints = eps.map((i) => typeof i === "string" ? i : i.name); + const backendNames = backendHints.length === 0 ? backendsSortedByPriority : backendHints; + let backend; + const errors = []; + const availableBackendNames = /* @__PURE__ */ new Set(); + for (const backendName of backendNames) { + const resolveResult = await tryResolveAndInitializeBackend(backendName); + if (typeof resolveResult === "string") { + errors.push({ name: backendName, err: resolveResult }); + } else { + if (!backend) { + backend = resolveResult; + } + if (backend === resolveResult) { + availableBackendNames.add(backendName); + } + } + } + if (!backend) { + throw new Error(`no available backend found. ERR: ${errors.map((e) => `[${e.name}] ${e.err}`).join(", ")}`); + } + for (const { name, err } of errors) { + if (backendHints.includes(name)) { + console.warn(`removing requested execution provider "${name}" from session options because it is not available: ${err}`); + } + } + const filteredEps = eps.filter((i) => availableBackendNames.has(typeof i === "string" ? i : i.name)); + return [ + backend, + new Proxy(options, { + get: (target, prop) => { + if (prop === "executionProviders") { + return filteredEps; + } + return Reflect.get(target, prop); + } + }) + ]; + }; + } +}); + +// common/dist/esm/backend.js +var init_backend = __esm({ + "common/dist/esm/backend.js"() { + "use strict"; + init_backend_impl(); + } +}); + +// common/dist/esm/version.js +var version; +var init_version = __esm({ + "common/dist/esm/version.js"() { + "use strict"; + version = "1.18.0"; + } +}); + +// common/dist/esm/env-impl.js +var logLevelValue, env; +var init_env_impl = __esm({ + "common/dist/esm/env-impl.js"() { + "use strict"; + init_version(); + logLevelValue = "warning"; + env = { + wasm: {}, + webgl: {}, + webgpu: {}, + versions: { common: version }, + set logLevel(value) { + if (value === void 0) { + return; + } + if (typeof value !== "string" || ["verbose", "info", "warning", "error", "fatal"].indexOf(value) === -1) { + throw new Error(`Unsupported logging level: ${value}`); + } + logLevelValue = value; + }, + get logLevel() { + return logLevelValue; + } + }; + Object.defineProperty(env, "logLevel", { enumerable: true }); + } +}); + +// common/dist/esm/env.js +var env2; +var init_env = __esm({ + "common/dist/esm/env.js"() { + "use strict"; + init_env_impl(); + env2 = env; + } +}); + +// common/dist/esm/tensor-conversion-impl.js +var tensorToDataURL, tensorToImageData; +var init_tensor_conversion_impl = __esm({ + "common/dist/esm/tensor-conversion-impl.js"() { + "use strict"; + tensorToDataURL = (tensor, options) => { + const canvas = typeof document !== "undefined" ? document.createElement("canvas") : new OffscreenCanvas(1, 1); + canvas.width = tensor.dims[3]; + canvas.height = tensor.dims[2]; + const pixels2DContext = canvas.getContext("2d"); + if (pixels2DContext != null) { + let width; + let height; + if (options?.tensorLayout !== void 0 && options.tensorLayout === "NHWC") { + width = tensor.dims[2]; + height = tensor.dims[3]; + } else { + width = tensor.dims[3]; + height = tensor.dims[2]; + } + const inputformat = options?.format !== void 0 ? options.format : "RGB"; + const norm = options?.norm; + let normMean; + let normBias; + if (norm === void 0 || norm.mean === void 0) { + normMean = [255, 255, 255, 255]; + } else { + if (typeof norm.mean === "number") { + normMean = [norm.mean, norm.mean, norm.mean, norm.mean]; + } else { + normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 0]; + if (norm.mean[3] !== void 0) { + normMean[3] = norm.mean[3]; + } + } + } + if (norm === void 0 || norm.bias === void 0) { + normBias = [0, 0, 0, 0]; + } else { + if (typeof norm.bias === "number") { + normBias = [norm.bias, norm.bias, norm.bias, norm.bias]; + } else { + normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0]; + if (norm.bias[3] !== void 0) { + normBias[3] = norm.bias[3]; + } + } + } + const stride = height * width; + let rTensorPointer = 0, gTensorPointer = stride, bTensorPointer = stride * 2, aTensorPointer = -1; + if (inputformat === "RGBA") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + aTensorPointer = stride * 3; + } else if (inputformat === "RGB") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + } else if (inputformat === "RBG") { + rTensorPointer = 0; + bTensorPointer = stride; + gTensorPointer = stride * 2; + } + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + const R = (tensor.data[rTensorPointer++] - normBias[0]) * normMean[0]; + const G = (tensor.data[gTensorPointer++] - normBias[1]) * normMean[1]; + const B = (tensor.data[bTensorPointer++] - normBias[2]) * normMean[2]; + const A = aTensorPointer === -1 ? 255 : (tensor.data[aTensorPointer++] - normBias[3]) * normMean[3]; + pixels2DContext.fillStyle = "rgba(" + R + "," + G + "," + B + "," + A + ")"; + pixels2DContext.fillRect(j, i, 1, 1); + } + } + if ("toDataURL" in canvas) { + return canvas.toDataURL(); + } else { + throw new Error("toDataURL is not supported"); + } + } else { + throw new Error("Can not access image data"); + } + }; + tensorToImageData = (tensor, options) => { + const pixels2DContext = typeof document !== "undefined" ? document.createElement("canvas").getContext("2d") : new OffscreenCanvas(1, 1).getContext("2d"); + let image; + if (pixels2DContext != null) { + let width; + let height; + let channels; + if (options?.tensorLayout !== void 0 && options.tensorLayout === "NHWC") { + width = tensor.dims[2]; + height = tensor.dims[1]; + channels = tensor.dims[3]; + } else { + width = tensor.dims[3]; + height = tensor.dims[2]; + channels = tensor.dims[1]; + } + const inputformat = options !== void 0 ? options.format !== void 0 ? options.format : "RGB" : "RGB"; + const norm = options?.norm; + let normMean; + let normBias; + if (norm === void 0 || norm.mean === void 0) { + normMean = [255, 255, 255, 255]; + } else { + if (typeof norm.mean === "number") { + normMean = [norm.mean, norm.mean, norm.mean, norm.mean]; + } else { + normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 255]; + if (norm.mean[3] !== void 0) { + normMean[3] = norm.mean[3]; + } + } + } + if (norm === void 0 || norm.bias === void 0) { + normBias = [0, 0, 0, 0]; + } else { + if (typeof norm.bias === "number") { + normBias = [norm.bias, norm.bias, norm.bias, norm.bias]; + } else { + normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0]; + if (norm.bias[3] !== void 0) { + normBias[3] = norm.bias[3]; + } + } + } + const stride = height * width; + if (options !== void 0) { + if (options.format !== void 0 && (channels === 4 && options.format !== "RGBA") || channels === 3 && (options.format !== "RGB" && options.format !== "BGR")) { + throw new Error("Tensor format doesn't match input tensor dims"); + } + } + const step = 4; + let rImagePointer = 0, gImagePointer = 1, bImagePointer = 2, aImagePointer = 3; + let rTensorPointer = 0, gTensorPointer = stride, bTensorPointer = stride * 2, aTensorPointer = -1; + if (inputformat === "RGBA") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + aTensorPointer = stride * 3; + } else if (inputformat === "RGB") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + } else if (inputformat === "RBG") { + rTensorPointer = 0; + bTensorPointer = stride; + gTensorPointer = stride * 2; + } + image = pixels2DContext.createImageData(width, height); + for (let i = 0; i < height * width; rImagePointer += step, gImagePointer += step, bImagePointer += step, aImagePointer += step, i++) { + image.data[rImagePointer] = (tensor.data[rTensorPointer++] - normBias[0]) * normMean[0]; + image.data[gImagePointer] = (tensor.data[gTensorPointer++] - normBias[1]) * normMean[1]; + image.data[bImagePointer] = (tensor.data[bTensorPointer++] - normBias[2]) * normMean[2]; + image.data[aImagePointer] = aTensorPointer === -1 ? 255 : (tensor.data[aTensorPointer++] - normBias[3]) * normMean[3]; + } + } else { + throw new Error("Can not access image data"); + } + return image; + }; + } +}); + +// common/dist/esm/tensor-factory-impl.js +var bufferToTensor, tensorFromImage, tensorFromTexture, tensorFromGpuBuffer, tensorFromPinnedBuffer; +var init_tensor_factory_impl = __esm({ + "common/dist/esm/tensor-factory-impl.js"() { + "use strict"; + init_tensor_impl(); + bufferToTensor = (buffer, options) => { + if (buffer === void 0) { + throw new Error("Image buffer must be defined"); + } + if (options.height === void 0 || options.width === void 0) { + throw new Error("Image height and width must be defined"); + } + if (options.tensorLayout === "NHWC") { + throw new Error("NHWC Tensor layout is not supported yet"); + } + const { height, width } = options; + const norm = options.norm ?? { mean: 255, bias: 0 }; + let normMean; + let normBias; + if (typeof norm.mean === "number") { + normMean = [norm.mean, norm.mean, norm.mean, norm.mean]; + } else { + normMean = [norm.mean[0], norm.mean[1], norm.mean[2], norm.mean[3] ?? 255]; + } + if (typeof norm.bias === "number") { + normBias = [norm.bias, norm.bias, norm.bias, norm.bias]; + } else { + normBias = [norm.bias[0], norm.bias[1], norm.bias[2], norm.bias[3] ?? 0]; + } + const inputformat = options.format !== void 0 ? options.format : "RGBA"; + const outputformat = options.tensorFormat !== void 0 ? options.tensorFormat !== void 0 ? options.tensorFormat : "RGB" : "RGB"; + const stride = height * width; + const float32Data = outputformat === "RGBA" ? new Float32Array(stride * 4) : new Float32Array(stride * 3); + let step = 4, rImagePointer = 0, gImagePointer = 1, bImagePointer = 2, aImagePointer = 3; + let rTensorPointer = 0, gTensorPointer = stride, bTensorPointer = stride * 2, aTensorPointer = -1; + if (inputformat === "RGB") { + step = 3; + rImagePointer = 0; + gImagePointer = 1; + bImagePointer = 2; + aImagePointer = -1; + } + if (outputformat === "RGBA") { + aTensorPointer = stride * 3; + } else if (outputformat === "RBG") { + rTensorPointer = 0; + bTensorPointer = stride; + gTensorPointer = stride * 2; + } else if (outputformat === "BGR") { + bTensorPointer = 0; + gTensorPointer = stride; + rTensorPointer = stride * 2; + } + for (let i = 0; i < stride; i++, rImagePointer += step, bImagePointer += step, gImagePointer += step, aImagePointer += step) { + float32Data[rTensorPointer++] = (buffer[rImagePointer] + normBias[0]) / normMean[0]; + float32Data[gTensorPointer++] = (buffer[gImagePointer] + normBias[1]) / normMean[1]; + float32Data[bTensorPointer++] = (buffer[bImagePointer] + normBias[2]) / normMean[2]; + if (aTensorPointer !== -1 && aImagePointer !== -1) { + float32Data[aTensorPointer++] = (buffer[aImagePointer] + normBias[3]) / normMean[3]; + } + } + const outputTensor = outputformat === "RGBA" ? new Tensor("float32", float32Data, [1, 4, height, width]) : new Tensor("float32", float32Data, [1, 3, height, width]); + return outputTensor; + }; + tensorFromImage = async (image, options) => { + const isHTMLImageEle = typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement; + const isImageDataEle = typeof ImageData !== "undefined" && image instanceof ImageData; + const isImageBitmap = typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap; + const isString = typeof image === "string"; + let data; + let bufferToTensorOptions = options ?? {}; + const createCanvas = () => { + if (typeof document !== "undefined") { + return document.createElement("canvas"); + } else if (typeof OffscreenCanvas !== "undefined") { + return new OffscreenCanvas(1, 1); + } else { + throw new Error("Canvas is not supported"); + } + }; + const createCanvasContext = (canvas) => { + if (canvas instanceof HTMLCanvasElement) { + return canvas.getContext("2d"); + } else if (canvas instanceof OffscreenCanvas) { + return canvas.getContext("2d"); + } else { + return null; + } + }; + if (isHTMLImageEle) { + const canvas = createCanvas(); + canvas.width = image.width; + canvas.height = image.height; + const pixels2DContext = createCanvasContext(canvas); + if (pixels2DContext != null) { + let height = image.height; + let width = image.width; + if (options !== void 0 && options.resizedHeight !== void 0 && options.resizedWidth !== void 0) { + height = options.resizedHeight; + width = options.resizedWidth; + } + if (options !== void 0) { + bufferToTensorOptions = options; + if (options.tensorFormat !== void 0) { + throw new Error("Image input config format must be RGBA for HTMLImageElement"); + } else { + bufferToTensorOptions.tensorFormat = "RGBA"; + } + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + } else { + bufferToTensorOptions.tensorFormat = "RGBA"; + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + } + pixels2DContext.drawImage(image, 0, 0); + data = pixels2DContext.getImageData(0, 0, width, height).data; + } else { + throw new Error("Can not access image data"); + } + } else if (isImageDataEle) { + let height; + let width; + if (options !== void 0 && options.resizedWidth !== void 0 && options.resizedHeight !== void 0) { + height = options.resizedHeight; + width = options.resizedWidth; + } else { + height = image.height; + width = image.width; + } + if (options !== void 0) { + bufferToTensorOptions = options; + } + bufferToTensorOptions.format = "RGBA"; + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + if (options !== void 0) { + const tempCanvas = createCanvas(); + tempCanvas.width = width; + tempCanvas.height = height; + const pixels2DContext = createCanvasContext(tempCanvas); + if (pixels2DContext != null) { + pixels2DContext.putImageData(image, 0, 0); + data = pixels2DContext.getImageData(0, 0, width, height).data; + } else { + throw new Error("Can not access image data"); + } + } else { + data = image.data; + } + } else if (isImageBitmap) { + if (options === void 0) { + throw new Error("Please provide image config with format for Imagebitmap"); + } + const canvas = createCanvas(); + canvas.width = image.width; + canvas.height = image.height; + const pixels2DContext = createCanvasContext(canvas); + if (pixels2DContext != null) { + const height = image.height; + const width = image.width; + pixels2DContext.drawImage(image, 0, 0, width, height); + data = pixels2DContext.getImageData(0, 0, width, height).data; + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + return bufferToTensor(data, bufferToTensorOptions); + } else { + throw new Error("Can not access image data"); + } + } else if (isString) { + return new Promise((resolve, reject) => { + const canvas = createCanvas(); + const context = createCanvasContext(canvas); + if (!image || !context) { + return reject(); + } + const newImage = new Image(); + newImage.crossOrigin = "Anonymous"; + newImage.src = image; + newImage.onload = () => { + canvas.width = newImage.width; + canvas.height = newImage.height; + context.drawImage(newImage, 0, 0, canvas.width, canvas.height); + const img = context.getImageData(0, 0, canvas.width, canvas.height); + bufferToTensorOptions.height = canvas.height; + bufferToTensorOptions.width = canvas.width; + resolve(bufferToTensor(img.data, bufferToTensorOptions)); + }; + }); + } else { + throw new Error("Input data provided is not supported - aborted tensor creation"); + } + if (data !== void 0) { + return bufferToTensor(data, bufferToTensorOptions); + } else { + throw new Error("Input data provided is not supported - aborted tensor creation"); + } + }; + tensorFromTexture = (texture, options) => { + const { width, height, download, dispose } = options; + const dims = [1, height, width, 4]; + return new Tensor({ location: "texture", type: "float32", texture, dims, download, dispose }); + }; + tensorFromGpuBuffer = (gpuBuffer, options) => { + const { dataType, dims, download, dispose } = options; + return new Tensor({ location: "gpu-buffer", type: dataType ?? "float32", gpuBuffer, dims, download, dispose }); + }; + tensorFromPinnedBuffer = (type, buffer, dims) => new Tensor({ location: "cpu-pinned", type, data: buffer, dims: dims ?? [buffer.length] }); + } +}); + +// common/dist/esm/tensor-impl-type-mapping.js +var NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP, NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP, isTypedArrayChecked, checkTypedArray; +var init_tensor_impl_type_mapping = __esm({ + "common/dist/esm/tensor-impl-type-mapping.js"() { + "use strict"; + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP = /* @__PURE__ */ new Map([ + ["float32", Float32Array], + ["uint8", Uint8Array], + ["int8", Int8Array], + ["uint16", Uint16Array], + ["int16", Int16Array], + ["int32", Int32Array], + ["bool", Uint8Array], + ["float64", Float64Array], + ["uint32", Uint32Array] + ]); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP = /* @__PURE__ */ new Map([ + [Float32Array, "float32"], + [Uint8Array, "uint8"], + [Int8Array, "int8"], + [Uint16Array, "uint16"], + [Int16Array, "int16"], + [Int32Array, "int32"], + [Float64Array, "float64"], + [Uint32Array, "uint32"] + ]); + isTypedArrayChecked = false; + checkTypedArray = () => { + if (!isTypedArrayChecked) { + isTypedArrayChecked = true; + const isBigInt64ArrayAvailable = typeof BigInt64Array !== "undefined" && BigInt64Array.from; + const isBigUint64ArrayAvailable = typeof BigUint64Array !== "undefined" && BigUint64Array.from; + const isFloat16ArrayAvailable = typeof Float16Array !== "undefined" && Float16Array.from; + if (isBigInt64ArrayAvailable) { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("int64", BigInt64Array); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigInt64Array, "int64"); + } + if (isBigUint64ArrayAvailable) { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("uint64", BigUint64Array); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigUint64Array, "uint64"); + } + if (isFloat16ArrayAvailable) { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("float16", Float16Array); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(Float16Array, "float16"); + } else { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("float16", Uint16Array); + } + } + }; + } +}); + +// common/dist/esm/tensor-utils-impl.js +var calculateSize, tensorReshape; +var init_tensor_utils_impl = __esm({ + "common/dist/esm/tensor-utils-impl.js"() { + "use strict"; + init_tensor_impl(); + calculateSize = (dims) => { + let size = 1; + for (let i = 0; i < dims.length; i++) { + const dim = dims[i]; + if (typeof dim !== "number" || !Number.isSafeInteger(dim)) { + throw new TypeError(`dims[${i}] must be an integer, got: ${dim}`); + } + if (dim < 0) { + throw new RangeError(`dims[${i}] must be a non-negative integer, got: ${dim}`); + } + size *= dim; + } + return size; + }; + tensorReshape = (tensor, dims) => { + switch (tensor.location) { + case "cpu": + return new Tensor(tensor.type, tensor.data, dims); + case "cpu-pinned": + return new Tensor({ + location: "cpu-pinned", + data: tensor.data, + type: tensor.type, + dims + }); + case "texture": + return new Tensor({ + location: "texture", + texture: tensor.texture, + type: tensor.type, + dims + }); + case "gpu-buffer": + return new Tensor({ + location: "gpu-buffer", + gpuBuffer: tensor.gpuBuffer, + type: tensor.type, + dims + }); + default: + throw new Error(`tensorReshape: tensor location ${tensor.location} is not supported`); + } + }; + } +}); + +// common/dist/esm/tensor-impl.js +var Tensor; +var init_tensor_impl = __esm({ + "common/dist/esm/tensor-impl.js"() { + "use strict"; + init_tensor_conversion_impl(); + init_tensor_factory_impl(); + init_tensor_impl_type_mapping(); + init_tensor_utils_impl(); + Tensor = class { + /** + * implementation. + */ + constructor(arg0, arg1, arg2) { + checkTypedArray(); + let type; + let dims; + if (typeof arg0 === "object" && "location" in arg0) { + this.dataLocation = arg0.location; + type = arg0.type; + dims = arg0.dims; + switch (arg0.location) { + case "cpu-pinned": { + const expectedTypedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(type); + if (!expectedTypedArrayConstructor) { + throw new TypeError(`unsupported type "${type}" to create tensor from pinned buffer`); + } + if (!(arg0.data instanceof expectedTypedArrayConstructor)) { + throw new TypeError(`buffer should be of type ${expectedTypedArrayConstructor.name}`); + } + this.cpuData = arg0.data; + break; + } + case "texture": { + if (type !== "float32") { + throw new TypeError(`unsupported type "${type}" to create tensor from texture`); + } + this.gpuTextureData = arg0.texture; + this.downloader = arg0.download; + this.disposer = arg0.dispose; + break; + } + case "gpu-buffer": { + if (type !== "float32" && type !== "float16" && type !== "int32" && type !== "int64" && type !== "uint32" && type !== "uint8" && type !== "bool") { + throw new TypeError(`unsupported type "${type}" to create tensor from gpu buffer`); + } + this.gpuBufferData = arg0.gpuBuffer; + this.downloader = arg0.download; + this.disposer = arg0.dispose; + break; + } + default: + throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`); + } + } else { + let data; + let maybeDims; + if (typeof arg0 === "string") { + type = arg0; + maybeDims = arg2; + if (arg0 === "string") { + if (!Array.isArray(arg1)) { + throw new TypeError("A string tensor's data must be a string array."); + } + data = arg1; + } else { + const typedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(arg0); + if (typedArrayConstructor === void 0) { + throw new TypeError(`Unsupported tensor type: ${arg0}.`); + } + if (Array.isArray(arg1)) { + if (arg0 === "float16" && typedArrayConstructor === Uint16Array) { + throw new TypeError("Creating a float16 tensor from number array is not supported. Please use Uint16Array as data."); + } else if (arg0 === "uint64" || arg0 === "int64") { + data = typedArrayConstructor.from(arg1, BigInt); + } else { + data = typedArrayConstructor.from(arg1); + } + } else if (arg1 instanceof typedArrayConstructor) { + data = arg1; + } else { + throw new TypeError(`A ${type} tensor's data must be type of ${typedArrayConstructor}`); + } + } + } else { + maybeDims = arg1; + if (Array.isArray(arg0)) { + if (arg0.length === 0) { + throw new TypeError("Tensor type cannot be inferred from an empty array."); + } + const firstElementType = typeof arg0[0]; + if (firstElementType === "string") { + type = "string"; + data = arg0; + } else if (firstElementType === "boolean") { + type = "bool"; + data = Uint8Array.from(arg0); + } else { + throw new TypeError(`Invalid element type of data array: ${firstElementType}.`); + } + } else { + const mappedType = NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.get(arg0.constructor); + if (mappedType === void 0) { + throw new TypeError(`Unsupported type for tensor data: ${arg0.constructor}.`); + } + type = mappedType; + data = arg0; + } + } + if (maybeDims === void 0) { + maybeDims = [data.length]; + } else if (!Array.isArray(maybeDims)) { + throw new TypeError("A tensor's dims must be a number array"); + } + dims = maybeDims; + this.cpuData = data; + this.dataLocation = "cpu"; + } + const size = calculateSize(dims); + if (this.cpuData && size !== this.cpuData.length) { + throw new Error(`Tensor's size(${size}) does not match data length(${this.cpuData.length}).`); + } + this.type = type; + this.dims = dims; + this.size = size; + } + // #endregion + // #region factory + static async fromImage(image, options) { + return tensorFromImage(image, options); + } + static fromTexture(texture, options) { + return tensorFromTexture(texture, options); + } + static fromGpuBuffer(gpuBuffer, options) { + return tensorFromGpuBuffer(gpuBuffer, options); + } + static fromPinnedBuffer(type, buffer, dims) { + return tensorFromPinnedBuffer(type, buffer, dims); + } + // #endregion + // #region conversions + toDataURL(options) { + return tensorToDataURL(this, options); + } + toImageData(options) { + return tensorToImageData(this, options); + } + // #endregion + // #region properties + get data() { + this.ensureValid(); + if (!this.cpuData) { + throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly."); + } + return this.cpuData; + } + get location() { + return this.dataLocation; + } + get texture() { + this.ensureValid(); + if (!this.gpuTextureData) { + throw new Error("The data is not stored as a WebGL texture."); + } + return this.gpuTextureData; + } + get gpuBuffer() { + this.ensureValid(); + if (!this.gpuBufferData) { + throw new Error("The data is not stored as a WebGPU buffer."); + } + return this.gpuBufferData; + } + // #endregion + // #region methods + async getData(releaseData) { + this.ensureValid(); + switch (this.dataLocation) { + case "cpu": + case "cpu-pinned": + return this.data; + case "texture": + case "gpu-buffer": { + if (!this.downloader) { + throw new Error("The current tensor is not created with a specified data downloader."); + } + if (this.isDownloading) { + throw new Error("The current tensor is being downloaded."); + } + try { + this.isDownloading = true; + const data = await this.downloader(); + this.downloader = void 0; + this.dataLocation = "cpu"; + this.cpuData = data; + if (releaseData && this.disposer) { + this.disposer(); + this.disposer = void 0; + } + return data; + } finally { + this.isDownloading = false; + } + } + default: + throw new Error(`cannot get data from location: ${this.dataLocation}`); + } + } + dispose() { + if (this.isDownloading) { + throw new Error("The current tensor is being downloaded."); + } + if (this.disposer) { + this.disposer(); + this.disposer = void 0; + } + this.cpuData = void 0; + this.gpuTextureData = void 0; + this.gpuBufferData = void 0; + this.downloader = void 0; + this.isDownloading = void 0; + this.dataLocation = "none"; + } + // #endregion + // #region tensor utilities + ensureValid() { + if (this.dataLocation === "none") { + throw new Error("The tensor is disposed."); + } + } + reshape(dims) { + this.ensureValid(); + if (this.downloader || this.disposer) { + throw new Error("Cannot reshape a tensor that owns GPU resource."); + } + return tensorReshape(this, dims); + } + }; + } +}); + +// common/dist/esm/tensor.js +var Tensor2; +var init_tensor = __esm({ + "common/dist/esm/tensor.js"() { + "use strict"; + init_tensor_impl(); + Tensor2 = Tensor; + } +}); + +// common/dist/esm/trace.js +var TRACE, TRACE_FUNC, TRACE_FUNC_BEGIN, TRACE_FUNC_END; +var init_trace = __esm({ + "common/dist/esm/trace.js"() { + "use strict"; + init_env_impl(); + TRACE = (deviceType, label) => { + if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) { + return; + } + console.timeStamp(`${deviceType}::ORT::${label}`); + }; + TRACE_FUNC = (msg, extraMsg) => { + const stack = new Error().stack?.split(/\r\n|\r|\n/g) || []; + let hasTraceFunc = false; + for (let i = 0; i < stack.length; i++) { + if (hasTraceFunc && !stack[i].includes("TRACE_FUNC")) { + let label = `FUNC_${msg}::${stack[i].trim().split(" ")[1]}`; + if (extraMsg) { + label += `::${extraMsg}`; + } + TRACE("CPU", label); + return; + } + if (stack[i].includes("TRACE_FUNC")) { + hasTraceFunc = true; + } + } + }; + TRACE_FUNC_BEGIN = (extraMsg) => { + if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) { + return; + } + TRACE_FUNC("BEGIN", extraMsg); + }; + TRACE_FUNC_END = (extraMsg) => { + if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) { + return; + } + TRACE_FUNC("END", extraMsg); + }; + } +}); + +// common/dist/esm/inference-session-impl.js +var InferenceSession; +var init_inference_session_impl = __esm({ + "common/dist/esm/inference-session-impl.js"() { + "use strict"; + init_backend_impl(); + init_tensor(); + init_trace(); + InferenceSession = class _InferenceSession { + constructor(handler) { + this.handler = handler; + } + async run(feeds, arg1, arg2) { + TRACE_FUNC_BEGIN(); + const fetches = {}; + let options = {}; + if (typeof feeds !== "object" || feeds === null || feeds instanceof Tensor2 || Array.isArray(feeds)) { + throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values."); + } + let isFetchesEmpty = true; + if (typeof arg1 === "object") { + if (arg1 === null) { + throw new TypeError("Unexpected argument[1]: cannot be null."); + } + if (arg1 instanceof Tensor2) { + throw new TypeError("'fetches' cannot be a Tensor"); + } + if (Array.isArray(arg1)) { + if (arg1.length === 0) { + throw new TypeError("'fetches' cannot be an empty array."); + } + isFetchesEmpty = false; + for (const name of arg1) { + if (typeof name !== "string") { + throw new TypeError("'fetches' must be a string array or an object."); + } + if (this.outputNames.indexOf(name) === -1) { + throw new RangeError(`'fetches' contains invalid output name: ${name}.`); + } + fetches[name] = null; + } + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + let isFetches = false; + const arg1Keys = Object.getOwnPropertyNames(arg1); + for (const name of this.outputNames) { + if (arg1Keys.indexOf(name) !== -1) { + const v = arg1[name]; + if (v === null || v instanceof Tensor2) { + isFetches = true; + isFetchesEmpty = false; + fetches[name] = v; + } + } + } + if (isFetches) { + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + options = arg1; + } + } + } else if (typeof arg1 !== "undefined") { + throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'."); + } + for (const name of this.inputNames) { + if (typeof feeds[name] === "undefined") { + throw new Error(`input '${name}' is missing in 'feeds'.`); + } + } + if (isFetchesEmpty) { + for (const name of this.outputNames) { + fetches[name] = null; + } + } + const results = await this.handler.run(feeds, fetches, options); + const returnValue = {}; + for (const key in results) { + if (Object.hasOwnProperty.call(results, key)) { + const result = results[key]; + if (result instanceof Tensor2) { + returnValue[key] = result; + } else { + returnValue[key] = new Tensor2(result.type, result.data, result.dims); + } + } + } + TRACE_FUNC_END(); + return returnValue; + } + async release() { + return this.handler.dispose(); + } + static async create(arg0, arg1, arg2, arg3) { + TRACE_FUNC_BEGIN(); + let filePathOrUint8Array; + let options = {}; + if (typeof arg0 === "string") { + filePathOrUint8Array = arg0; + if (typeof arg1 === "object" && arg1 !== null) { + options = arg1; + } else if (typeof arg1 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else if (arg0 instanceof Uint8Array) { + filePathOrUint8Array = arg0; + if (typeof arg1 === "object" && arg1 !== null) { + options = arg1; + } else if (typeof arg1 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else if (arg0 instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && arg0 instanceof SharedArrayBuffer) { + const buffer = arg0; + let byteOffset = 0; + let byteLength = arg0.byteLength; + if (typeof arg1 === "object" && arg1 !== null) { + options = arg1; + } else if (typeof arg1 === "number") { + byteOffset = arg1; + if (!Number.isSafeInteger(byteOffset)) { + throw new RangeError("'byteOffset' must be an integer."); + } + if (byteOffset < 0 || byteOffset >= buffer.byteLength) { + throw new RangeError(`'byteOffset' is out of range [0, ${buffer.byteLength}).`); + } + byteLength = arg0.byteLength - byteOffset; + if (typeof arg2 === "number") { + byteLength = arg2; + if (!Number.isSafeInteger(byteLength)) { + throw new RangeError("'byteLength' must be an integer."); + } + if (byteLength <= 0 || byteOffset + byteLength > buffer.byteLength) { + throw new RangeError(`'byteLength' is out of range (0, ${buffer.byteLength - byteOffset}].`); + } + if (typeof arg3 === "object" && arg3 !== null) { + options = arg3; + } else if (typeof arg3 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'byteLength' must be a number."); + } + } else if (typeof arg1 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + filePathOrUint8Array = new Uint8Array(buffer, byteOffset, byteLength); + } else { + throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'."); + } + const [backend, optionsWithValidatedEPs] = await resolveBackendAndExecutionProviders(options); + const handler = await backend.createInferenceSessionHandler(filePathOrUint8Array, optionsWithValidatedEPs); + TRACE_FUNC_END(); + return new _InferenceSession(handler); + } + startProfiling() { + this.handler.startProfiling(); + } + endProfiling() { + this.handler.endProfiling(); + } + get inputNames() { + return this.handler.inputNames; + } + get outputNames() { + return this.handler.outputNames; + } + }; + } +}); + +// common/dist/esm/inference-session.js +var InferenceSession2; +var init_inference_session = __esm({ + "common/dist/esm/inference-session.js"() { + "use strict"; + init_inference_session_impl(); + InferenceSession2 = InferenceSession; + } +}); + +// common/dist/esm/tensor-conversion.js +var init_tensor_conversion = __esm({ + "common/dist/esm/tensor-conversion.js"() { + "use strict"; + } +}); + +// common/dist/esm/tensor-factory.js +var init_tensor_factory = __esm({ + "common/dist/esm/tensor-factory.js"() { + "use strict"; + } +}); + +// common/dist/esm/onnx-model.js +var init_onnx_model = __esm({ + "common/dist/esm/onnx-model.js"() { + "use strict"; + } +}); + +// common/dist/esm/onnx-value.js +var init_onnx_value = __esm({ + "common/dist/esm/onnx-value.js"() { + "use strict"; + } +}); + +// common/dist/esm/training-session-impl.js +var noBackendErrMsg, TrainingSession; +var init_training_session_impl = __esm({ + "common/dist/esm/training-session-impl.js"() { + "use strict"; + init_backend_impl(); + init_tensor(); + noBackendErrMsg = "Training backend could not be resolved. Make sure you're using the correct configuration & WebAssembly files."; + TrainingSession = class _TrainingSession { + constructor(handler, hasOptimizerModel, hasEvalModel) { + this.handler = handler; + this.hasOptimizerModel = hasOptimizerModel; + this.hasEvalModel = hasEvalModel; + } + get trainingInputNames() { + return this.handler.inputNames; + } + get trainingOutputNames() { + return this.handler.outputNames; + } + get evalInputNames() { + if (this.hasEvalModel) { + return this.handler.evalInputNames; + } else { + throw new Error("This training session has no evalModel loaded."); + } + } + get evalOutputNames() { + if (this.hasEvalModel) { + return this.handler.evalOutputNames; + } else { + throw new Error("This training session has no evalModel loaded."); + } + } + static async create(trainingOptions, sessionOptions) { + const evalModel = trainingOptions.evalModel || ""; + const optimizerModel = trainingOptions.optimizerModel || ""; + const options = sessionOptions || {}; + const [backend, optionsWithValidatedEPs] = await resolveBackendAndExecutionProviders(options); + if (backend.createTrainingSessionHandler) { + const handler = await backend.createTrainingSessionHandler(trainingOptions.checkpointState, trainingOptions.trainModel, evalModel, optimizerModel, optionsWithValidatedEPs); + return new _TrainingSession(handler, !!trainingOptions.optimizerModel, !!trainingOptions.evalModel); + } else { + throw new Error(noBackendErrMsg); + } + } + /** + * Helper function for runTrainStep and future runStep methods that handles the type-narrowing conversion from + * the given parameters to SessionHandler.FetchesType and RunOptions. + * + * @param inputNames the feeds object is checked that they contain all input names in the provided list of input + * names. + * @param outputNames the fetches object is checked that their keys match up with valid names in the list of output + * names. + * @param feeds the required input + * @param arg1 narrowed & converted into the SessionHandler.FetchesType or RunOptions object + * @param arg2 optional RunOptions object. + * @returns + */ + typeNarrowingForRunStep(inputNames, outputNames, feeds, arg1, arg2) { + const fetches = {}; + let options = {}; + if (typeof feeds !== "object" || feeds === null || feeds instanceof Tensor2 || Array.isArray(feeds)) { + throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values."); + } + let isFetchesEmpty = true; + if (typeof arg1 === "object") { + if (arg1 === null) { + throw new TypeError("Unexpected argument[1]: cannot be null."); + } + if (arg1 instanceof Tensor2) { + throw new TypeError("'fetches' cannot be a Tensor"); + } + if (Array.isArray(arg1)) { + if (arg1.length === 0) { + throw new TypeError("'fetches' cannot be an empty array."); + } + isFetchesEmpty = false; + for (const name of arg1) { + if (typeof name !== "string") { + throw new TypeError("'fetches' must be a string array or an object."); + } + if (outputNames.indexOf(name) === -1) { + throw new RangeError(`'fetches' contains invalid output name: ${name}.`); + } + fetches[name] = null; + } + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + let isFetches = false; + const arg1Keys = Object.getOwnPropertyNames(arg1); + for (const name of outputNames) { + if (arg1Keys.indexOf(name) !== -1) { + const v = arg1[name]; + if (v === null || v instanceof Tensor2) { + isFetches = true; + isFetchesEmpty = false; + fetches[name] = v; + } + } + } + if (isFetches) { + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + options = arg1; + } + } + } else if (typeof arg1 !== "undefined") { + throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'."); + } + for (const name of inputNames) { + if (typeof feeds[name] === "undefined") { + throw new Error(`input '${name}' is missing in 'feeds'.`); + } + } + if (isFetchesEmpty) { + for (const name of outputNames) { + fetches[name] = null; + } + } + return [fetches, options]; + } + /** + * Helper method for runTrainStep and any other runStep methods. Takes the ReturnType result from the SessionHandler + * and changes it into a map of Tensors. + * + * @param results + * @returns + */ + convertHandlerReturnTypeToMapOfTensors(results) { + const returnValue = {}; + for (const key in results) { + if (Object.hasOwnProperty.call(results, key)) { + const result = results[key]; + if (result instanceof Tensor2) { + returnValue[key] = result; + } else { + returnValue[key] = new Tensor2(result.type, result.data, result.dims); + } + } + } + return returnValue; + } + async lazyResetGrad() { + await this.handler.lazyResetGrad(); + } + async runTrainStep(feeds, arg1, arg2) { + const [fetches, options] = this.typeNarrowingForRunStep(this.trainingInputNames, this.trainingOutputNames, feeds, arg1, arg2); + const results = await this.handler.runTrainStep(feeds, fetches, options); + return this.convertHandlerReturnTypeToMapOfTensors(results); + } + async runOptimizerStep(options) { + if (this.hasOptimizerModel) { + await this.handler.runOptimizerStep(options || {}); + } else { + throw new Error("This TrainingSession has no OptimizerModel loaded."); + } + } + async runEvalStep(feeds, arg1, arg2) { + if (this.hasEvalModel) { + const [fetches, options] = this.typeNarrowingForRunStep(this.evalInputNames, this.evalOutputNames, feeds, arg1, arg2); + const results = await this.handler.runEvalStep(feeds, fetches, options); + return this.convertHandlerReturnTypeToMapOfTensors(results); + } else { + throw new Error("This TrainingSession has no EvalModel loaded."); + } + } + async getParametersSize(trainableOnly = true) { + return this.handler.getParametersSize(trainableOnly); + } + async loadParametersBuffer(array, trainableOnly = true) { + const paramsSize = await this.getParametersSize(trainableOnly); + if (array.length !== 4 * paramsSize) { + throw new Error("Size of the buffer passed into loadParametersBuffer must match the number of parameters in the model. Please use getParametersSize method to check."); + } + return this.handler.loadParametersBuffer(array, trainableOnly); + } + async getContiguousParameters(trainableOnly = true) { + return this.handler.getContiguousParameters(trainableOnly); + } + async release() { + return this.handler.dispose(); + } + }; + } +}); + +// common/dist/esm/training-session.js +var TrainingSession2; +var init_training_session = __esm({ + "common/dist/esm/training-session.js"() { + "use strict"; + init_training_session_impl(); + TrainingSession2 = TrainingSession; + } +}); + +// common/dist/esm/index.js +var esm_exports = {}; +__export(esm_exports, { + InferenceSession: () => InferenceSession2, + TRACE: () => TRACE, + TRACE_FUNC_BEGIN: () => TRACE_FUNC_BEGIN, + TRACE_FUNC_END: () => TRACE_FUNC_END, + Tensor: () => Tensor2, + TrainingSession: () => TrainingSession2, + env: () => env2, + registerBackend: () => registerBackend +}); +var init_esm = __esm({ + "common/dist/esm/index.js"() { + "use strict"; + init_backend(); + init_env(); + init_inference_session(); + init_tensor(); + init_tensor_conversion(); + init_tensor_factory(); + init_trace(); + init_onnx_model(); + init_onnx_value(); + init_training_session(); + } +}); + +// nodejs-ignore:node:os +var cpus; +var init_node_os = __esm({ + "nodejs-ignore:node:os"() { + cpus = void 0; + } +}); + +// nodejs-ignore:node:path +var join; +var init_node_path = __esm({ + "nodejs-ignore:node:path"() { + join = void 0; + } +}); + +// nodejs-ignore:fs +var fs_exports = {}; +__export(fs_exports, { + createReadStream: () => createReadStream, + readFile: () => readFile, + readFileSync: () => readFileSync +}); +var readFile, readFileSync, createReadStream; +var init_fs = __esm({ + "nodejs-ignore:fs"() { + readFile = void 0; + readFileSync = void 0; + createReadStream = void 0; + } +}); + +// nodejs-ignore:path +var path_exports = {}; +__export(path_exports, { + join: () => join2 +}); +var join2; +var init_path = __esm({ + "nodejs-ignore:path"() { + join2 = void 0; + } +}); + +// web/lib/wasm/binding/ort-training-wasm-simd.js +var require_ort_training_wasm_simd = __commonJS({ + "web/lib/wasm/binding/ort-training-wasm-simd.js"(exports, module) { + "use strict"; + var ortWasm = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(moduleArg = {}) { + var d = moduleArg, k, l; + d.ready = new Promise((a, b) => { + k = a; + l = b; + }); + var r = Object.assign({}, d), v = "./this.program", aa = "object" == typeof window, x = "function" == typeof importScripts, ba = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, y = "", A, B, C; + if (ba) { + var fs = (init_fs(), __toCommonJS(fs_exports)), D = (init_path(), __toCommonJS(path_exports)); + y = x ? D.dirname(y) + "/" : __dirname + "/"; + A = (a, b) => { + a = a.startsWith("file://") ? new URL(a) : D.normalize(a); + return fs.readFileSync(a, b ? void 0 : "utf8"); + }; + C = (a) => { + a = A(a, true); + a.buffer || (a = new Uint8Array(a)); + return a; + }; + B = (a, b, c, f = true) => { + a = a.startsWith("file://") ? new URL(a) : D.normalize(a); + fs.readFile(a, f ? void 0 : "utf8", (g, h) => { + g ? c(g) : b(f ? h.buffer : h); + }); + }; + !d.thisProgram && 1 < process.argv.length && (v = process.argv[1].replace(/\\/g, "/")); + process.argv.slice(2); + d.inspect = () => "[Emscripten Module object]"; + } else if (aa || x) + x ? y = self.location.href : "undefined" != typeof document && document.currentScript && (y = document.currentScript.src), _scriptDir && (y = _scriptDir), 0 !== y.indexOf("blob:") ? y = y.substr(0, y.replace(/[?#].*/, "").lastIndexOf("/") + 1) : y = "", A = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.send(null); + return b.responseText; + }, x && (C = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.responseType = "arraybuffer"; + b.send(null); + return new Uint8Array(b.response); + }), B = (a, b, c) => { + var f = new XMLHttpRequest(); + f.open("GET", a, true); + f.responseType = "arraybuffer"; + f.onload = () => { + 200 == f.status || 0 == f.status && f.response ? b(f.response) : c(); + }; + f.onerror = c; + f.send(null); + }; + var ca = d.print || console.log.bind(console), E = d.printErr || console.error.bind(console); + Object.assign(d, r); + r = null; + d.thisProgram && (v = d.thisProgram); + var F; + d.wasmBinary && (F = d.wasmBinary); + var noExitRuntime = d.noExitRuntime || true; + "object" != typeof WebAssembly && G("no native wasm support detected"); + var H, I, da = false, J, K, L, M; + function ea() { + var a = H.buffer; + d.HEAP8 = J = new Int8Array(a); + d.HEAP16 = new Int16Array(a); + d.HEAP32 = L = new Int32Array(a); + d.HEAPU8 = K = new Uint8Array(a); + d.HEAPU16 = new Uint16Array(a); + d.HEAPU32 = M = new Uint32Array(a); + d.HEAPF32 = new Float32Array(a); + d.HEAPF64 = new Float64Array(a); + } + var fa = [], ha = [], ia = []; + function ja() { + var a = d.preRun.shift(); + fa.unshift(a); + } + var N = 0, O = null, P = null; + function G(a) { + if (d.onAbort) + d.onAbort(a); + a = "Aborted(" + a + ")"; + E(a); + da = true; + a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info."); + l(a); + throw a; + } + function ka(a) { + return a.startsWith("data:application/octet-stream;base64,"); + } + var Q; + Q = "ort-training-wasm-simd.wasm"; + if (!ka(Q)) { + var la = Q; + Q = d.locateFile ? d.locateFile(la, y) : y + la; + } + function ma(a) { + if (a == Q && F) + return new Uint8Array(F); + if (C) + return C(a); + throw "both async and sync fetching of the wasm failed"; + } + function na(a) { + if (!F && (aa || x)) { + if ("function" == typeof fetch && !a.startsWith("file://")) + return fetch(a, { credentials: "same-origin" }).then((b) => { + if (!b.ok) + throw "failed to load wasm binary file at '" + a + "'"; + return b.arrayBuffer(); + }).catch(() => ma(a)); + if (B) + return new Promise((b, c) => { + B(a, (f) => b(new Uint8Array(f)), c); + }); + } + return Promise.resolve().then(() => ma(a)); + } + function oa(a, b, c) { + return na(a).then((f) => WebAssembly.instantiate(f, b)).then((f) => f).then(c, (f) => { + E("failed to asynchronously prepare wasm: " + f); + G(f); + }); + } + function pa(a, b) { + var c = Q; + return F || "function" != typeof WebAssembly.instantiateStreaming || ka(c) || c.startsWith("file://") || ba || "function" != typeof fetch ? oa(c, a, b) : fetch(c, { credentials: "same-origin" }).then((f) => WebAssembly.instantiateStreaming(f, a).then(b, function(g) { + E("wasm streaming compile failed: " + g); + E("falling back to ArrayBuffer instantiation"); + return oa(c, a, b); + })); + } + var R, S = (a) => { + for (; 0 < a.length; ) + a.shift()(d); + }; + function qa(a) { + this.Ha = a - 24; + this.La = function(b) { + M[this.Ha + 4 >> 2 >>> 0] = b; + }; + this.Ka = function(b) { + M[this.Ha + 8 >> 2 >>> 0] = b; + }; + this.Ia = function(b, c) { + this.Ja(); + this.La(b); + this.Ka(c); + }; + this.Ja = function() { + M[this.Ha + 16 >> 2 >>> 0] = 0; + }; + } + var ra = 0, sa = 0, ta = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, ua = (a, b, c) => { + b >>>= 0; + var f = b + c; + for (c = b; a[c] && !(c >= f); ) + ++c; + if (16 < c - b && a.buffer && ta) + return ta.decode(a.subarray(b, c)); + for (f = ""; b < c; ) { + var g = a[b++]; + if (g & 128) { + var h = a[b++] & 63; + if (192 == (g & 224)) + f += String.fromCharCode((g & 31) << 6 | h); + else { + var m = a[b++] & 63; + g = 224 == (g & 240) ? (g & 15) << 12 | h << 6 | m : (g & 7) << 18 | h << 12 | m << 6 | a[b++] & 63; + 65536 > g ? f += String.fromCharCode(g) : (g -= 65536, f += String.fromCharCode(55296 | g >> 10, 56320 | g & 1023)); + } + } else + f += String.fromCharCode(g); + } + return f; + }, T = (a, b) => (a >>>= 0) ? ua(K, a, b) : "", U = (a) => { + for (var b = 0, c = 0; c < a.length; ++c) { + var f = a.charCodeAt(c); + 127 >= f ? b++ : 2047 >= f ? b += 2 : 55296 <= f && 57343 >= f ? (b += 4, ++c) : b += 3; + } + return b; + }, V = (a, b, c, f) => { + c >>>= 0; + if (!(0 < f)) + return 0; + var g = c; + f = c + f - 1; + for (var h = 0; h < a.length; ++h) { + var m = a.charCodeAt(h); + if (55296 <= m && 57343 >= m) { + var q = a.charCodeAt(++h); + m = 65536 + ((m & 1023) << 10) | q & 1023; + } + if (127 >= m) { + if (c >= f) + break; + b[c++ >>> 0] = m; + } else { + if (2047 >= m) { + if (c + 1 >= f) + break; + b[c++ >>> 0] = 192 | m >> 6; + } else { + if (65535 >= m) { + if (c + 2 >= f) + break; + b[c++ >>> 0] = 224 | m >> 12; + } else { + if (c + 3 >= f) + break; + b[c++ >>> 0] = 240 | m >> 18; + b[c++ >>> 0] = 128 | m >> 12 & 63; + } + b[c++ >>> 0] = 128 | m >> 6 & 63; + } + b[c++ >>> 0] = 128 | m & 63; + } + } + b[c >>> 0] = 0; + return c - g; + }, W = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), va = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], wa = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], Ba = (a) => { + var b = U(a) + 1, c = Aa(b); + c && V(a, K, c, b); + return c; + }, X = {}, Ca = () => { + if (!Y) { + var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace( + "-", + "_" + ) + ".UTF-8", _: v || "./this.program" }, b; + for (b in X) + void 0 === X[b] ? delete a[b] : a[b] = X[b]; + var c = []; + for (b in a) + c.push(`${b}=${a[b]}`); + Y = c; + } + return Y; + }, Y, Da = [null, [], []], Ea = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Fa = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function Ga(a) { + var b = Array(U(a) + 1); + V(a, b, 0, b.length); + return b; + } + function Ha(a, b, c, f) { + function g(e, n, p) { + for (e = "number" == typeof e ? e.toString() : e || ""; e.length < n; ) + e = p[0] + e; + return e; + } + function h(e, n) { + return g(e, n, "0"); + } + function m(e, n) { + function p(xa) { + return 0 > xa ? -1 : 0 < xa ? 1 : 0; + } + var z; + 0 === (z = p(e.getFullYear() - n.getFullYear())) && 0 === (z = p(e.getMonth() - n.getMonth())) && (z = p(e.getDate() - n.getDate())); + return z; + } + function q(e) { + switch (e.getDay()) { + case 0: + return new Date(e.getFullYear() - 1, 11, 29); + case 1: + return e; + case 2: + return new Date(e.getFullYear(), 0, 3); + case 3: + return new Date( + e.getFullYear(), + 0, + 2 + ); + case 4: + return new Date(e.getFullYear(), 0, 1); + case 5: + return new Date(e.getFullYear() - 1, 11, 31); + case 6: + return new Date(e.getFullYear() - 1, 11, 30); + } + } + function w(e) { + var n = e.Ca; + for (e = new Date(new Date(e.Da + 1900, 0, 1).getTime()); 0 < n; ) { + var p = e.getMonth(), z = (W(e.getFullYear()) ? Ea : Fa)[p]; + if (n > z - e.getDate()) + n -= z - e.getDate() + 1, e.setDate(1), 11 > p ? e.setMonth(p + 1) : (e.setMonth(0), e.setFullYear(e.getFullYear() + 1)); + else { + e.setDate(e.getDate() + n); + break; + } + } + p = new Date(e.getFullYear() + 1, 0, 4); + n = q(new Date( + e.getFullYear(), + 0, + 4 + )); + p = q(p); + return 0 >= m(n, e) ? 0 >= m(p, e) ? e.getFullYear() + 1 : e.getFullYear() : e.getFullYear() - 1; + } + a >>>= 0; + b >>>= 0; + c >>>= 0; + f >>>= 0; + var t = L[f + 40 >> 2 >>> 0]; + f = { Oa: L[f >> 2 >>> 0], Na: L[f + 4 >> 2 >>> 0], Ea: L[f + 8 >> 2 >>> 0], Ga: L[f + 12 >> 2 >>> 0], Fa: L[f + 16 >> 2 >>> 0], Da: L[f + 20 >> 2 >>> 0], xa: L[f + 24 >> 2 >>> 0], Ca: L[f + 28 >> 2 >>> 0], Qa: L[f + 32 >> 2 >>> 0], Ma: L[f + 36 >> 2 >>> 0], Pa: t ? T(t) : "" }; + c = T(c); + t = { + "%c": "%a %b %d %H:%M:%S %Y", + "%D": "%m/%d/%y", + "%F": "%Y-%m-%d", + "%h": "%b", + "%r": "%I:%M:%S %p", + "%R": "%H:%M", + "%T": "%H:%M:%S", + "%x": "%m/%d/%y", + "%X": "%H:%M:%S", + "%Ec": "%c", + "%EC": "%C", + "%Ex": "%m/%d/%y", + "%EX": "%H:%M:%S", + "%Ey": "%y", + "%EY": "%Y", + "%Od": "%d", + "%Oe": "%e", + "%OH": "%H", + "%OI": "%I", + "%Om": "%m", + "%OM": "%M", + "%OS": "%S", + "%Ou": "%u", + "%OU": "%U", + "%OV": "%V", + "%Ow": "%w", + "%OW": "%W", + "%Oy": "%y" + }; + for (var u in t) + c = c.replace(new RegExp(u, "g"), t[u]); + var ya = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), za = "January February March April May June July August September October November December".split(" "); + t = { "%a": (e) => ya[e.xa].substring(0, 3), "%A": (e) => ya[e.xa], "%b": (e) => za[e.Fa].substring(0, 3), "%B": (e) => za[e.Fa], "%C": (e) => h((e.Da + 1900) / 100 | 0, 2), "%d": (e) => h(e.Ga, 2), "%e": (e) => g(e.Ga, 2, " "), "%g": (e) => w(e).toString().substring(2), "%G": (e) => w(e), "%H": (e) => h(e.Ea, 2), "%I": (e) => { + e = e.Ea; + 0 == e ? e = 12 : 12 < e && (e -= 12); + return h(e, 2); + }, "%j": (e) => { + for (var n = 0, p = 0; p <= e.Fa - 1; n += (W(e.Da + 1900) ? Ea : Fa)[p++]) + ; + return h(e.Ga + n, 3); + }, "%m": (e) => h(e.Fa + 1, 2), "%M": (e) => h(e.Na, 2), "%n": () => "\n", "%p": (e) => 0 <= e.Ea && 12 > e.Ea ? "AM" : "PM", "%S": (e) => h(e.Oa, 2), "%t": () => " ", "%u": (e) => e.xa || 7, "%U": (e) => h(Math.floor((e.Ca + 7 - e.xa) / 7), 2), "%V": (e) => { + var n = Math.floor((e.Ca + 7 - (e.xa + 6) % 7) / 7); + 2 >= (e.xa + 371 - e.Ca - 2) % 7 && n++; + if (n) + 53 == n && (p = (e.xa + 371 - e.Ca) % 7, 4 == p || 3 == p && W(e.Da) || (n = 1)); + else { + n = 52; + var p = (e.xa + 7 - e.Ca - 1) % 7; + (4 == p || 5 == p && W(e.Da % 400 - 1)) && n++; + } + return h(n, 2); + }, "%w": (e) => e.xa, "%W": (e) => h(Math.floor((e.Ca + 7 - (e.xa + 6) % 7) / 7), 2), "%y": (e) => (e.Da + 1900).toString().substring(2), "%Y": (e) => e.Da + 1900, "%z": (e) => { + e = e.Ma; + var n = 0 <= e; + e = Math.abs(e) / 60; + return (n ? "+" : "-") + String("0000" + (e / 60 * 100 + e % 60)).slice(-4); + }, "%Z": (e) => e.Pa, "%%": () => "%" }; + c = c.replace(/%%/g, "\0\0"); + for (u in t) + c.includes(u) && (c = c.replace(new RegExp(u, "g"), t[u](f))); + c = c.replace(/\0\0/g, "%"); + u = Ga(c); + if (u.length > b) + return 0; + J.set(u, a >>> 0); + return u.length - 1; + } + var Ja = { + a: function(a, b, c) { + a >>>= 0; + new qa(a).Ia(b >>> 0, c >>> 0); + ra = a; + sa++; + throw ra; + }, + e: function() { + return 0; + }, + H: function() { + }, + x: function() { + }, + z: function() { + }, + k: function() { + return 0; + }, + F: function() { + }, + B: function() { + }, + E: function() { + }, + g: function() { + }, + y: function() { + }, + v: function() { + }, + G: function() { + }, + w: function() { + }, + l: () => true, + o: function(a, b, c) { + a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN; + c >>>= 0; + a = new Date(1e3 * a); + L[c >> 2 >>> 0] = a.getUTCSeconds(); + L[c + 4 >> 2 >>> 0] = a.getUTCMinutes(); + L[c + 8 >> 2 >>> 0] = a.getUTCHours(); + L[c + 12 >> 2 >>> 0] = a.getUTCDate(); + L[c + 16 >> 2 >>> 0] = a.getUTCMonth(); + L[c + 20 >> 2 >>> 0] = a.getUTCFullYear() - 1900; + L[c + 24 >> 2 >>> 0] = a.getUTCDay(); + L[c + 28 >> 2 >>> 0] = (a.getTime() - Date.UTC(a.getUTCFullYear(), 0, 1, 0, 0, 0, 0)) / 864e5 | 0; + }, + p: function(a, b, c) { + a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN; + c >>>= 0; + a = new Date(1e3 * a); + L[c >> 2 >>> 0] = a.getSeconds(); + L[c + 4 >> 2 >>> 0] = a.getMinutes(); + L[c + 8 >> 2 >>> 0] = a.getHours(); + L[c + 12 >> 2 >>> 0] = a.getDate(); + L[c + 16 >> 2 >>> 0] = a.getMonth(); + L[c + 20 >> 2 >>> 0] = a.getFullYear() - 1900; + L[c + 24 >> 2 >>> 0] = a.getDay(); + L[c + 28 >> 2 >>> 0] = (W(a.getFullYear()) ? va : wa)[a.getMonth()] + a.getDate() - 1 | 0; + L[c + 36 >> 2 >>> 0] = -(60 * a.getTimezoneOffset()); + b = new Date(a.getFullYear(), 6, 1).getTimezoneOffset(); + var f = new Date(a.getFullYear(), 0, 1).getTimezoneOffset(); + L[c + 32 >> 2 >>> 0] = (b != f && a.getTimezoneOffset() == Math.min(f, b)) | 0; + }, + q: function(a) { + a >>>= 0; + var b = new Date(L[a + 20 >> 2 >>> 0] + 1900, L[a + 16 >> 2 >>> 0], L[a + 12 >> 2 >>> 0], L[a + 8 >> 2 >>> 0], L[a + 4 >> 2 >>> 0], L[a >> 2 >>> 0], 0), c = L[a + 32 >> 2 >>> 0], f = b.getTimezoneOffset(), g = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), h = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), m = Math.min(h, g); + 0 > c ? L[a + 32 >> 2 >>> 0] = Number(g != h && m == f) : 0 < c != (m == f) && (g = Math.max(h, g), b.setTime(b.getTime() + 6e4 * ((0 < c ? m : g) - f))); + L[a + 24 >> 2 >>> 0] = b.getDay(); + L[a + 28 >> 2 >>> 0] = (W(b.getFullYear()) ? va : wa)[b.getMonth()] + b.getDate() - 1 | 0; + L[a >> 2 >>> 0] = b.getSeconds(); + L[a + 4 >> 2 >>> 0] = b.getMinutes(); + L[a + 8 >> 2 >>> 0] = b.getHours(); + L[a + 12 >> 2 >>> 0] = b.getDate(); + L[a + 16 >> 2 >>> 0] = b.getMonth(); + L[a + 20 >> 2 >>> 0] = b.getYear(); + a = b.getTime() / 1e3; + return Ia((R = a, 1 <= +Math.abs(R) ? 0 < R ? +Math.floor(R / 4294967296) >>> 0 : ~~+Math.ceil((R - +(~~R >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0; + }, + m: function() { + return -52; + }, + n: function() { + }, + t: function(a, b, c) { + function f(w) { + return (w = w.toTimeString().match(/\(([A-Za-z ]+)\)$/)) ? w[1] : "GMT"; + } + c >>>= 0; + var g = (/* @__PURE__ */ new Date()).getFullYear(), h = new Date(g, 0, 1), m = new Date(g, 6, 1); + g = h.getTimezoneOffset(); + var q = m.getTimezoneOffset(); + M[a >>> 0 >> 2 >>> 0] = 60 * Math.max(g, q); + L[b >>> 0 >> 2 >>> 0] = Number(g != q); + a = f(h); + b = f(m); + a = Ba(a); + b = Ba(b); + q < g ? (M[c >> 2 >>> 0] = a, M[c + 4 >> 2 >>> 0] = b) : (M[c >> 2 >>> 0] = b, M[c + 4 >> 2 >>> 0] = a); + }, + d: () => { + G(""); + }, + h: function() { + return Date.now(); + }, + u: function() { + return 4294901760; + }, + b: () => performance.now(), + I: function(a, b, c) { + b >>>= 0; + return K.copyWithin(a >>> 0 >>> 0, b >>> 0, b + (c >>> 0) >>> 0); + }, + s: function(a) { + a >>>= 0; + var b = K.length; + if (4294901760 < a) + return false; + for (var c = 1; 4 >= c; c *= 2) { + var f = b * (1 + 0.2 / c); + f = Math.min(f, a + 100663296); + var g = Math; + f = Math.max(a, f); + a: { + g = g.min.call(g, 4294901760, f + (65536 - f % 65536) % 65536) - H.buffer.byteLength + 65535 >>> 16; + try { + H.grow(g); + ea(); + var h = 1; + break a; + } catch (m) { + } + h = void 0; + } + if (h) + return true; + } + return false; + }, + C: function(a, b) { + a >>>= 0; + b >>>= 0; + var c = 0; + Ca().forEach(function(f, g) { + var h = b + c; + g = M[a + 4 * g >> 2 >>> 0] = h; + for (h = 0; h < f.length; ++h) + J[g++ >> 0 >>> 0] = f.charCodeAt(h); + J[g >> 0 >>> 0] = 0; + c += f.length + 1; + }); + return 0; + }, + D: function(a, b) { + a >>>= 0; + b >>>= 0; + var c = Ca(); + M[a >> 2 >>> 0] = c.length; + var f = 0; + c.forEach(function(g) { + f += g.length + 1; + }); + M[b >> 2 >>> 0] = f; + return 0; + }, + f: () => 52, + j: function() { + return 52; + }, + r: function() { + return 70; + }, + i: function(a, b, c, f) { + b >>>= 0; + c >>>= 0; + f >>>= 0; + for (var g = 0, h = 0; h < c; h++) { + var m = M[b >> 2 >>> 0], q = M[b + 4 >> 2 >>> 0]; + b += 8; + for (var w = 0; w < q; w++) { + var t = K[m + w >>> 0], u = Da[a]; + 0 === t || 10 === t ? ((1 === a ? ca : E)(ua(u, 0)), u.length = 0) : u.push(t); + } + g += q; + } + M[f >> 2 >>> 0] = g; + return 0; + }, + A: Ha, + c: function(a, b, c, f) { + return Ha(a >>> 0, b >>> 0, c >>> 0, f >>> 0); + } + }; + (function() { + function a(c) { + c = c.exports; + I = c = Ka(c); + H = I.J; + ea(); + ha.unshift(I.K); + N--; + d.monitorRunDependencies && d.monitorRunDependencies(N); + if (0 == N && (null !== O && (clearInterval(O), O = null), P)) { + var f = P; + P = null; + f(); + } + return c; + } + var b = { a: Ja }; + N++; + d.monitorRunDependencies && d.monitorRunDependencies(N); + if (d.instantiateWasm) + try { + return d.instantiateWasm(b, a); + } catch (c) { + E("Module.instantiateWasm callback failed with error: " + c), l(c); + } + pa(b, function(c) { + a(c.instance); + }).catch(l); + return {}; + })(); + d._OrtInit = (a, b) => (d._OrtInit = I.L)(a, b); + d._OrtGetLastError = (a, b) => (d._OrtGetLastError = I.M)(a, b); + d._OrtCreateSessionOptions = (a, b, c, f, g, h, m, q, w, t) => (d._OrtCreateSessionOptions = I.N)(a, b, c, f, g, h, m, q, w, t); + d._OrtAppendExecutionProvider = (a, b) => (d._OrtAppendExecutionProvider = I.O)(a, b); + d._OrtAddFreeDimensionOverride = (a, b, c) => (d._OrtAddFreeDimensionOverride = I.P)(a, b, c); + d._OrtAddSessionConfigEntry = (a, b, c) => (d._OrtAddSessionConfigEntry = I.Q)(a, b, c); + d._OrtReleaseSessionOptions = (a) => (d._OrtReleaseSessionOptions = I.R)(a); + d._OrtCreateSession = (a, b, c) => (d._OrtCreateSession = I.S)(a, b, c); + d._OrtReleaseSession = (a) => (d._OrtReleaseSession = I.T)(a); + d._OrtGetInputOutputCount = (a, b, c) => (d._OrtGetInputOutputCount = I.U)(a, b, c); + d._OrtGetInputName = (a, b) => (d._OrtGetInputName = I.V)(a, b); + d._OrtGetOutputName = (a, b) => (d._OrtGetOutputName = I.W)(a, b); + d._OrtFree = (a) => (d._OrtFree = I.X)(a); + d._OrtCreateTensor = (a, b, c, f, g, h) => (d._OrtCreateTensor = I.Y)(a, b, c, f, g, h); + d._OrtGetTensorData = (a, b, c, f, g) => (d._OrtGetTensorData = I.Z)(a, b, c, f, g); + d._OrtReleaseTensor = (a) => (d._OrtReleaseTensor = I._)(a); + d._OrtCreateRunOptions = (a, b, c, f) => (d._OrtCreateRunOptions = I.$)(a, b, c, f); + d._OrtAddRunConfigEntry = (a, b, c) => (d._OrtAddRunConfigEntry = I.aa)(a, b, c); + d._OrtReleaseRunOptions = (a) => (d._OrtReleaseRunOptions = I.ba)(a); + d._OrtCreateBinding = (a) => (d._OrtCreateBinding = I.ca)(a); + d._OrtBindInput = (a, b, c) => (d._OrtBindInput = I.da)(a, b, c); + d._OrtBindOutput = (a, b, c, f) => (d._OrtBindOutput = I.ea)(a, b, c, f); + d._OrtClearBoundOutputs = (a) => (d._OrtClearBoundOutputs = I.fa)(a); + d._OrtReleaseBinding = (a) => (d._OrtReleaseBinding = I.ga)(a); + d._OrtRunWithBinding = (a, b, c, f, g) => (d._OrtRunWithBinding = I.ha)(a, b, c, f, g); + d._OrtRun = (a, b, c, f, g, h, m, q) => (d._OrtRun = I.ia)(a, b, c, f, g, h, m, q); + d._OrtEndProfiling = (a) => (d._OrtEndProfiling = I.ja)(a); + d._OrtTrainingLoadCheckpoint = (a, b) => (d._OrtTrainingLoadCheckpoint = I.ka)(a, b); + d._OrtTrainingReleaseCheckpoint = (a) => (d._OrtTrainingReleaseCheckpoint = I.la)(a); + d._OrtTrainingCreateSession = (a, b, c, f, g, h, m, q) => (d._OrtTrainingCreateSession = I.ma)(a, b, c, f, g, h, m, q); + d._OrtTrainingLazyResetGrad = (a) => (d._OrtTrainingLazyResetGrad = I.na)(a); + d._OrtTrainingRunTrainStep = (a, b, c, f, g, h) => (d._OrtTrainingRunTrainStep = I.oa)(a, b, c, f, g, h); + d._OrtTrainingOptimizerStep = (a, b) => (d._OrtTrainingOptimizerStep = I.pa)(a, b); + d._OrtTrainingEvalStep = (a, b, c, f, g, h) => (d._OrtTrainingEvalStep = I.qa)(a, b, c, f, g, h); + d._OrtTrainingGetParametersSize = (a, b, c) => (d._OrtTrainingGetParametersSize = I.ra)(a, b, c); + d._OrtTrainingCopyParametersToBuffer = (a, b, c, f) => (d._OrtTrainingCopyParametersToBuffer = I.sa)(a, b, c, f); + d._OrtTrainingCopyParametersFromBuffer = (a, b, c, f) => (d._OrtTrainingCopyParametersFromBuffer = I.ta)(a, b, c, f); + d._OrtTrainingReleaseSession = (a) => (d._OrtTrainingReleaseSession = I.ua)(a); + var Aa = d._malloc = (a) => (Aa = d._malloc = I.va)(a); + d._free = (a) => (d._free = I.wa)(a); + var Ia = (a) => (Ia = I.ya)(a), La = () => (La = I.za)(), Ma = (a) => (Ma = I.Aa)(a), Na = (a) => (Na = I.Ba)(a); + function Ka(a) { + a = Object.assign({}, a); + var b = (f) => () => f() >>> 0, c = (f) => (g) => f(g) >>> 0; + a.__errno_location = b(a.__errno_location); + a.malloc = c(a.malloc); + a.stackSave = b(a.stackSave); + a.stackAlloc = c(a.stackAlloc); + return a; + } + d.stackAlloc = Na; + d.stackSave = La; + d.stackRestore = Ma; + d.UTF8ToString = T; + d.stringToUTF8 = (a, b, c) => V(a, K, b, c); + d.lengthBytesUTF8 = U; + var Z; + P = function Oa() { + Z || Pa(); + Z || (P = Oa); + }; + function Pa() { + function a() { + if (!Z && (Z = true, d.calledRun = true, !da)) { + S(ha); + k(d); + if (d.onRuntimeInitialized) + d.onRuntimeInitialized(); + if (d.postRun) + for ("function" == typeof d.postRun && (d.postRun = [d.postRun]); d.postRun.length; ) { + var b = d.postRun.shift(); + ia.unshift(b); + } + S(ia); + } + } + if (!(0 < N)) { + if (d.preRun) + for ("function" == typeof d.preRun && (d.preRun = [d.preRun]); d.preRun.length; ) + ja(); + S(fa); + 0 < N || (d.setStatus ? (d.setStatus("Running..."), setTimeout(function() { + setTimeout(function() { + d.setStatus(""); + }, 1); + a(); + }, 1)) : a()); + } + } + if (d.preInit) + for ("function" == typeof d.preInit && (d.preInit = [d.preInit]); 0 < d.preInit.length; ) + d.preInit.pop()(); + Pa(); + return moduleArg.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = ortWasm; + else if (typeof define === "function" && define["amd"]) + define([], () => ortWasm); + } +}); + +// nodejs-ignore:worker_threads +var require_worker_threads = __commonJS({ + "nodejs-ignore:worker_threads"() { + } +}); + +// nodejs-ignore:perf_hooks +var require_perf_hooks = __commonJS({ + "nodejs-ignore:perf_hooks"() { + } +}); + +// nodejs-ignore:os +var os_exports = {}; +__export(os_exports, { + cpus: () => cpus2 +}); +var cpus2; +var init_os = __esm({ + "nodejs-ignore:os"() { + cpus2 = void 0; + } +}); + +// web/lib/wasm/binding/ort-wasm-threaded.js +var require_ort_wasm_threaded = __commonJS({ + "web/lib/wasm/binding/ort-wasm-threaded.js"(exports, module) { + "use strict"; + var ortWasmThreaded = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(moduleArg = {}) { + function aa() { + d.buffer != l.buffer && m(); + return l; + } + function n() { + d.buffer != l.buffer && m(); + return ba; + } + function p() { + d.buffer != l.buffer && m(); + return ca; + } + function r() { + d.buffer != l.buffer && m(); + return da; + } + function ea() { + d.buffer != l.buffer && m(); + return fa; + } + var w = moduleArg, ha, x; + w.ready = new Promise((a, b) => { + ha = a; + x = b; + }); + var ia = Object.assign({}, w), ja = "./this.program", z = (a, b) => { + throw b; + }, ka = "object" == typeof window, A = "function" == typeof importScripts, B = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, D = w.ENVIRONMENT_IS_PTHREAD || false, E = ""; + function la(a) { + return w.locateFile ? w.locateFile(a, E) : E + a; + } + var ma, F, H; + if (B) { + var fs = (init_fs(), __toCommonJS(fs_exports)), na = (init_path(), __toCommonJS(path_exports)); + E = A ? na.dirname(E) + "/" : __dirname + "/"; + ma = (b, c) => { + b = b.startsWith("file://") ? new URL(b) : na.normalize(b); + return fs.readFileSync(b, c ? void 0 : "utf8"); + }; + H = (b) => { + b = ma(b, true); + b.buffer || (b = new Uint8Array(b)); + return b; + }; + F = (b, c, e, h = true) => { + b = b.startsWith("file://") ? new URL(b) : na.normalize(b); + fs.readFile(b, h ? void 0 : "utf8", (g, k) => { + g ? e(g) : c(h ? k.buffer : k); + }); + }; + !w.thisProgram && 1 < process.argv.length && (ja = process.argv[1].replace(/\\/g, "/")); + process.argv.slice(2); + z = (b, c) => { + process.exitCode = b; + throw c; + }; + w.inspect = () => "[Emscripten Module object]"; + let a; + try { + a = require_worker_threads(); + } catch (b) { + throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'), b; + } + global.Worker = a.Worker; + } else if (ka || A) + A ? E = self.location.href : "undefined" != typeof document && document.currentScript && (E = document.currentScript.src), typeof _scriptDir !== "undefined" && _scriptDir && (E = _scriptDir), 0 !== E.indexOf("blob:") ? E = E.substr(0, E.replace(/[?#].*/, "").lastIndexOf("/") + 1) : E = "", B || (ma = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.send(null); + return b.responseText; + }, A && (H = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.responseType = "arraybuffer"; + b.send(null); + return new Uint8Array(b.response); + }), F = (a, b, c) => { + var e = new XMLHttpRequest(); + e.open("GET", a, true); + e.responseType = "arraybuffer"; + e.onload = () => { + 200 == e.status || 0 == e.status && e.response ? b(e.response) : c(); + }; + e.onerror = c; + e.send(null); + }); + B && "undefined" == typeof performance && (global.performance = require_perf_hooks().performance); + var oa = console.log.bind(console), pa = console.error.bind(console); + B && (oa = (...a) => fs.writeSync(1, a.join(" ") + "\n"), pa = (...a) => fs.writeSync(2, a.join(" ") + "\n")); + var qa = w.print || oa, I = w.printErr || pa; + Object.assign(w, ia); + ia = null; + w.thisProgram && (ja = w.thisProgram); + w.quit && (z = w.quit); + var J; + w.wasmBinary && (J = w.wasmBinary); + var noExitRuntime = w.noExitRuntime || true; + "object" != typeof WebAssembly && K("no native wasm support detected"); + var d, L, ra, M = false, N, l, ba, ca, da, fa; + function m() { + var a = d.buffer; + w.HEAP8 = l = new Int8Array(a); + w.HEAP16 = new Int16Array(a); + w.HEAP32 = ca = new Int32Array(a); + w.HEAPU8 = ba = new Uint8Array(a); + w.HEAPU16 = new Uint16Array(a); + w.HEAPU32 = da = new Uint32Array(a); + w.HEAPF32 = new Float32Array(a); + w.HEAPF64 = fa = new Float64Array(a); + } + var O = w.INITIAL_MEMORY || 16777216; + 5242880 <= O || K("INITIAL_MEMORY should be larger than STACK_SIZE, was " + O + "! (STACK_SIZE=5242880)"); + if (D) + d = w.wasmMemory; + else if (w.wasmMemory) + d = w.wasmMemory; + else if (d = new WebAssembly.Memory({ initial: O / 65536, maximum: 65536, shared: true }), !(d.buffer instanceof SharedArrayBuffer)) + throw I("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"), B && I("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory"); + m(); + O = d.buffer.byteLength; + var sa, ta = [], ua = [], va = [], wa = 0; + function P() { + return noExitRuntime || 0 < wa; + } + var Q = 0, xa = null, R = null; + function ya() { + Q++; + w.monitorRunDependencies && w.monitorRunDependencies(Q); + } + function za() { + Q--; + w.monitorRunDependencies && w.monitorRunDependencies(Q); + if (0 == Q && (null !== xa && (clearInterval(xa), xa = null), R)) { + var a = R; + R = null; + a(); + } + } + function K(a) { + if (w.onAbort) + w.onAbort(a); + a = "Aborted(" + a + ")"; + I(a); + M = true; + N = 1; + a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info."); + x(a); + throw a; + } + function Aa(a) { + return a.startsWith("data:application/octet-stream;base64,"); + } + var S; + S = "ort-wasm-threaded.wasm"; + Aa(S) || (S = la(S)); + function Ba(a) { + if (a == S && J) + return new Uint8Array(J); + if (H) + return H(a); + throw "both async and sync fetching of the wasm failed"; + } + function Ca(a) { + if (!J && (ka || A)) { + if ("function" == typeof fetch && !a.startsWith("file://")) + return fetch(a, { credentials: "same-origin" }).then((b) => { + if (!b.ok) + throw "failed to load wasm binary file at '" + a + "'"; + return b.arrayBuffer(); + }).catch(() => Ba(a)); + if (F) + return new Promise((b, c) => { + F(a, (e) => b(new Uint8Array(e)), c); + }); + } + return Promise.resolve().then(() => Ba(a)); + } + function Da(a, b, c) { + return Ca(a).then((e) => WebAssembly.instantiate(e, b)).then((e) => e).then(c, (e) => { + I("failed to asynchronously prepare wasm: " + e); + K(e); + }); + } + function Ea(a, b) { + var c = S; + return J || "function" != typeof WebAssembly.instantiateStreaming || Aa(c) || c.startsWith("file://") || B || "function" != typeof fetch ? Da(c, a, b) : fetch(c, { credentials: "same-origin" }).then((e) => WebAssembly.instantiateStreaming(e, a).then(b, function(h) { + I("wasm streaming compile failed: " + h); + I("falling back to ArrayBuffer instantiation"); + return Da(c, a, b); + })); + } + var T; + function U(a) { + this.name = "ExitStatus"; + this.message = `Program terminated with exit(${a})`; + this.status = a; + } + function Fa(a) { + a.terminate(); + a.onmessage = () => { + }; + } + function Ga(a) { + (a = V.La[a]) || K(); + V.lb(a); + } + function Ha(a) { + var b = V.fb(); + if (!b) + return 6; + V.Oa.push(b); + V.La[a.Na] = b; + b.Na = a.Na; + var c = { cmd: "run", start_routine: a.mb, arg: a.eb, pthread_ptr: a.Na }; + B && b.unref(); + b.postMessage(c, a.sb); + return 0; + } + var Ia = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, Ja = (a, b, c) => { + b >>>= 0; + var e = b + c; + for (c = b; a[c] && !(c >= e); ) + ++c; + if (16 < c - b && a.buffer && Ia) + return Ia.decode(a.buffer instanceof SharedArrayBuffer ? a.slice(b, c) : a.subarray(b, c)); + for (e = ""; b < c; ) { + var h = a[b++]; + if (h & 128) { + var g = a[b++] & 63; + if (192 == (h & 224)) + e += String.fromCharCode((h & 31) << 6 | g); + else { + var k = a[b++] & 63; + h = 224 == (h & 240) ? (h & 15) << 12 | g << 6 | k : (h & 7) << 18 | g << 12 | k << 6 | a[b++] & 63; + 65536 > h ? e += String.fromCharCode(h) : (h -= 65536, e += String.fromCharCode(55296 | h >> 10, 56320 | h & 1023)); + } + } else + e += String.fromCharCode(h); + } + return e; + }, Ka = (a, b) => (a >>>= 0) ? Ja(n(), a, b) : ""; + function La(a) { + if (D) + return W(1, 1, a); + N = a; + if (!P()) { + V.nb(); + if (w.onExit) + w.onExit(a); + M = true; + } + z(a, new U(a)); + } + var Na = (a) => { + N = a; + if (D) + throw Ma(a), "unwind"; + La(a); + }, V = { + Ra: [], + Oa: [], + Za: [], + La: {}, + Va: function() { + D ? V.hb() : V.gb(); + }, + gb: function() { + ta.unshift(() => { + ya(); + V.ib(() => za()); + }); + }, + hb: function() { + V.receiveObjectTransfer = V.kb; + V.threadInitTLS = V.Ya; + V.setExitStatus = V.Xa; + noExitRuntime = false; + }, + Xa: function(a) { + N = a; + }, + xb: ["$terminateWorker"], + nb: function() { + for (var a of V.Oa) + Fa(a); + for (a of V.Ra) + Fa(a); + V.Ra = []; + V.Oa = []; + V.La = []; + }, + lb: function(a) { + var b = a.Na; + delete V.La[b]; + V.Ra.push(a); + V.Oa.splice(V.Oa.indexOf(a), 1); + a.Na = 0; + Oa(b); + }, + kb: function() { + }, + Ya: function() { + V.Za.forEach((a) => a()); + }, + jb: (a) => new Promise((b) => { + a.onmessage = (g) => { + g = g.data; + var k = g.cmd; + if (g.targetThread && g.targetThread != X()) { + var t = V.La[g.wb]; + t ? t.postMessage(g, g.transferList) : I('Internal error! Worker sent a message "' + k + '" to target pthread ' + g.targetThread + ", but that thread no longer exists!"); + } else if ("checkMailbox" === k) + Y(); + else if ("spawnThread" === k) + Ha(g); + else if ("cleanupThread" === k) + Ga(g.thread); + else if ("killThread" === k) + g = g.thread, k = V.La[g], delete V.La[g], Fa(k), Oa(g), V.Oa.splice( + V.Oa.indexOf(k), + 1 + ), k.Na = 0; + else if ("cancelThread" === k) + V.La[g.thread].postMessage({ cmd: "cancel" }); + else if ("loaded" === k) + a.loaded = true, b(a); + else if ("alert" === k) + alert("Thread " + g.threadId + ": " + g.text); + else if ("setimmediate" === g.target) + a.postMessage(g); + else if ("callHandler" === k) + w[g.handler](...g.args); + else + k && I("worker sent an unknown command " + k); + }; + a.onerror = (g) => { + I("worker sent an error! " + g.filename + ":" + g.lineno + ": " + g.message); + throw g; + }; + B && (a.on("message", function(g) { + a.onmessage({ data: g }); + }), a.on("error", function(g) { + a.onerror(g); + })); + var c = [], e = ["onExit", "onAbort", "print", "printErr"], h; + for (h of e) + w.hasOwnProperty(h) && c.push(h); + a.postMessage({ cmd: "load", handlers: c, urlOrBlob: w.mainScriptUrlOrBlob || _scriptDir, wasmMemory: d, wasmModule: ra }); + }), + ib: function(a) { + a(); + }, + cb: function() { + var a = la("ort-wasm-threaded.worker.js"); + a = new Worker(a); + V.Ra.push(a); + }, + fb: function() { + 0 == V.Ra.length && (V.cb(), V.jb(V.Ra[0])); + return V.Ra.pop(); + } + }; + w.PThread = V; + var Pa = (a) => { + for (; 0 < a.length; ) + a.shift()(w); + }; + w.establishStackSpace = function() { + var a = X(), b = p()[a + 52 >> 2 >>> 0]; + a = p()[a + 56 >> 2 >>> 0]; + Qa(b, b - a); + Ra(b); + }; + function Ma(a) { + if (D) + return W(2, 0, a); + Na(a); + } + var Sa = []; + w.invokeEntryPoint = function(a, b) { + var c = Sa[a]; + c || (a >= Sa.length && (Sa.length = a + 1), Sa[a] = c = sa.get(a)); + a = c(b); + P() ? V.Xa(a) : Ta(a); + }; + function Ua(a) { + this.Ua = a - 24; + this.bb = function(b) { + r()[this.Ua + 4 >> 2 >>> 0] = b; + }; + this.ab = function(b) { + r()[this.Ua + 8 >> 2 >>> 0] = b; + }; + this.Va = function(b, c) { + this.$a(); + this.bb(b); + this.ab(c); + }; + this.$a = function() { + r()[this.Ua + 16 >> 2 >>> 0] = 0; + }; + } + var Va = 0, Wa = 0; + function Xa(a, b, c, e) { + return D ? W(3, 1, a, b, c, e) : Ya(a, b, c, e); + } + function Ya(a, b, c, e) { + a >>>= 0; + b >>>= 0; + c >>>= 0; + e >>>= 0; + if ("undefined" == typeof SharedArrayBuffer) + return I("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; + var h = []; + if (D && 0 === h.length) + return Xa(a, b, c, e); + a = { mb: c, Na: a, eb: e, sb: h }; + return D ? (a.ub = "spawnThread", postMessage(a, h), 0) : Ha(a); + } + function Za(a, b, c) { + return D ? W(4, 1, a, b, c) : 0; + } + function $a(a, b) { + if (D) + return W(5, 1, a, b); + } + var ab = (a) => { + for (var b = 0, c = 0; c < a.length; ++c) { + var e = a.charCodeAt(c); + 127 >= e ? b++ : 2047 >= e ? b += 2 : 55296 <= e && 57343 >= e ? (b += 4, ++c) : b += 3; + } + return b; + }, bb = (a, b, c, e) => { + c >>>= 0; + if (!(0 < e)) + return 0; + var h = c; + e = c + e - 1; + for (var g = 0; g < a.length; ++g) { + var k = a.charCodeAt(g); + if (55296 <= k && 57343 >= k) { + var t = a.charCodeAt(++g); + k = 65536 + ((k & 1023) << 10) | t & 1023; + } + if (127 >= k) { + if (c >= e) + break; + b[c++ >>> 0] = k; + } else { + if (2047 >= k) { + if (c + 1 >= e) + break; + b[c++ >>> 0] = 192 | k >> 6; + } else { + if (65535 >= k) { + if (c + 2 >= e) + break; + b[c++ >>> 0] = 224 | k >> 12; + } else { + if (c + 3 >= e) + break; + b[c++ >>> 0] = 240 | k >> 18; + b[c++ >>> 0] = 128 | k >> 12 & 63; + } + b[c++ >>> 0] = 128 | k >> 6 & 63; + } + b[c++ >>> 0] = 128 | k & 63; + } + } + b[c >>> 0] = 0; + return c - h; + }, cb = (a, b, c) => bb(a, n(), b, c); + function db(a, b) { + if (D) + return W(6, 1, a, b); + } + function eb(a, b, c) { + if (D) + return W(7, 1, a, b, c); + } + function fb(a, b, c) { + return D ? W(8, 1, a, b, c) : 0; + } + function gb(a, b) { + if (D) + return W(9, 1, a, b); + } + function hb(a, b, c) { + if (D) + return W(10, 1, a, b, c); + } + function ib(a, b, c, e) { + if (D) + return W(11, 1, a, b, c, e); + } + function jb(a, b, c, e) { + if (D) + return W(12, 1, a, b, c, e); + } + function kb(a, b, c, e) { + if (D) + return W(13, 1, a, b, c, e); + } + function lb(a) { + if (D) + return W(14, 1, a); + } + function mb(a, b) { + if (D) + return W(15, 1, a, b); + } + function nb(a, b, c) { + if (D) + return W(16, 1, a, b, c); + } + var ob = (a) => { + if (!M) + try { + if (a(), !P()) + try { + D ? Ta(N) : Na(N); + } catch (b) { + b instanceof U || "unwind" == b || z(1, b); + } + } catch (b) { + b instanceof U || "unwind" == b || z(1, b); + } + }; + function pb(a) { + a >>>= 0; + "function" === typeof Atomics.tb && (Atomics.tb(p(), a >> 2, a).value.then(Y), a += 128, Atomics.store(p(), a >> 2, 1)); + } + w.__emscripten_thread_mailbox_await = pb; + function Y() { + var a = X(); + a && (pb(a), ob(() => qb())); + } + w.checkMailbox = Y; + var Z = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), rb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], sb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + function tb(a, b, c, e, h, g, k, t) { + return D ? W(17, 1, a, b, c, e, h, g, k, t) : -52; + } + function ub(a, b, c, e, h, g, k) { + if (D) + return W(18, 1, a, b, c, e, h, g, k); + } + var wb = (a) => { + var b = ab(a) + 1, c = vb(b); + c && cb(a, c, b); + return c; + }, yb = (a) => { + var b = xb(); + a = a(); + Ra(b); + return a; + }; + function W(a, b) { + var c = arguments.length - 2, e = arguments; + return yb(() => { + for (var h = zb(8 * c), g = h >> 3, k = 0; k < c; k++) { + var t = e[2 + k]; + ea()[g + k >>> 0] = t; + } + return Ab(a, c, h, b); + }); + } + var Bb = [], Cb = {}, Eb = () => { + if (!Db) { + var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: ja || "./this.program" }, b; + for (b in Cb) + void 0 === Cb[b] ? delete a[b] : a[b] = Cb[b]; + var c = []; + for (b in a) + c.push(`${b}=${a[b]}`); + Db = c; + } + return Db; + }, Db; + function Fb(a, b) { + if (D) + return W(19, 1, a, b); + a >>>= 0; + b >>>= 0; + var c = 0; + Eb().forEach(function(e, h) { + var g = b + c; + h = r()[a + 4 * h >> 2 >>> 0] = g; + for (g = 0; g < e.length; ++g) + aa()[h++ >> 0 >>> 0] = e.charCodeAt(g); + aa()[h >> 0 >>> 0] = 0; + c += e.length + 1; + }); + return 0; + } + function Gb(a, b) { + if (D) + return W(20, 1, a, b); + a >>>= 0; + b >>>= 0; + var c = Eb(); + r()[a >> 2 >>> 0] = c.length; + var e = 0; + c.forEach(function(h) { + e += h.length + 1; + }); + r()[b >> 2 >>> 0] = e; + return 0; + } + function Hb(a) { + return D ? W(21, 1, a) : 52; + } + function Lb(a, b, c, e) { + return D ? W(22, 1, a, b, c, e) : 52; + } + function Mb(a, b, c, e, h) { + return D ? W(23, 1, a, b, c, e, h) : 70; + } + var Nb = [null, [], []]; + function Ob(a, b, c, e) { + if (D) + return W(24, 1, a, b, c, e); + b >>>= 0; + c >>>= 0; + e >>>= 0; + for (var h = 0, g = 0; g < c; g++) { + var k = r()[b >> 2 >>> 0], t = r()[b + 4 >> 2 >>> 0]; + b += 8; + for (var C = 0; C < t; C++) { + var v = n()[k + C >>> 0], y = Nb[a]; + 0 === v || 10 === v ? ((1 === a ? qa : I)(Ja(y, 0)), y.length = 0) : y.push(v); + } + h += t; + } + r()[e >> 2 >>> 0] = h; + return 0; + } + var Pb = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Qb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function Rb(a) { + var b = Array(ab(a) + 1); + bb(a, b, 0, b.length); + return b; + } + var Sb = (a, b) => { + aa().set(a, b >>> 0); + }; + function Tb(a, b, c, e) { + function h(f, q, u) { + for (f = "number" == typeof f ? f.toString() : f || ""; f.length < q; ) + f = u[0] + f; + return f; + } + function g(f, q) { + return h(f, q, "0"); + } + function k(f, q) { + function u(Ib) { + return 0 > Ib ? -1 : 0 < Ib ? 1 : 0; + } + var G; + 0 === (G = u(f.getFullYear() - q.getFullYear())) && 0 === (G = u(f.getMonth() - q.getMonth())) && (G = u(f.getDate() - q.getDate())); + return G; + } + function t(f) { + switch (f.getDay()) { + case 0: + return new Date(f.getFullYear() - 1, 11, 29); + case 1: + return f; + case 2: + return new Date(f.getFullYear(), 0, 3); + case 3: + return new Date( + f.getFullYear(), + 0, + 2 + ); + case 4: + return new Date(f.getFullYear(), 0, 1); + case 5: + return new Date(f.getFullYear() - 1, 11, 31); + case 6: + return new Date(f.getFullYear() - 1, 11, 30); + } + } + function C(f) { + var q = f.Pa; + for (f = new Date(new Date(f.Qa + 1900, 0, 1).getTime()); 0 < q; ) { + var u = f.getMonth(), G = (Z(f.getFullYear()) ? Pb : Qb)[u]; + if (q > G - f.getDate()) + q -= G - f.getDate() + 1, f.setDate(1), 11 > u ? f.setMonth(u + 1) : (f.setMonth(0), f.setFullYear(f.getFullYear() + 1)); + else { + f.setDate(f.getDate() + q); + break; + } + } + u = new Date(f.getFullYear() + 1, 0, 4); + q = t(new Date( + f.getFullYear(), + 0, + 4 + )); + u = t(u); + return 0 >= k(q, f) ? 0 >= k(u, f) ? f.getFullYear() + 1 : f.getFullYear() : f.getFullYear() - 1; + } + a >>>= 0; + b >>>= 0; + c >>>= 0; + e >>>= 0; + var v = p()[e + 40 >> 2 >>> 0]; + e = { qb: p()[e >> 2 >>> 0], pb: p()[e + 4 >> 2 >>> 0], Sa: p()[e + 8 >> 2 >>> 0], Wa: p()[e + 12 >> 2 >>> 0], Ta: p()[e + 16 >> 2 >>> 0], Qa: p()[e + 20 >> 2 >>> 0], Ma: p()[e + 24 >> 2 >>> 0], Pa: p()[e + 28 >> 2 >>> 0], yb: p()[e + 32 >> 2 >>> 0], ob: p()[e + 36 >> 2 >>> 0], rb: v ? Ka(v) : "" }; + c = Ka(c); + v = { + "%c": "%a %b %d %H:%M:%S %Y", + "%D": "%m/%d/%y", + "%F": "%Y-%m-%d", + "%h": "%b", + "%r": "%I:%M:%S %p", + "%R": "%H:%M", + "%T": "%H:%M:%S", + "%x": "%m/%d/%y", + "%X": "%H:%M:%S", + "%Ec": "%c", + "%EC": "%C", + "%Ex": "%m/%d/%y", + "%EX": "%H:%M:%S", + "%Ey": "%y", + "%EY": "%Y", + "%Od": "%d", + "%Oe": "%e", + "%OH": "%H", + "%OI": "%I", + "%Om": "%m", + "%OM": "%M", + "%OS": "%S", + "%Ou": "%u", + "%OU": "%U", + "%OV": "%V", + "%Ow": "%w", + "%OW": "%W", + "%Oy": "%y" + }; + for (var y in v) + c = c.replace(new RegExp(y, "g"), v[y]); + var Jb = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), Kb = "January February March April May June July August September October November December".split(" "); + v = { + "%a": (f) => Jb[f.Ma].substring(0, 3), + "%A": (f) => Jb[f.Ma], + "%b": (f) => Kb[f.Ta].substring(0, 3), + "%B": (f) => Kb[f.Ta], + "%C": (f) => g((f.Qa + 1900) / 100 | 0, 2), + "%d": (f) => g(f.Wa, 2), + "%e": (f) => h(f.Wa, 2, " "), + "%g": (f) => C(f).toString().substring(2), + "%G": (f) => C(f), + "%H": (f) => g(f.Sa, 2), + "%I": (f) => { + f = f.Sa; + 0 == f ? f = 12 : 12 < f && (f -= 12); + return g(f, 2); + }, + "%j": (f) => { + for (var q = 0, u = 0; u <= f.Ta - 1; q += (Z(f.Qa + 1900) ? Pb : Qb)[u++]) + ; + return g(f.Wa + q, 3); + }, + "%m": (f) => g(f.Ta + 1, 2), + "%M": (f) => g(f.pb, 2), + "%n": () => "\n", + "%p": (f) => 0 <= f.Sa && 12 > f.Sa ? "AM" : "PM", + "%S": (f) => g(f.qb, 2), + "%t": () => " ", + "%u": (f) => f.Ma || 7, + "%U": (f) => g(Math.floor((f.Pa + 7 - f.Ma) / 7), 2), + "%V": (f) => { + var q = Math.floor((f.Pa + 7 - (f.Ma + 6) % 7) / 7); + 2 >= (f.Ma + 371 - f.Pa - 2) % 7 && q++; + if (q) + 53 == q && (u = (f.Ma + 371 - f.Pa) % 7, 4 == u || 3 == u && Z(f.Qa) || (q = 1)); + else { + q = 52; + var u = (f.Ma + 7 - f.Pa - 1) % 7; + (4 == u || 5 == u && Z(f.Qa % 400 - 1)) && q++; + } + return g(q, 2); + }, + "%w": (f) => f.Ma, + "%W": (f) => g(Math.floor((f.Pa + 7 - (f.Ma + 6) % 7) / 7), 2), + "%y": (f) => (f.Qa + 1900).toString().substring(2), + "%Y": (f) => f.Qa + 1900, + "%z": (f) => { + f = f.ob; + var q = 0 <= f; + f = Math.abs(f) / 60; + return (q ? "+" : "-") + String("0000" + (f / 60 * 100 + f % 60)).slice(-4); + }, + "%Z": (f) => f.rb, + "%%": () => "%" + }; + c = c.replace( + /%%/g, + "\0\0" + ); + for (y in v) + c.includes(y) && (c = c.replace(new RegExp(y, "g"), v[y](e))); + c = c.replace(/\0\0/g, "%"); + y = Rb(c); + if (y.length > b) + return 0; + Sb(y, a); + return y.length - 1; + } + V.Va(); + var Ub = [null, La, Ma, Xa, Za, $a, db, eb, fb, gb, hb, ib, jb, kb, lb, mb, nb, tb, ub, Fb, Gb, Hb, Lb, Mb, Ob], Xb = { + b: function(a, b, c) { + a >>>= 0; + new Ua(a).Va(b >>> 0, c >>> 0); + Va = a; + Wa++; + throw Va; + }, + N: function(a) { + Vb(a >>> 0, !A, 1, !ka, 131072, false); + V.Ya(); + }, + j: function(a) { + a >>>= 0; + D ? postMessage({ cmd: "cleanupThread", thread: a }) : Ga(a); + }, + I: Ya, + h: Za, + T: $a, + D: db, + F: eb, + U: fb, + R: gb, + J: hb, + Q: ib, + n: jb, + E: kb, + B: lb, + S: mb, + C: nb, + q: () => true, + z: function(a, b) { + a >>>= 0; + a == b >>> 0 ? setTimeout(() => Y()) : D ? postMessage({ targetThread: a, cmd: "checkMailbox" }) : (a = V.La[a]) && a.postMessage({ cmd: "checkMailbox" }); + }, + L: function() { + return -1; + }, + M: pb, + p: function(a) { + B && V.La[a >>> 0].ref(); + }, + t: function(a, b, c) { + a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN; + c >>>= 0; + a = new Date(1e3 * a); + p()[c >> 2 >>> 0] = a.getUTCSeconds(); + p()[c + 4 >> 2 >>> 0] = a.getUTCMinutes(); + p()[c + 8 >> 2 >>> 0] = a.getUTCHours(); + p()[c + 12 >> 2 >>> 0] = a.getUTCDate(); + p()[c + 16 >> 2 >>> 0] = a.getUTCMonth(); + p()[c + 20 >> 2 >>> 0] = a.getUTCFullYear() - 1900; + p()[c + 24 >> 2 >>> 0] = a.getUTCDay(); + a = (a.getTime() - Date.UTC(a.getUTCFullYear(), 0, 1, 0, 0, 0, 0)) / 864e5 | 0; + p()[c + 28 >> 2 >>> 0] = a; + }, + u: function(a, b, c) { + a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN; + c >>>= 0; + a = new Date(1e3 * a); + p()[c >> 2 >>> 0] = a.getSeconds(); + p()[c + 4 >> 2 >>> 0] = a.getMinutes(); + p()[c + 8 >> 2 >>> 0] = a.getHours(); + p()[c + 12 >> 2 >>> 0] = a.getDate(); + p()[c + 16 >> 2 >>> 0] = a.getMonth(); + p()[c + 20 >> 2 >>> 0] = a.getFullYear() - 1900; + p()[c + 24 >> 2 >>> 0] = a.getDay(); + b = (Z(a.getFullYear()) ? rb : sb)[a.getMonth()] + a.getDate() - 1 | 0; + p()[c + 28 >> 2 >>> 0] = b; + p()[c + 36 >> 2 >>> 0] = -(60 * a.getTimezoneOffset()); + b = new Date(a.getFullYear(), 6, 1).getTimezoneOffset(); + var e = new Date(a.getFullYear(), 0, 1).getTimezoneOffset(); + a = (b != e && a.getTimezoneOffset() == Math.min(e, b)) | 0; + p()[c + 32 >> 2 >>> 0] = a; + }, + v: function(a) { + a >>>= 0; + var b = new Date(p()[a + 20 >> 2 >>> 0] + 1900, p()[a + 16 >> 2 >>> 0], p()[a + 12 >> 2 >>> 0], p()[a + 8 >> 2 >>> 0], p()[a + 4 >> 2 >>> 0], p()[a >> 2 >>> 0], 0), c = p()[a + 32 >> 2 >>> 0], e = b.getTimezoneOffset(), h = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), g = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), k = Math.min(g, h); + 0 > c ? p()[a + 32 >> 2 >>> 0] = Number(h != g && k == e) : 0 < c != (k == e) && (h = Math.max(g, h), b.setTime(b.getTime() + 6e4 * ((0 < c ? k : h) - e))); + p()[a + 24 >> 2 >>> 0] = b.getDay(); + c = (Z(b.getFullYear()) ? rb : sb)[b.getMonth()] + b.getDate() - 1 | 0; + p()[a + 28 >> 2 >>> 0] = c; + p()[a >> 2 >>> 0] = b.getSeconds(); + p()[a + 4 >> 2 >>> 0] = b.getMinutes(); + p()[a + 8 >> 2 >>> 0] = b.getHours(); + p()[a + 12 >> 2 >>> 0] = b.getDate(); + p()[a + 16 >> 2 >>> 0] = b.getMonth(); + p()[a + 20 >> 2 >>> 0] = b.getYear(); + a = b.getTime() / 1e3; + return Wb((T = a, 1 <= +Math.abs(T) ? 0 < T ? +Math.floor(T / 4294967296) >>> 0 : ~~+Math.ceil((T - +(~~T >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0; + }, + r: tb, + s: ub, + y: function(a, b, c) { + function e(v) { + return (v = v.toTimeString().match(/\(([A-Za-z ]+)\)$/)) ? v[1] : "GMT"; + } + a >>>= 0; + b >>>= 0; + c >>>= 0; + var h = (/* @__PURE__ */ new Date()).getFullYear(), g = new Date(h, 0, 1), k = new Date(h, 6, 1); + h = g.getTimezoneOffset(); + var t = k.getTimezoneOffset(), C = Math.max(h, t); + r()[a >> 2 >>> 0] = 60 * C; + p()[b >> 2 >>> 0] = Number(h != t); + a = e(g); + b = e(k); + a = wb(a); + b = wb(b); + t < h ? (r()[c >> 2 >>> 0] = a, r()[c + 4 >> 2 >>> 0] = b) : (r()[c >> 2 >>> 0] = b, r()[c + 4 >> 2 >>> 0] = a); + }, + c: () => { + K(""); + }, + k: function() { + }, + i: function() { + return Date.now(); + }, + o: () => { + wa += 1; + throw "unwind"; + }, + A: function() { + return 4294901760; + }, + e: () => performance.timeOrigin + performance.now(), + f: function() { + return B ? (init_os(), __toCommonJS(os_exports)).cpus().length : navigator.hardwareConcurrency; + }, + K: function(a, b, c, e) { + V.vb = b >>> 0; + Bb.length = c; + b = e >>> 0 >> 3; + for (e = 0; e < c; e++) + Bb[e] = ea()[b + e >>> 0]; + return Ub[a].apply(null, Bb); + }, + x: function(a) { + a >>>= 0; + var b = n().length; + if (a <= b || 4294901760 < a) + return false; + for (var c = 1; 4 >= c; c *= 2) { + var e = b * (1 + 0.2 / c); + e = Math.min(e, a + 100663296); + var h = Math; + e = Math.max(a, e); + a: { + h = h.min.call(h, 4294901760, e + (65536 - e % 65536) % 65536) - d.buffer.byteLength + 65535 >>> 16; + try { + d.grow(h); + m(); + var g = 1; + break a; + } catch (k) { + } + g = void 0; + } + if (g) + return true; + } + return false; + }, + O: Fb, + P: Gb, + H: Na, + g: Hb, + m: Lb, + w: Mb, + l: Ob, + a: d || w.wasmMemory, + G: Tb, + d: function(a, b, c, e) { + return Tb(a >>> 0, b >>> 0, c >>> 0, e >>> 0); + } + }; + (function() { + function a(c, e) { + c = c.exports; + L = c = Yb(c); + V.Za.push(L.ya); + sa = L.za; + ua.unshift(L.V); + ra = e; + za(); + return c; + } + var b = { a: Xb }; + ya(); + if (w.instantiateWasm) + try { + return w.instantiateWasm(b, a); + } catch (c) { + I("Module.instantiateWasm callback failed with error: " + c), x(c); + } + Ea(b, function(c) { + a(c.instance, c.module); + }).catch(x); + return {}; + })(); + w._OrtInit = (a, b) => (w._OrtInit = L.W)(a, b); + w._OrtGetLastError = (a, b) => (w._OrtGetLastError = L.X)(a, b); + w._OrtCreateSessionOptions = (a, b, c, e, h, g, k, t, C, v) => (w._OrtCreateSessionOptions = L.Y)(a, b, c, e, h, g, k, t, C, v); + w._OrtAppendExecutionProvider = (a, b) => (w._OrtAppendExecutionProvider = L.Z)(a, b); + w._OrtAddFreeDimensionOverride = (a, b, c) => (w._OrtAddFreeDimensionOverride = L._)(a, b, c); + w._OrtAddSessionConfigEntry = (a, b, c) => (w._OrtAddSessionConfigEntry = L.$)(a, b, c); + w._OrtReleaseSessionOptions = (a) => (w._OrtReleaseSessionOptions = L.aa)(a); + w._OrtCreateSession = (a, b, c) => (w._OrtCreateSession = L.ba)(a, b, c); + w._OrtReleaseSession = (a) => (w._OrtReleaseSession = L.ca)(a); + w._OrtGetInputOutputCount = (a, b, c) => (w._OrtGetInputOutputCount = L.da)(a, b, c); + w._OrtGetInputName = (a, b) => (w._OrtGetInputName = L.ea)(a, b); + w._OrtGetOutputName = (a, b) => (w._OrtGetOutputName = L.fa)(a, b); + w._OrtFree = (a) => (w._OrtFree = L.ga)(a); + w._OrtCreateTensor = (a, b, c, e, h, g) => (w._OrtCreateTensor = L.ha)(a, b, c, e, h, g); + w._OrtGetTensorData = (a, b, c, e, h) => (w._OrtGetTensorData = L.ia)(a, b, c, e, h); + w._OrtReleaseTensor = (a) => (w._OrtReleaseTensor = L.ja)(a); + w._OrtCreateRunOptions = (a, b, c, e) => (w._OrtCreateRunOptions = L.ka)(a, b, c, e); + w._OrtAddRunConfigEntry = (a, b, c) => (w._OrtAddRunConfigEntry = L.la)(a, b, c); + w._OrtReleaseRunOptions = (a) => (w._OrtReleaseRunOptions = L.ma)(a); + w._OrtCreateBinding = (a) => (w._OrtCreateBinding = L.na)(a); + w._OrtBindInput = (a, b, c) => (w._OrtBindInput = L.oa)(a, b, c); + w._OrtBindOutput = (a, b, c, e) => (w._OrtBindOutput = L.pa)(a, b, c, e); + w._OrtClearBoundOutputs = (a) => (w._OrtClearBoundOutputs = L.qa)(a); + w._OrtReleaseBinding = (a) => (w._OrtReleaseBinding = L.ra)(a); + w._OrtRunWithBinding = (a, b, c, e, h) => (w._OrtRunWithBinding = L.sa)(a, b, c, e, h); + w._OrtRun = (a, b, c, e, h, g, k, t) => (w._OrtRun = L.ta)(a, b, c, e, h, g, k, t); + w._OrtEndProfiling = (a) => (w._OrtEndProfiling = L.ua)(a); + var X = w._pthread_self = () => (X = w._pthread_self = L.va)(), vb = w._malloc = (a) => (vb = w._malloc = L.wa)(a); + w._free = (a) => (w._free = L.xa)(a); + w.__emscripten_tls_init = () => (w.__emscripten_tls_init = L.ya)(); + var Vb = w.__emscripten_thread_init = (a, b, c, e, h, g) => (Vb = w.__emscripten_thread_init = L.Aa)(a, b, c, e, h, g); + w.__emscripten_thread_crashed = () => (w.__emscripten_thread_crashed = L.Ba)(); + var Ab = (a, b, c, e) => (Ab = L.Ca)(a, b, c, e), Oa = (a) => (Oa = L.Da)(a), Ta = w.__emscripten_thread_exit = (a) => (Ta = w.__emscripten_thread_exit = L.Ea)(a), qb = w.__emscripten_check_mailbox = () => (qb = w.__emscripten_check_mailbox = L.Fa)(), Wb = (a) => (Wb = L.Ga)(a), Qa = (a, b) => (Qa = L.Ha)(a, b), xb = () => (xb = L.Ia)(), Ra = (a) => (Ra = L.Ja)(a), zb = (a) => (zb = L.Ka)(a); + function Yb(a) { + a = Object.assign({}, a); + var b = (e) => () => e() >>> 0, c = (e) => (h) => e(h) >>> 0; + a.__errno_location = b(a.__errno_location); + a.pthread_self = b(a.pthread_self); + a.malloc = c(a.malloc); + a.stackSave = b(a.stackSave); + a.stackAlloc = c(a.stackAlloc); + return a; + } + w.keepRuntimeAlive = P; + w.wasmMemory = d; + w.stackAlloc = zb; + w.stackSave = xb; + w.stackRestore = Ra; + w.UTF8ToString = Ka; + w.stringToUTF8 = cb; + w.lengthBytesUTF8 = ab; + w.ExitStatus = U; + w.PThread = V; + var Zb; + R = function $b() { + Zb || ac(); + Zb || (R = $b); + }; + function ac() { + function a() { + if (!Zb && (Zb = true, w.calledRun = true, !M)) { + D || Pa(ua); + ha(w); + if (w.onRuntimeInitialized) + w.onRuntimeInitialized(); + if (!D) { + if (w.postRun) + for ("function" == typeof w.postRun && (w.postRun = [w.postRun]); w.postRun.length; ) { + var b = w.postRun.shift(); + va.unshift(b); + } + Pa(va); + } + } + } + if (!(0 < Q)) + if (D) + ha(w), D || Pa(ua), startWorker(w); + else { + if (w.preRun) + for ("function" == typeof w.preRun && (w.preRun = [w.preRun]); w.preRun.length; ) + ta.unshift(w.preRun.shift()); + Pa(ta); + 0 < Q || (w.setStatus ? (w.setStatus("Running..."), setTimeout(function() { + setTimeout( + function() { + w.setStatus(""); + }, + 1 + ); + a(); + }, 1)) : a()); + } + } + if (w.preInit) + for ("function" == typeof w.preInit && (w.preInit = [w.preInit]); 0 < w.preInit.length; ) + w.preInit.pop()(); + ac(); + return moduleArg.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = ortWasmThreaded; + else if (typeof define === "function" && define["amd"]) + define([], () => ortWasmThreaded); + } +}); + +// web/lib/wasm/binding/ort-wasm-threaded.worker.js +var require_ort_wasm_threaded_worker = __commonJS({ + "web/lib/wasm/binding/ort-wasm-threaded.worker.js"(exports, module) { + module.exports = '"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}ortWasmThreaded(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0,/*canBlock=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;\n'; + } +}); + +// web/lib/wasm/wasm-factory.ts +var ortWasmFactory, ortWasmFactoryThreaded, wasm, initialized, initializing, aborted, isMultiThreadSupported, isSimdSupported, getWasmFileName, initializeWebAssembly, getInstance; +var init_wasm_factory = __esm({ + "web/lib/wasm/wasm-factory.ts"() { + "use strict"; + init_node_path(); + if (true) { + ortWasmFactory = require_ort_training_wasm_simd(); + } else { + ortWasmFactory = true ? null : null; + } + ortWasmFactoryThreaded = true ? true ? require_ort_wasm_threaded() : null : ortWasmFactory; + initialized = false; + initializing = false; + aborted = false; + isMultiThreadSupported = (numThreads) => { + if (numThreads === 1) { + return false; + } + if (typeof SharedArrayBuffer === "undefined") { + if (typeof self !== "undefined" && !self.crossOriginIsolated) { + console.warn( + "env.wasm.numThreads is set to " + numThreads + ", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info." + ); + } + return false; + } + if (typeof process !== "undefined" && process.versions && process.versions.node) { + console.warn( + "env.wasm.numThreads is set to " + numThreads + ", however, currently onnxruntime-web does not support multi-threads in Node.js. Please consider using onnxruntime-node for performance critical scenarios." + ); + } + try { + if (typeof MessageChannel !== "undefined") { + new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)); + } + return WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 5, + 4, + 1, + 3, + 1, + 1, + 10, + 11, + 1, + 9, + 0, + 65, + 0, + 254, + 16, + 2, + 0, + 26, + 11 + ])); + } catch (e) { + return false; + } + }; + isSimdSupported = () => { + try { + return WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 10, + 30, + 1, + 28, + 0, + 65, + 0, + 253, + 15, + 253, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 253, + 186, + 1, + 26, + 11 + ])); + } catch (e) { + return false; + } + }; + getWasmFileName = (useSimd, useThreads) => { + if (useSimd) { + if (true) { + return "ort-training-wasm-simd.wasm"; + } + return useThreads ? "ort-wasm-simd-threaded.wasm" : "ort-wasm-simd.wasm"; + } else { + return useThreads ? "ort-wasm-threaded.wasm" : "ort-wasm.wasm"; + } + }; + initializeWebAssembly = async (flags) => { + if (initialized) { + return Promise.resolve(); + } + if (initializing) { + throw new Error("multiple calls to 'initializeWebAssembly()' detected."); + } + if (aborted) { + throw new Error("previous call to 'initializeWebAssembly()' failed."); + } + initializing = true; + const timeout = flags.initTimeout; + const numThreads = flags.numThreads; + const simd = flags.simd; + const useThreads = isMultiThreadSupported(numThreads); + const useSimd = simd && isSimdSupported(); + const wasmPaths = flags.wasmPaths; + const wasmPrefixOverride = typeof wasmPaths === "string" ? wasmPaths : void 0; + const wasmFileName = getWasmFileName(useSimd, useThreads); + const wasmPathOverride = typeof wasmPaths === "object" ? wasmPaths[wasmFileName] : void 0; + let isTimeout = false; + const tasks = []; + if (timeout > 0) { + tasks.push(new Promise((resolve) => { + setTimeout(() => { + isTimeout = true; + resolve(); + }, timeout); + })); + } + tasks.push(new Promise((resolve, reject) => { + const factory = useThreads ? ortWasmFactoryThreaded : ortWasmFactory; + const config = { + locateFile: (fileName, scriptDirectory) => { + if (useThreads && fileName.endsWith(".worker.js") && typeof Blob !== "undefined") { + return URL.createObjectURL(new Blob( + [ + // This require() function is handled by esbuild plugin to load file content as string. + // eslint-disable-next-line @typescript-eslint/no-require-imports + require_ort_wasm_threaded_worker() + ], + { type: "text/javascript" } + )); + } + if (fileName.endsWith(".wasm")) { + if (wasmPathOverride) { + return wasmPathOverride; + } + const prefix = wasmPrefixOverride ?? scriptDirectory; + if (false) { + if (wasmFileName === "ort-wasm-simd.wasm") { + return prefix + "ort-wasm-simd.jsep.wasm"; + } else if (wasmFileName === "ort-wasm-simd-threaded.wasm") { + return prefix + "ort-wasm-simd-threaded.jsep.wasm"; + } + } + return prefix + wasmFileName; + } + return scriptDirectory + fileName; + } + }; + if (useThreads) { + config.numThreads = numThreads; + if (typeof Blob === "undefined") { + config.mainScriptUrlOrBlob = join(__dirname, "ort-wasm-threaded.js"); + } else { + const scriptSourceCode = `var ortWasmThreaded=${factory.toString()};`; + config.mainScriptUrlOrBlob = new Blob([scriptSourceCode], { type: "text/javascript" }); + } + } + factory(config).then( + // wasm module initialized successfully + (module) => { + initializing = false; + initialized = true; + wasm = module; + resolve(); + }, + // wasm module failed to initialize + (what) => { + initializing = false; + aborted = true; + reject(what); + } + ); + })); + await Promise.race(tasks); + if (isTimeout) { + throw new Error(`WebAssembly backend initializing failed due to timeout: ${timeout}ms`); + } + }; + getInstance = () => { + if (initialized && wasm) { + return wasm; + } + throw new Error("WebAssembly is not initialized yet."); + }; + } +}); + +// web/lib/wasm/wasm-utils.ts +var allocWasmString, iterateExtraOptions, checkLastError; +var init_wasm_utils = __esm({ + "web/lib/wasm/wasm-utils.ts"() { + "use strict"; + init_wasm_factory(); + allocWasmString = (data, allocs) => { + const wasm2 = getInstance(); + const dataLength = wasm2.lengthBytesUTF8(data) + 1; + const dataOffset = wasm2._malloc(dataLength); + wasm2.stringToUTF8(data, dataOffset, dataLength); + allocs.push(dataOffset); + return dataOffset; + }; + iterateExtraOptions = (options, prefix, seen, handler) => { + if (typeof options == "object" && options !== null) { + if (seen.has(options)) { + throw new Error("Circular reference in options"); + } else { + seen.add(options); + } + } + Object.entries(options).forEach(([key, value]) => { + const name = prefix ? prefix + key : key; + if (typeof value === "object") { + iterateExtraOptions(value, name + ".", seen, handler); + } else if (typeof value === "string" || typeof value === "number") { + handler(name, value.toString()); + } else if (typeof value === "boolean") { + handler(name, value ? "1" : "0"); + } else { + throw new Error(`Can't handle extra config type: ${typeof value}`); + } + }); + }; + checkLastError = (message) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + try { + const paramsOffset = wasm2.stackAlloc(8); + wasm2._OrtGetLastError(paramsOffset, paramsOffset + 4); + const errorCode = wasm2.HEAP32[paramsOffset / 4]; + const errorMessagePointer = wasm2.HEAPU32[paramsOffset / 4 + 1]; + const errorMessage = errorMessagePointer ? wasm2.UTF8ToString(errorMessagePointer) : ""; + throw new Error(`${message} ERROR_CODE: ${errorCode}, ERROR_MESSAGE: ${errorMessage}`); + } finally { + wasm2.stackRestore(stack); + } + }; + } +}); + +// web/lib/wasm/run-options.ts +var setRunOptions; +var init_run_options = __esm({ + "web/lib/wasm/run-options.ts"() { + "use strict"; + init_wasm_factory(); + init_wasm_utils(); + setRunOptions = (options) => { + const wasm2 = getInstance(); + let runOptionsHandle = 0; + const allocs = []; + const runOptions = options || {}; + try { + if (options?.logSeverityLevel === void 0) { + runOptions.logSeverityLevel = 2; + } else if (typeof options.logSeverityLevel !== "number" || !Number.isInteger(options.logSeverityLevel) || options.logSeverityLevel < 0 || options.logSeverityLevel > 4) { + throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`); + } + if (options?.logVerbosityLevel === void 0) { + runOptions.logVerbosityLevel = 0; + } else if (typeof options.logVerbosityLevel !== "number" || !Number.isInteger(options.logVerbosityLevel)) { + throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`); + } + if (options?.terminate === void 0) { + runOptions.terminate = false; + } + let tagDataOffset = 0; + if (options?.tag !== void 0) { + tagDataOffset = allocWasmString(options.tag, allocs); + } + runOptionsHandle = wasm2._OrtCreateRunOptions( + runOptions.logSeverityLevel, + runOptions.logVerbosityLevel, + !!runOptions.terminate, + tagDataOffset + ); + if (runOptionsHandle === 0) { + checkLastError("Can't create run options."); + } + if (options?.extra !== void 0) { + iterateExtraOptions(options.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => { + const keyDataOffset = allocWasmString(key, allocs); + const valueDataOffset = allocWasmString(value, allocs); + if (wasm2._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a run config entry: ${key} - ${value}.`); + } + }); + } + return [runOptionsHandle, allocs]; + } catch (e) { + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + throw e; + } + }; + } +}); + +// web/lib/wasm/session-options.ts +var getGraphOptimzationLevel, getExecutionMode, appendDefaultOptions, setExecutionProviders, setSessionOptions; +var init_session_options = __esm({ + "web/lib/wasm/session-options.ts"() { + "use strict"; + init_wasm_factory(); + init_wasm_utils(); + getGraphOptimzationLevel = (graphOptimizationLevel) => { + switch (graphOptimizationLevel) { + case "disabled": + return 0; + case "basic": + return 1; + case "extended": + return 2; + case "all": + return 99; + default: + throw new Error(`unsupported graph optimization level: ${graphOptimizationLevel}`); + } + }; + getExecutionMode = (executionMode) => { + switch (executionMode) { + case "sequential": + return 0; + case "parallel": + return 1; + default: + throw new Error(`unsupported execution mode: ${executionMode}`); + } + }; + appendDefaultOptions = (options) => { + if (!options.extra) { + options.extra = {}; + } + if (!options.extra.session) { + options.extra.session = {}; + } + const session = options.extra.session; + if (!session.use_ort_model_bytes_directly) { + session.use_ort_model_bytes_directly = "1"; + } + if (options.executionProviders && options.executionProviders.some((ep) => (typeof ep === "string" ? ep : ep.name) === "webgpu")) { + options.enableMemPattern = false; + } + }; + setExecutionProviders = (sessionOptionsHandle, executionProviders, allocs) => { + for (const ep of executionProviders) { + let epName = typeof ep === "string" ? ep : ep.name; + switch (epName) { + case "webnn": + epName = "WEBNN"; + if (typeof ep !== "string") { + const webnnOptions = ep; + if (webnnOptions?.deviceType) { + const keyDataOffset = allocWasmString("deviceType", allocs); + const valueDataOffset = allocWasmString(webnnOptions.deviceType, allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a session config entry: 'deviceType' - ${webnnOptions.deviceType}.`); + } + } + if (webnnOptions?.numThreads) { + let numThreads = webnnOptions.numThreads; + if (typeof numThreads != "number" || !Number.isInteger(numThreads) || numThreads < 0) { + numThreads = 0; + } + const keyDataOffset = allocWasmString("numThreads", allocs); + const valueDataOffset = allocWasmString(numThreads.toString(), allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a session config entry: 'numThreads' - ${webnnOptions.numThreads}.`); + } + } + if (webnnOptions?.powerPreference) { + const keyDataOffset = allocWasmString("powerPreference", allocs); + const valueDataOffset = allocWasmString(webnnOptions.powerPreference, allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError( + `Can't set a session config entry: 'powerPreference' - ${webnnOptions.powerPreference}.` + ); + } + } + } + break; + case "webgpu": + epName = "JS"; + if (typeof ep !== "string") { + const webgpuOptions = ep; + if (webgpuOptions?.preferredLayout) { + if (webgpuOptions.preferredLayout !== "NCHW" && webgpuOptions.preferredLayout !== "NHWC") { + throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${webgpuOptions.preferredLayout}`); + } + const keyDataOffset = allocWasmString("preferredLayout", allocs); + const valueDataOffset = allocWasmString(webgpuOptions.preferredLayout, allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError( + `Can't set a session config entry: 'preferredLayout' - ${webgpuOptions.preferredLayout}.` + ); + } + } + } + break; + case "wasm": + case "cpu": + continue; + default: + throw new Error(`not supported execution provider: ${epName}`); + } + const epNameDataOffset = allocWasmString(epName, allocs); + if (getInstance()._OrtAppendExecutionProvider(sessionOptionsHandle, epNameDataOffset) !== 0) { + checkLastError(`Can't append execution provider: ${epName}.`); + } + } + }; + setSessionOptions = (options) => { + const wasm2 = getInstance(); + let sessionOptionsHandle = 0; + const allocs = []; + const sessionOptions = options || {}; + appendDefaultOptions(sessionOptions); + try { + const graphOptimizationLevel = getGraphOptimzationLevel(sessionOptions.graphOptimizationLevel ?? "all"); + const executionMode = getExecutionMode(sessionOptions.executionMode ?? "sequential"); + const logIdDataOffset = typeof sessionOptions.logId === "string" ? allocWasmString(sessionOptions.logId, allocs) : 0; + const logSeverityLevel = sessionOptions.logSeverityLevel ?? 2; + if (!Number.isInteger(logSeverityLevel) || logSeverityLevel < 0 || logSeverityLevel > 4) { + throw new Error(`log serverity level is not valid: ${logSeverityLevel}`); + } + const logVerbosityLevel = sessionOptions.logVerbosityLevel ?? 0; + if (!Number.isInteger(logVerbosityLevel) || logVerbosityLevel < 0 || logVerbosityLevel > 4) { + throw new Error(`log verbosity level is not valid: ${logVerbosityLevel}`); + } + const optimizedModelFilePathOffset = typeof sessionOptions.optimizedModelFilePath === "string" ? allocWasmString(sessionOptions.optimizedModelFilePath, allocs) : 0; + sessionOptionsHandle = wasm2._OrtCreateSessionOptions( + graphOptimizationLevel, + !!sessionOptions.enableCpuMemArena, + !!sessionOptions.enableMemPattern, + executionMode, + !!sessionOptions.enableProfiling, + 0, + logIdDataOffset, + logSeverityLevel, + logVerbosityLevel, + optimizedModelFilePathOffset + ); + if (sessionOptionsHandle === 0) { + checkLastError("Can't create session options."); + } + if (sessionOptions.executionProviders) { + setExecutionProviders(sessionOptionsHandle, sessionOptions.executionProviders, allocs); + } + if (sessionOptions.enableGraphCapture !== void 0) { + if (typeof sessionOptions.enableGraphCapture !== "boolean") { + throw new Error(`enableGraphCapture must be a boolean value: ${sessionOptions.enableGraphCapture}`); + } + const keyDataOffset = allocWasmString("enableGraphCapture", allocs); + const valueDataOffset = allocWasmString(sessionOptions.enableGraphCapture.toString(), allocs); + if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError( + `Can't set a session config entry: 'enableGraphCapture' - ${sessionOptions.enableGraphCapture}.` + ); + } + } + if (sessionOptions.freeDimensionOverrides) { + for (const [name, value] of Object.entries(sessionOptions.freeDimensionOverrides)) { + if (typeof name !== "string") { + throw new Error(`free dimension override name must be a string: ${name}`); + } + if (typeof value !== "number" || !Number.isInteger(value) || value < 0) { + throw new Error(`free dimension override value must be a non-negative integer: ${value}`); + } + const nameOffset = allocWasmString(name, allocs); + if (wasm2._OrtAddFreeDimensionOverride(sessionOptionsHandle, nameOffset, value) !== 0) { + checkLastError(`Can't set a free dimension override: ${name} - ${value}.`); + } + } + } + if (sessionOptions.extra !== void 0) { + iterateExtraOptions(sessionOptions.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => { + const keyDataOffset = allocWasmString(key, allocs); + const valueDataOffset = allocWasmString(value, allocs); + if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a session config entry: ${key} - ${value}.`); + } + }); + } + return [sessionOptionsHandle, allocs]; + } catch (e) { + if (sessionOptionsHandle !== 0) { + wasm2._OrtReleaseSessionOptions(sessionOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + throw e; + } + }; + } +}); + +// web/lib/wasm/wasm-common.ts +var tensorDataTypeStringToEnum, tensorDataTypeEnumToString, getTensorElementSize, tensorTypeToTypedArrayConstructor, logLevelStringToEnum, isGpuBufferSupportedType, dataLocationStringToEnum; +var init_wasm_common = __esm({ + "web/lib/wasm/wasm-common.ts"() { + "use strict"; + tensorDataTypeStringToEnum = (type) => { + switch (type) { + case "int8": + return 3 /* int8 */; + case "uint8": + return 2 /* uint8 */; + case "bool": + return 9 /* bool */; + case "int16": + return 5 /* int16 */; + case "uint16": + return 4 /* uint16 */; + case "int32": + return 6 /* int32 */; + case "uint32": + return 12 /* uint32 */; + case "float16": + return 10 /* float16 */; + case "float32": + return 1 /* float */; + case "float64": + return 11 /* double */; + case "string": + return 8 /* string */; + case "int64": + return 7 /* int64 */; + case "uint64": + return 13 /* uint64 */; + default: + throw new Error(`unsupported data type: ${type}`); + } + }; + tensorDataTypeEnumToString = (typeProto) => { + switch (typeProto) { + case 3 /* int8 */: + return "int8"; + case 2 /* uint8 */: + return "uint8"; + case 9 /* bool */: + return "bool"; + case 5 /* int16 */: + return "int16"; + case 4 /* uint16 */: + return "uint16"; + case 6 /* int32 */: + return "int32"; + case 12 /* uint32 */: + return "uint32"; + case 10 /* float16 */: + return "float16"; + case 1 /* float */: + return "float32"; + case 11 /* double */: + return "float64"; + case 8 /* string */: + return "string"; + case 7 /* int64 */: + return "int64"; + case 13 /* uint64 */: + return "uint64"; + default: + throw new Error(`unsupported data type: ${typeProto}`); + } + }; + getTensorElementSize = (dateType) => [void 0, 4, 1, 1, 2, 2, 4, 8, void 0, 1, 2, 8, 4, 8, void 0, void 0, void 0][dateType]; + tensorTypeToTypedArrayConstructor = (type) => { + switch (type) { + case "float16": + return typeof Float16Array !== "undefined" && Float16Array.from ? Float16Array : Uint16Array; + case "float32": + return Float32Array; + case "uint8": + return Uint8Array; + case "int8": + return Int8Array; + case "uint16": + return Uint16Array; + case "int16": + return Int16Array; + case "int32": + return Int32Array; + case "bool": + return Uint8Array; + case "float64": + return Float64Array; + case "uint32": + return Uint32Array; + case "int64": + return BigInt64Array; + case "uint64": + return BigUint64Array; + default: + throw new Error(`unsupported type: ${type}`); + } + }; + logLevelStringToEnum = (logLevel) => { + switch (logLevel) { + case "verbose": + return 0; + case "info": + return 1; + case "warning": + return 2; + case "error": + return 3; + case "fatal": + return 4; + default: + throw new Error(`unsupported logging level: ${logLevel}`); + } + }; + isGpuBufferSupportedType = (type) => type === "float32" || type === "float16" || type === "int32" || type === "int64" || type === "uint32" || type === "uint8" || type === "bool"; + dataLocationStringToEnum = (location) => { + switch (location) { + case "none": + return 0; + case "cpu": + return 1; + case "cpu-pinned": + return 2; + case "texture": + return 3; + case "gpu-buffer": + return 4; + default: + throw new Error(`unsupported data location: ${location}`); + } + }; + } +}); + +// nodejs-ignore:node:fs/promises +var readFile2; +var init_promises = __esm({ + "nodejs-ignore:node:fs/promises"() { + readFile2 = void 0; + } +}); + +// web/lib/wasm/wasm-utils-load-file.ts +var loadFile; +var init_wasm_utils_load_file = __esm({ + "web/lib/wasm/wasm-utils-load-file.ts"() { + "use strict"; + init_fs(); + init_promises(); + loadFile = async (file) => { + if (typeof file === "string") { + if (typeof process !== "undefined" && process.versions && process.versions.node) { + try { + return new Uint8Array(await readFile2(file)); + } catch (e) { + if (e.code === "ERR_FS_FILE_TOO_LARGE") { + const stream = createReadStream(file); + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return new Uint8Array(Buffer.concat(chunks)); + } + throw e; + } + } else { + const response = await fetch(file); + if (!response.ok) { + throw new Error(`failed to load external data file: ${file}`); + } + const contentLengthHeader = response.headers.get("Content-Length"); + const fileSize = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0; + if (fileSize < 1073741824) { + return new Uint8Array(await response.arrayBuffer()); + } else { + if (!response.body) { + throw new Error(`failed to load external data file: ${file}, no response body.`); + } + const reader = response.body.getReader(); + let buffer; + try { + buffer = new ArrayBuffer(fileSize); + } catch (e) { + if (e instanceof RangeError) { + const pages = Math.ceil(fileSize / 65536); + buffer = new WebAssembly.Memory({ initial: pages, maximum: pages }).buffer; + } else { + throw e; + } + } + let offset = 0; + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + const chunkSize = value.byteLength; + const chunk = new Uint8Array(buffer, offset, chunkSize); + chunk.set(value); + offset += chunkSize; + } + return new Uint8Array(buffer, 0, fileSize); + } + } + } else if (file instanceof Blob) { + return new Uint8Array(await file.arrayBuffer()); + } else if (file instanceof Uint8Array) { + return file; + } else { + return new Uint8Array(file); + } + }; + } +}); + +// web/lib/wasm/wasm-core-impl.ts +var initOrt, initRuntime, initEp, activeSessions, getSessionInputOutputCount, copyFromExternalBuffer, createSession, releaseSession, prepareInputOutputTensor, run, endProfiling, extractTransferableBuffers; +var init_wasm_core_impl = __esm({ + "web/lib/wasm/wasm-core-impl.ts"() { + "use strict"; + init_run_options(); + init_session_options(); + init_wasm_common(); + init_wasm_factory(); + init_wasm_utils(); + init_wasm_utils_load_file(); + initOrt = (numThreads, loggingLevel) => { + const errorCode = getInstance()._OrtInit(numThreads, loggingLevel); + if (errorCode !== 0) { + checkLastError("Can't initialize onnxruntime."); + } + }; + initRuntime = async (env3) => { + initOrt(env3.wasm.numThreads, logLevelStringToEnum(env3.logLevel)); + }; + initEp = async (env3, epName) => { + if (false) { + const initJsep = null.init; + if (epName === "webgpu") { + if (typeof navigator === "undefined" || !navigator.gpu) { + throw new Error("WebGPU is not supported in current environment"); + } + let adapter = env3.webgpu.adapter; + if (!adapter) { + const powerPreference = env3.webgpu.powerPreference; + if (powerPreference !== void 0 && powerPreference !== "low-power" && powerPreference !== "high-performance") { + throw new Error(`Invalid powerPreference setting: "${powerPreference}"`); + } + const forceFallbackAdapter = env3.webgpu.forceFallbackAdapter; + if (forceFallbackAdapter !== void 0 && typeof forceFallbackAdapter !== "boolean") { + throw new Error(`Invalid forceFallbackAdapter setting: "${forceFallbackAdapter}"`); + } + adapter = await navigator.gpu.requestAdapter({ powerPreference, forceFallbackAdapter }); + if (!adapter) { + throw new Error( + 'Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.' + ); + } + } else { + if (typeof adapter.limits !== "object" || typeof adapter.features !== "object" || typeof adapter.requestDevice !== "function") { + throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object."); + } + } + if (!env3.wasm.simd) { + throw new Error( + "Not supported for WebGPU=ON and SIMD=OFF. Please set `env.wasm.simd` to true when using `webgpu` EP" + ); + } + await initJsep("webgpu", getInstance(), env3, adapter); + } + if (epName === "webnn") { + if (typeof navigator === "undefined" || !navigator.ml) { + throw new Error("WebNN is not supported in current environment"); + } + await initJsep("webnn", getInstance(), env3); + } + } + }; + activeSessions = /* @__PURE__ */ new Map(); + getSessionInputOutputCount = (sessionHandle) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + try { + const dataOffset = wasm2.stackAlloc(8); + const errorCode = wasm2._OrtGetInputOutputCount(sessionHandle, dataOffset, dataOffset + 4); + if (errorCode !== 0) { + checkLastError("Can't get session input/output count."); + } + return [wasm2.HEAP32[dataOffset / 4], wasm2.HEAP32[dataOffset / 4 + 1]]; + } finally { + wasm2.stackRestore(stack); + } + }; + copyFromExternalBuffer = (model) => { + const wasm2 = getInstance(); + const modelDataOffset = wasm2._malloc(model.byteLength); + if (modelDataOffset === 0) { + throw new Error(`Can't create a session. failed to allocate a buffer of size ${model.byteLength}.`); + } + wasm2.HEAPU8.set(model, modelDataOffset); + return [modelDataOffset, model.byteLength]; + }; + createSession = async (modelData, options) => { + let modelDataOffset, modelDataLength; + const wasm2 = getInstance(); + if (Array.isArray(modelData)) { + [modelDataOffset, modelDataLength] = modelData; + } else if (modelData.buffer === wasm2.HEAPU8.buffer) { + [modelDataOffset, modelDataLength] = [modelData.byteOffset, modelData.byteLength]; + } else { + [modelDataOffset, modelDataLength] = copyFromExternalBuffer(modelData); + } + let sessionHandle = 0; + let sessionOptionsHandle = 0; + let ioBindingHandle = 0; + let allocs = []; + const inputNamesUTF8Encoded = []; + const outputNamesUTF8Encoded = []; + try { + [sessionOptionsHandle, allocs] = setSessionOptions(options); + if (options?.externalData && wasm2.mountExternalData) { + const loadingPromises = []; + for (const file of options.externalData) { + const path = typeof file === "string" ? file : file.path; + loadingPromises.push(loadFile(typeof file === "string" ? file : file.data).then((data) => { + wasm2.mountExternalData(path, data); + })); + } + await Promise.all(loadingPromises); + } + sessionHandle = await wasm2._OrtCreateSession(modelDataOffset, modelDataLength, sessionOptionsHandle); + if (sessionHandle === 0) { + checkLastError("Can't create a session."); + } + const [inputCount, outputCount] = getSessionInputOutputCount(sessionHandle); + const enableGraphCapture = !!options?.enableGraphCapture; + const inputNames = []; + const outputNames = []; + const outputPreferredLocations = []; + for (let i = 0; i < inputCount; i++) { + const name = wasm2._OrtGetInputName(sessionHandle, i); + if (name === 0) { + checkLastError("Can't get an input name."); + } + inputNamesUTF8Encoded.push(name); + inputNames.push(wasm2.UTF8ToString(name)); + } + for (let i = 0; i < outputCount; i++) { + const name = wasm2._OrtGetOutputName(sessionHandle, i); + if (name === 0) { + checkLastError("Can't get an output name."); + } + outputNamesUTF8Encoded.push(name); + const nameString = wasm2.UTF8ToString(name); + outputNames.push(nameString); + if (false) { + if (enableGraphCapture && options?.preferredOutputLocation === void 0) { + outputPreferredLocations.push("gpu-buffer"); + continue; + } + const location = typeof options?.preferredOutputLocation === "string" ? options.preferredOutputLocation : options?.preferredOutputLocation?.[nameString] ?? "cpu"; + if (location !== "cpu" && location !== "cpu-pinned" && location !== "gpu-buffer") { + throw new Error(`Not supported preferred output location: ${location}.`); + } + if (enableGraphCapture && location !== "gpu-buffer") { + throw new Error(`Not supported preferred output location: ${location}. Only 'gpu-buffer' location is supported when enableGraphCapture is true.`); + } + outputPreferredLocations.push(location); + } + } + let bindingState = null; + if (false) { + ioBindingHandle = wasm2._OrtCreateBinding(sessionHandle); + if (ioBindingHandle === 0) { + checkLastError("Can't create IO binding."); + } + bindingState = { + handle: ioBindingHandle, + outputPreferredLocations, + outputPreferredLocationsEncoded: outputPreferredLocations.map((l) => dataLocationStringToEnum(l)) + }; + } + activeSessions.set( + sessionHandle, + [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, bindingState, enableGraphCapture, false] + ); + return [sessionHandle, inputNames, outputNames]; + } catch (e) { + inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + if (ioBindingHandle !== 0) { + wasm2._OrtReleaseBinding(ioBindingHandle); + } + if (sessionHandle !== 0) { + wasm2._OrtReleaseSession(sessionHandle); + } + throw e; + } finally { + wasm2._free(modelDataOffset); + if (sessionOptionsHandle !== 0) { + wasm2._OrtReleaseSessionOptions(sessionOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + wasm2.unmountExternalData?.(); + } + }; + releaseSession = (sessionId) => { + const wasm2 = getInstance(); + const session = activeSessions.get(sessionId); + if (!session) { + throw new Error(`cannot release session. invalid session id: ${sessionId}`); + } + const [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture] = session; + if (ioBindingState) { + if (enableGraphCapture) { + wasm2._OrtClearBoundOutputs(ioBindingState.handle); + } + wasm2._OrtReleaseBinding(ioBindingState.handle); + } + wasm2.jsepOnReleaseSession?.(sessionId); + inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + wasm2._OrtReleaseSession(sessionHandle); + activeSessions.delete(sessionId); + }; + prepareInputOutputTensor = (tensor, tensorHandles, allocs, sessionId, index, enableGraphCapture = false) => { + if (!tensor) { + tensorHandles.push(0); + return; + } + const wasm2 = getInstance(); + const dataType = tensor[0]; + const dims = tensor[1]; + const location = tensor[3]; + let rawData; + let dataByteLength; + if (dataType === "string" && location === "gpu-buffer") { + throw new Error("String tensor is not supported on GPU."); + } + if (enableGraphCapture && location !== "gpu-buffer") { + throw new Error( + `External buffer must be provided for input/output index ${index} when enableGraphCapture is true.` + ); + } + if (location === "gpu-buffer") { + const gpuBuffer = tensor[2].gpuBuffer; + const elementSizeInBytes = getTensorElementSize(tensorDataTypeStringToEnum(dataType)); + dataByteLength = dims.reduce((a, b) => a * b, 1) * elementSizeInBytes; + const registerBuffer = wasm2.jsepRegisterBuffer; + if (!registerBuffer) { + throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.'); + } + rawData = registerBuffer(sessionId, index, gpuBuffer, dataByteLength); + } else { + const data = tensor[2]; + if (Array.isArray(data)) { + dataByteLength = 4 * data.length; + rawData = wasm2._malloc(dataByteLength); + allocs.push(rawData); + let dataIndex = rawData / 4; + for (let i = 0; i < data.length; i++) { + if (typeof data[i] !== "string") { + throw new TypeError(`tensor data at index ${i} is not a string`); + } + wasm2.HEAPU32[dataIndex++] = allocWasmString(data[i], allocs); + } + } else { + dataByteLength = data.byteLength; + rawData = wasm2._malloc(dataByteLength); + allocs.push(rawData); + wasm2.HEAPU8.set(new Uint8Array(data.buffer, data.byteOffset, dataByteLength), rawData); + } + } + const stack = wasm2.stackSave(); + const dimsOffset = wasm2.stackAlloc(4 * dims.length); + try { + let dimIndex = dimsOffset / 4; + dims.forEach((d) => wasm2.HEAP32[dimIndex++] = d); + const tensor2 = wasm2._OrtCreateTensor( + tensorDataTypeStringToEnum(dataType), + rawData, + dataByteLength, + dimsOffset, + dims.length, + dataLocationStringToEnum(location) + ); + if (tensor2 === 0) { + checkLastError(`Can't create tensor for input/output. session=${sessionId}, index=${index}.`); + } + tensorHandles.push(tensor2); + } finally { + wasm2.stackRestore(stack); + } + }; + run = async (sessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => { + const wasm2 = getInstance(); + const session = activeSessions.get(sessionId); + if (!session) { + throw new Error(`cannot run inference. invalid session id: ${sessionId}`); + } + const sessionHandle = session[0]; + const inputNamesUTF8Encoded = session[1]; + const outputNamesUTF8Encoded = session[2]; + const ioBindingState = session[3]; + const enableGraphCapture = session[4]; + const inputOutputBound = session[5]; + const inputCount = inputIndices.length; + const outputCount = outputIndices.length; + let runOptionsHandle = 0; + let runOptionsAllocs = []; + const inputTensorHandles = []; + const outputTensorHandles = []; + const inputOutputAllocs = []; + const beforeRunStack = wasm2.stackSave(); + const inputValuesOffset = wasm2.stackAlloc(inputCount * 4); + const inputNamesOffset = wasm2.stackAlloc(inputCount * 4); + const outputValuesOffset = wasm2.stackAlloc(outputCount * 4); + const outputNamesOffset = wasm2.stackAlloc(outputCount * 4); + try { + [runOptionsHandle, runOptionsAllocs] = setRunOptions(options); + for (let i = 0; i < inputCount; i++) { + prepareInputOutputTensor( + inputTensors[i], + inputTensorHandles, + inputOutputAllocs, + sessionId, + inputIndices[i], + enableGraphCapture + ); + } + for (let i = 0; i < outputCount; i++) { + prepareInputOutputTensor( + outputTensors[i], + outputTensorHandles, + inputOutputAllocs, + sessionId, + inputCount + outputIndices[i], + enableGraphCapture + ); + } + let inputValuesIndex = inputValuesOffset / 4; + let inputNamesIndex = inputNamesOffset / 4; + let outputValuesIndex = outputValuesOffset / 4; + let outputNamesIndex = outputNamesOffset / 4; + for (let i = 0; i < inputCount; i++) { + wasm2.HEAPU32[inputValuesIndex++] = inputTensorHandles[i]; + wasm2.HEAPU32[inputNamesIndex++] = inputNamesUTF8Encoded[inputIndices[i]]; + } + for (let i = 0; i < outputCount; i++) { + wasm2.HEAPU32[outputValuesIndex++] = outputTensorHandles[i]; + wasm2.HEAPU32[outputNamesIndex++] = outputNamesUTF8Encoded[outputIndices[i]]; + } + if (false) { + const { handle, outputPreferredLocations, outputPreferredLocationsEncoded } = ioBindingState; + if (inputNamesUTF8Encoded.length !== inputCount) { + throw new Error(`input count from feeds (${inputCount}) is expected to be always equal to model's input count (${inputNamesUTF8Encoded.length}).`); + } + for (let i = 0; i < inputCount; i++) { + const index = inputIndices[i]; + const errorCode2 = await wasm2._OrtBindInput(handle, inputNamesUTF8Encoded[index], inputTensorHandles[i]); + if (errorCode2 !== 0) { + checkLastError(`Can't bind input[${i}] for session=${sessionId}.`); + } + } + for (let i = 0; i < outputCount; i++) { + const index = outputIndices[i]; + const location = outputTensors[i]?.[3]; + if (location) { + const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], outputTensorHandles[i], 0); + if (errorCode2 !== 0) { + checkLastError(`Can't bind pre-allocated output[${i}] for session=${sessionId}.`); + } + } else { + const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], 0, outputPreferredLocationsEncoded[index]); + if (errorCode2 !== 0) { + checkLastError(`Can't bind output[${i}] to ${outputPreferredLocations[i]} for session=${sessionId}.`); + } + } + } + activeSessions.set( + sessionId, + [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, true] + ); + } + wasm2.jsepOnRunStart?.(sessionHandle); + let errorCode; + if (false) { + errorCode = await wasm2._OrtRunWithBinding( + sessionHandle, + ioBindingState.handle, + outputCount, + outputValuesOffset, + runOptionsHandle + ); + } else { + errorCode = await wasm2._OrtRun( + sessionHandle, + inputNamesOffset, + inputValuesOffset, + inputCount, + outputNamesOffset, + outputCount, + outputValuesOffset, + runOptionsHandle + ); + } + if (errorCode !== 0) { + checkLastError("failed to call OrtRun()."); + } + const output = []; + for (let i = 0; i < outputCount; i++) { + const tensor = wasm2.HEAPU32[outputValuesOffset / 4 + i]; + if (tensor === outputTensorHandles[i]) { + output.push(outputTensors[i]); + continue; + } + const beforeGetTensorDataStack = wasm2.stackSave(); + const tensorDataOffset = wasm2.stackAlloc(4 * 4); + let keepOutputTensor = false; + let type, dataOffset = 0; + try { + const errorCode2 = wasm2._OrtGetTensorData( + tensor, + tensorDataOffset, + tensorDataOffset + 4, + tensorDataOffset + 8, + tensorDataOffset + 12 + ); + if (errorCode2 !== 0) { + checkLastError(`Can't access output tensor data on index ${i}.`); + } + let tensorDataIndex = tensorDataOffset / 4; + const dataType = wasm2.HEAPU32[tensorDataIndex++]; + dataOffset = wasm2.HEAPU32[tensorDataIndex++]; + const dimsOffset = wasm2.HEAPU32[tensorDataIndex++]; + const dimsLength = wasm2.HEAPU32[tensorDataIndex++]; + const dims = []; + for (let i2 = 0; i2 < dimsLength; i2++) { + dims.push(wasm2.HEAPU32[dimsOffset / 4 + i2]); + } + wasm2._OrtFree(dimsOffset); + const size = dims.reduce((a, b) => a * b, 1); + type = tensorDataTypeEnumToString(dataType); + const preferredLocation = ioBindingState?.outputPreferredLocations[outputIndices[i]]; + if (type === "string") { + if (preferredLocation === "gpu-buffer") { + throw new Error("String tensor is not supported on GPU."); + } + const stringData = []; + let dataIndex = dataOffset / 4; + for (let i2 = 0; i2 < size; i2++) { + const offset = wasm2.HEAPU32[dataIndex++]; + const maxBytesToRead = i2 === size - 1 ? void 0 : wasm2.HEAPU32[dataIndex] - offset; + stringData.push(wasm2.UTF8ToString(offset, maxBytesToRead)); + } + output.push([type, dims, stringData, "cpu"]); + } else { + if (preferredLocation === "gpu-buffer" && size > 0) { + const getBuffer = wasm2.jsepGetBuffer; + if (!getBuffer) { + throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.'); + } + const gpuBuffer = getBuffer(dataOffset); + const elementSize = getTensorElementSize(dataType); + if (elementSize === void 0 || !isGpuBufferSupportedType(type)) { + throw new Error(`Unsupported data type: ${type}`); + } + keepOutputTensor = true; + output.push([ + type, + dims, + { + gpuBuffer, + download: wasm2.jsepCreateDownloader(gpuBuffer, size * elementSize, type), + dispose: () => { + wasm2._OrtReleaseTensor(tensor); + } + }, + "gpu-buffer" + ]); + } else { + const typedArrayConstructor = tensorTypeToTypedArrayConstructor(type); + const data = new typedArrayConstructor(size); + new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength)); + output.push([type, dims, data, "cpu"]); + } + } + } finally { + wasm2.stackRestore(beforeGetTensorDataStack); + if (type === "string" && dataOffset) { + wasm2._free(dataOffset); + } + if (!keepOutputTensor) { + wasm2._OrtReleaseTensor(tensor); + } + } + } + if (ioBindingState && !enableGraphCapture) { + wasm2._OrtClearBoundOutputs(ioBindingState.handle); + activeSessions.set( + sessionId, + [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, false] + ); + } + return output; + } finally { + wasm2.stackRestore(beforeRunStack); + inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + inputOutputAllocs.forEach((p) => wasm2._free(p)); + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + runOptionsAllocs.forEach((p) => wasm2._free(p)); + } + }; + endProfiling = (sessionId) => { + const wasm2 = getInstance(); + const session = activeSessions.get(sessionId); + if (!session) { + throw new Error("invalid session id"); + } + const sessionHandle = session[0]; + const profileFileName = wasm2._OrtEndProfiling(sessionHandle); + if (profileFileName === 0) { + checkLastError("Can't get an profile file name."); + } + wasm2._OrtFree(profileFileName); + }; + extractTransferableBuffers = (tensors) => { + const buffers = []; + for (const tensor of tensors) { + const data = tensor[2]; + if (!Array.isArray(data) && "buffer" in data) { + buffers.push(data.buffer); + } + } + return buffers; + }; + } +}); + +// proxy-worker:./proxy-worker/main +var require_main = __commonJS({ + "proxy-worker:./proxy-worker/main"(exports, module) { + module.exports = '/*!\n * ONNX Runtime Web v1.18.0\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n"use strict";\n(() => {\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n };\n var __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === "object" || typeof from === "function") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);\n\n // nodejs-ignore:fs\n var fs_exports = {};\n __export(fs_exports, {\n createReadStream: () => createReadStream,\n readFile: () => readFile,\n readFileSync: () => readFileSync\n });\n var readFile, readFileSync, createReadStream;\n var init_fs = __esm({\n "nodejs-ignore:fs"() {\n readFile = void 0;\n readFileSync = void 0;\n createReadStream = void 0;\n }\n });\n\n // nodejs-ignore:path\n var path_exports = {};\n __export(path_exports, {\n join: () => join2\n });\n var join2;\n var init_path = __esm({\n "nodejs-ignore:path"() {\n join2 = void 0;\n }\n });\n\n // web/lib/wasm/binding/ort-training-wasm-simd.js\n var require_ort_training_wasm_simd = __commonJS({\n "web/lib/wasm/binding/ort-training-wasm-simd.js"(exports, module) {\n "use strict";\n var ortWasm = (() => {\n var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;\n if (typeof __filename !== "undefined")\n _scriptDir = _scriptDir || __filename;\n return function(moduleArg = {}) {\n var d = moduleArg, k, l;\n d.ready = new Promise((a, b) => {\n k = a;\n l = b;\n });\n var r = Object.assign({}, d), v = "./this.program", aa = "object" == typeof window, x = "function" == typeof importScripts, ba = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, y = "", A, B, C;\n if (ba) {\n var fs = (init_fs(), __toCommonJS(fs_exports)), D = (init_path(), __toCommonJS(path_exports));\n y = x ? D.dirname(y) + "/" : __dirname + "/";\n A = (a, b) => {\n a = a.startsWith("file://") ? new URL(a) : D.normalize(a);\n return fs.readFileSync(a, b ? void 0 : "utf8");\n };\n C = (a) => {\n a = A(a, true);\n a.buffer || (a = new Uint8Array(a));\n return a;\n };\n B = (a, b, c, f = true) => {\n a = a.startsWith("file://") ? new URL(a) : D.normalize(a);\n fs.readFile(a, f ? void 0 : "utf8", (g, h) => {\n g ? c(g) : b(f ? h.buffer : h);\n });\n };\n !d.thisProgram && 1 < process.argv.length && (v = process.argv[1].replace(/\\\\/g, "/"));\n process.argv.slice(2);\n d.inspect = () => "[Emscripten Module object]";\n } else if (aa || x)\n x ? y = self.location.href : "undefined" != typeof document && document.currentScript && (y = document.currentScript.src), _scriptDir && (y = _scriptDir), 0 !== y.indexOf("blob:") ? y = y.substr(0, y.replace(/[?#].*/, "").lastIndexOf("/") + 1) : y = "", A = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.send(null);\n return b.responseText;\n }, x && (C = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.responseType = "arraybuffer";\n b.send(null);\n return new Uint8Array(b.response);\n }), B = (a, b, c) => {\n var f = new XMLHttpRequest();\n f.open("GET", a, true);\n f.responseType = "arraybuffer";\n f.onload = () => {\n 200 == f.status || 0 == f.status && f.response ? b(f.response) : c();\n };\n f.onerror = c;\n f.send(null);\n };\n var ca = d.print || console.log.bind(console), E = d.printErr || console.error.bind(console);\n Object.assign(d, r);\n r = null;\n d.thisProgram && (v = d.thisProgram);\n var F;\n d.wasmBinary && (F = d.wasmBinary);\n var noExitRuntime = d.noExitRuntime || true;\n "object" != typeof WebAssembly && G("no native wasm support detected");\n var H, I, da = false, J, K, L, M;\n function ea() {\n var a = H.buffer;\n d.HEAP8 = J = new Int8Array(a);\n d.HEAP16 = new Int16Array(a);\n d.HEAP32 = L = new Int32Array(a);\n d.HEAPU8 = K = new Uint8Array(a);\n d.HEAPU16 = new Uint16Array(a);\n d.HEAPU32 = M = new Uint32Array(a);\n d.HEAPF32 = new Float32Array(a);\n d.HEAPF64 = new Float64Array(a);\n }\n var fa = [], ha = [], ia = [];\n function ja() {\n var a = d.preRun.shift();\n fa.unshift(a);\n }\n var N = 0, O = null, P = null;\n function G(a) {\n if (d.onAbort)\n d.onAbort(a);\n a = "Aborted(" + a + ")";\n E(a);\n da = true;\n a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");\n l(a);\n throw a;\n }\n function ka(a) {\n return a.startsWith("data:application/octet-stream;base64,");\n }\n var Q;\n Q = "ort-training-wasm-simd.wasm";\n if (!ka(Q)) {\n var la = Q;\n Q = d.locateFile ? d.locateFile(la, y) : y + la;\n }\n function ma(a) {\n if (a == Q && F)\n return new Uint8Array(F);\n if (C)\n return C(a);\n throw "both async and sync fetching of the wasm failed";\n }\n function na(a) {\n if (!F && (aa || x)) {\n if ("function" == typeof fetch && !a.startsWith("file://"))\n return fetch(a, { credentials: "same-origin" }).then((b) => {\n if (!b.ok)\n throw "failed to load wasm binary file at \'" + a + "\'";\n return b.arrayBuffer();\n }).catch(() => ma(a));\n if (B)\n return new Promise((b, c) => {\n B(a, (f) => b(new Uint8Array(f)), c);\n });\n }\n return Promise.resolve().then(() => ma(a));\n }\n function oa(a, b, c) {\n return na(a).then((f) => WebAssembly.instantiate(f, b)).then((f) => f).then(c, (f) => {\n E("failed to asynchronously prepare wasm: " + f);\n G(f);\n });\n }\n function pa(a, b) {\n var c = Q;\n return F || "function" != typeof WebAssembly.instantiateStreaming || ka(c) || c.startsWith("file://") || ba || "function" != typeof fetch ? oa(c, a, b) : fetch(c, { credentials: "same-origin" }).then((f) => WebAssembly.instantiateStreaming(f, a).then(b, function(g) {\n E("wasm streaming compile failed: " + g);\n E("falling back to ArrayBuffer instantiation");\n return oa(c, a, b);\n }));\n }\n var R, S = (a) => {\n for (; 0 < a.length; )\n a.shift()(d);\n };\n function qa(a) {\n this.Ha = a - 24;\n this.La = function(b) {\n M[this.Ha + 4 >> 2 >>> 0] = b;\n };\n this.Ka = function(b) {\n M[this.Ha + 8 >> 2 >>> 0] = b;\n };\n this.Ia = function(b, c) {\n this.Ja();\n this.La(b);\n this.Ka(c);\n };\n this.Ja = function() {\n M[this.Ha + 16 >> 2 >>> 0] = 0;\n };\n }\n var ra = 0, sa = 0, ta = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, ua = (a, b, c) => {\n b >>>= 0;\n var f = b + c;\n for (c = b; a[c] && !(c >= f); )\n ++c;\n if (16 < c - b && a.buffer && ta)\n return ta.decode(a.subarray(b, c));\n for (f = ""; b < c; ) {\n var g = a[b++];\n if (g & 128) {\n var h = a[b++] & 63;\n if (192 == (g & 224))\n f += String.fromCharCode((g & 31) << 6 | h);\n else {\n var m = a[b++] & 63;\n g = 224 == (g & 240) ? (g & 15) << 12 | h << 6 | m : (g & 7) << 18 | h << 12 | m << 6 | a[b++] & 63;\n 65536 > g ? f += String.fromCharCode(g) : (g -= 65536, f += String.fromCharCode(55296 | g >> 10, 56320 | g & 1023));\n }\n } else\n f += String.fromCharCode(g);\n }\n return f;\n }, T = (a, b) => (a >>>= 0) ? ua(K, a, b) : "", U = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var f = a.charCodeAt(c);\n 127 >= f ? b++ : 2047 >= f ? b += 2 : 55296 <= f && 57343 >= f ? (b += 4, ++c) : b += 3;\n }\n return b;\n }, V = (a, b, c, f) => {\n c >>>= 0;\n if (!(0 < f))\n return 0;\n var g = c;\n f = c + f - 1;\n for (var h = 0; h < a.length; ++h) {\n var m = a.charCodeAt(h);\n if (55296 <= m && 57343 >= m) {\n var q = a.charCodeAt(++h);\n m = 65536 + ((m & 1023) << 10) | q & 1023;\n }\n if (127 >= m) {\n if (c >= f)\n break;\n b[c++ >>> 0] = m;\n } else {\n if (2047 >= m) {\n if (c + 1 >= f)\n break;\n b[c++ >>> 0] = 192 | m >> 6;\n } else {\n if (65535 >= m) {\n if (c + 2 >= f)\n break;\n b[c++ >>> 0] = 224 | m >> 12;\n } else {\n if (c + 3 >= f)\n break;\n b[c++ >>> 0] = 240 | m >> 18;\n b[c++ >>> 0] = 128 | m >> 12 & 63;\n }\n b[c++ >>> 0] = 128 | m >> 6 & 63;\n }\n b[c++ >>> 0] = 128 | m & 63;\n }\n }\n b[c >>> 0] = 0;\n return c - g;\n }, W = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), va = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], wa = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], Ba = (a) => {\n var b = U(a) + 1, c = Aa(b);\n c && V(a, K, c, b);\n return c;\n }, X = {}, Ca = () => {\n if (!Y) {\n var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace(\n "-",\n "_"\n ) + ".UTF-8", _: v || "./this.program" }, b;\n for (b in X)\n void 0 === X[b] ? delete a[b] : a[b] = X[b];\n var c = [];\n for (b in a)\n c.push(`${b}=${a[b]}`);\n Y = c;\n }\n return Y;\n }, Y, Da = [null, [], []], Ea = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Fa = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function Ga(a) {\n var b = Array(U(a) + 1);\n V(a, b, 0, b.length);\n return b;\n }\n function Ha(a, b, c, f) {\n function g(e, n, p) {\n for (e = "number" == typeof e ? e.toString() : e || ""; e.length < n; )\n e = p[0] + e;\n return e;\n }\n function h(e, n) {\n return g(e, n, "0");\n }\n function m(e, n) {\n function p(xa) {\n return 0 > xa ? -1 : 0 < xa ? 1 : 0;\n }\n var z;\n 0 === (z = p(e.getFullYear() - n.getFullYear())) && 0 === (z = p(e.getMonth() - n.getMonth())) && (z = p(e.getDate() - n.getDate()));\n return z;\n }\n function q(e) {\n switch (e.getDay()) {\n case 0:\n return new Date(e.getFullYear() - 1, 11, 29);\n case 1:\n return e;\n case 2:\n return new Date(e.getFullYear(), 0, 3);\n case 3:\n return new Date(\n e.getFullYear(),\n 0,\n 2\n );\n case 4:\n return new Date(e.getFullYear(), 0, 1);\n case 5:\n return new Date(e.getFullYear() - 1, 11, 31);\n case 6:\n return new Date(e.getFullYear() - 1, 11, 30);\n }\n }\n function w(e) {\n var n = e.Ca;\n for (e = new Date(new Date(e.Da + 1900, 0, 1).getTime()); 0 < n; ) {\n var p = e.getMonth(), z = (W(e.getFullYear()) ? Ea : Fa)[p];\n if (n > z - e.getDate())\n n -= z - e.getDate() + 1, e.setDate(1), 11 > p ? e.setMonth(p + 1) : (e.setMonth(0), e.setFullYear(e.getFullYear() + 1));\n else {\n e.setDate(e.getDate() + n);\n break;\n }\n }\n p = new Date(e.getFullYear() + 1, 0, 4);\n n = q(new Date(\n e.getFullYear(),\n 0,\n 4\n ));\n p = q(p);\n return 0 >= m(n, e) ? 0 >= m(p, e) ? e.getFullYear() + 1 : e.getFullYear() : e.getFullYear() - 1;\n }\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n f >>>= 0;\n var t = L[f + 40 >> 2 >>> 0];\n f = { Oa: L[f >> 2 >>> 0], Na: L[f + 4 >> 2 >>> 0], Ea: L[f + 8 >> 2 >>> 0], Ga: L[f + 12 >> 2 >>> 0], Fa: L[f + 16 >> 2 >>> 0], Da: L[f + 20 >> 2 >>> 0], xa: L[f + 24 >> 2 >>> 0], Ca: L[f + 28 >> 2 >>> 0], Qa: L[f + 32 >> 2 >>> 0], Ma: L[f + 36 >> 2 >>> 0], Pa: t ? T(t) : "" };\n c = T(c);\n t = {\n "%c": "%a %b %d %H:%M:%S %Y",\n "%D": "%m/%d/%y",\n "%F": "%Y-%m-%d",\n "%h": "%b",\n "%r": "%I:%M:%S %p",\n "%R": "%H:%M",\n "%T": "%H:%M:%S",\n "%x": "%m/%d/%y",\n "%X": "%H:%M:%S",\n "%Ec": "%c",\n "%EC": "%C",\n "%Ex": "%m/%d/%y",\n "%EX": "%H:%M:%S",\n "%Ey": "%y",\n "%EY": "%Y",\n "%Od": "%d",\n "%Oe": "%e",\n "%OH": "%H",\n "%OI": "%I",\n "%Om": "%m",\n "%OM": "%M",\n "%OS": "%S",\n "%Ou": "%u",\n "%OU": "%U",\n "%OV": "%V",\n "%Ow": "%w",\n "%OW": "%W",\n "%Oy": "%y"\n };\n for (var u in t)\n c = c.replace(new RegExp(u, "g"), t[u]);\n var ya = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), za = "January February March April May June July August September October November December".split(" ");\n t = { "%a": (e) => ya[e.xa].substring(0, 3), "%A": (e) => ya[e.xa], "%b": (e) => za[e.Fa].substring(0, 3), "%B": (e) => za[e.Fa], "%C": (e) => h((e.Da + 1900) / 100 | 0, 2), "%d": (e) => h(e.Ga, 2), "%e": (e) => g(e.Ga, 2, " "), "%g": (e) => w(e).toString().substring(2), "%G": (e) => w(e), "%H": (e) => h(e.Ea, 2), "%I": (e) => {\n e = e.Ea;\n 0 == e ? e = 12 : 12 < e && (e -= 12);\n return h(e, 2);\n }, "%j": (e) => {\n for (var n = 0, p = 0; p <= e.Fa - 1; n += (W(e.Da + 1900) ? Ea : Fa)[p++])\n ;\n return h(e.Ga + n, 3);\n }, "%m": (e) => h(e.Fa + 1, 2), "%M": (e) => h(e.Na, 2), "%n": () => "\\n", "%p": (e) => 0 <= e.Ea && 12 > e.Ea ? "AM" : "PM", "%S": (e) => h(e.Oa, 2), "%t": () => " ", "%u": (e) => e.xa || 7, "%U": (e) => h(Math.floor((e.Ca + 7 - e.xa) / 7), 2), "%V": (e) => {\n var n = Math.floor((e.Ca + 7 - (e.xa + 6) % 7) / 7);\n 2 >= (e.xa + 371 - e.Ca - 2) % 7 && n++;\n if (n)\n 53 == n && (p = (e.xa + 371 - e.Ca) % 7, 4 == p || 3 == p && W(e.Da) || (n = 1));\n else {\n n = 52;\n var p = (e.xa + 7 - e.Ca - 1) % 7;\n (4 == p || 5 == p && W(e.Da % 400 - 1)) && n++;\n }\n return h(n, 2);\n }, "%w": (e) => e.xa, "%W": (e) => h(Math.floor((e.Ca + 7 - (e.xa + 6) % 7) / 7), 2), "%y": (e) => (e.Da + 1900).toString().substring(2), "%Y": (e) => e.Da + 1900, "%z": (e) => {\n e = e.Ma;\n var n = 0 <= e;\n e = Math.abs(e) / 60;\n return (n ? "+" : "-") + String("0000" + (e / 60 * 100 + e % 60)).slice(-4);\n }, "%Z": (e) => e.Pa, "%%": () => "%" };\n c = c.replace(/%%/g, "\\0\\0");\n for (u in t)\n c.includes(u) && (c = c.replace(new RegExp(u, "g"), t[u](f)));\n c = c.replace(/\\0\\0/g, "%");\n u = Ga(c);\n if (u.length > b)\n return 0;\n J.set(u, a >>> 0);\n return u.length - 1;\n }\n var Ja = {\n a: function(a, b, c) {\n a >>>= 0;\n new qa(a).Ia(b >>> 0, c >>> 0);\n ra = a;\n sa++;\n throw ra;\n },\n e: function() {\n return 0;\n },\n H: function() {\n },\n x: function() {\n },\n z: function() {\n },\n k: function() {\n return 0;\n },\n F: function() {\n },\n B: function() {\n },\n E: function() {\n },\n g: function() {\n },\n y: function() {\n },\n v: function() {\n },\n G: function() {\n },\n w: function() {\n },\n l: () => true,\n o: function(a, b, c) {\n a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n c >>>= 0;\n a = new Date(1e3 * a);\n L[c >> 2 >>> 0] = a.getUTCSeconds();\n L[c + 4 >> 2 >>> 0] = a.getUTCMinutes();\n L[c + 8 >> 2 >>> 0] = a.getUTCHours();\n L[c + 12 >> 2 >>> 0] = a.getUTCDate();\n L[c + 16 >> 2 >>> 0] = a.getUTCMonth();\n L[c + 20 >> 2 >>> 0] = a.getUTCFullYear() - 1900;\n L[c + 24 >> 2 >>> 0] = a.getUTCDay();\n L[c + 28 >> 2 >>> 0] = (a.getTime() - Date.UTC(a.getUTCFullYear(), 0, 1, 0, 0, 0, 0)) / 864e5 | 0;\n },\n p: function(a, b, c) {\n a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n c >>>= 0;\n a = new Date(1e3 * a);\n L[c >> 2 >>> 0] = a.getSeconds();\n L[c + 4 >> 2 >>> 0] = a.getMinutes();\n L[c + 8 >> 2 >>> 0] = a.getHours();\n L[c + 12 >> 2 >>> 0] = a.getDate();\n L[c + 16 >> 2 >>> 0] = a.getMonth();\n L[c + 20 >> 2 >>> 0] = a.getFullYear() - 1900;\n L[c + 24 >> 2 >>> 0] = a.getDay();\n L[c + 28 >> 2 >>> 0] = (W(a.getFullYear()) ? va : wa)[a.getMonth()] + a.getDate() - 1 | 0;\n L[c + 36 >> 2 >>> 0] = -(60 * a.getTimezoneOffset());\n b = new Date(a.getFullYear(), 6, 1).getTimezoneOffset();\n var f = new Date(a.getFullYear(), 0, 1).getTimezoneOffset();\n L[c + 32 >> 2 >>> 0] = (b != f && a.getTimezoneOffset() == Math.min(f, b)) | 0;\n },\n q: function(a) {\n a >>>= 0;\n var b = new Date(L[a + 20 >> 2 >>> 0] + 1900, L[a + 16 >> 2 >>> 0], L[a + 12 >> 2 >>> 0], L[a + 8 >> 2 >>> 0], L[a + 4 >> 2 >>> 0], L[a >> 2 >>> 0], 0), c = L[a + 32 >> 2 >>> 0], f = b.getTimezoneOffset(), g = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), h = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), m = Math.min(h, g);\n 0 > c ? L[a + 32 >> 2 >>> 0] = Number(g != h && m == f) : 0 < c != (m == f) && (g = Math.max(h, g), b.setTime(b.getTime() + 6e4 * ((0 < c ? m : g) - f)));\n L[a + 24 >> 2 >>> 0] = b.getDay();\n L[a + 28 >> 2 >>> 0] = (W(b.getFullYear()) ? va : wa)[b.getMonth()] + b.getDate() - 1 | 0;\n L[a >> 2 >>> 0] = b.getSeconds();\n L[a + 4 >> 2 >>> 0] = b.getMinutes();\n L[a + 8 >> 2 >>> 0] = b.getHours();\n L[a + 12 >> 2 >>> 0] = b.getDate();\n L[a + 16 >> 2 >>> 0] = b.getMonth();\n L[a + 20 >> 2 >>> 0] = b.getYear();\n a = b.getTime() / 1e3;\n return Ia((R = a, 1 <= +Math.abs(R) ? 0 < R ? +Math.floor(R / 4294967296) >>> 0 : ~~+Math.ceil((R - +(~~R >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0;\n },\n m: function() {\n return -52;\n },\n n: function() {\n },\n t: function(a, b, c) {\n function f(w) {\n return (w = w.toTimeString().match(/\\(([A-Za-z ]+)\\)$/)) ? w[1] : "GMT";\n }\n c >>>= 0;\n var g = (/* @__PURE__ */ new Date()).getFullYear(), h = new Date(g, 0, 1), m = new Date(g, 6, 1);\n g = h.getTimezoneOffset();\n var q = m.getTimezoneOffset();\n M[a >>> 0 >> 2 >>> 0] = 60 * Math.max(g, q);\n L[b >>> 0 >> 2 >>> 0] = Number(g != q);\n a = f(h);\n b = f(m);\n a = Ba(a);\n b = Ba(b);\n q < g ? (M[c >> 2 >>> 0] = a, M[c + 4 >> 2 >>> 0] = b) : (M[c >> 2 >>> 0] = b, M[c + 4 >> 2 >>> 0] = a);\n },\n d: () => {\n G("");\n },\n h: function() {\n return Date.now();\n },\n u: function() {\n return 4294901760;\n },\n b: () => performance.now(),\n I: function(a, b, c) {\n b >>>= 0;\n return K.copyWithin(a >>> 0 >>> 0, b >>> 0, b + (c >>> 0) >>> 0);\n },\n s: function(a) {\n a >>>= 0;\n var b = K.length;\n if (4294901760 < a)\n return false;\n for (var c = 1; 4 >= c; c *= 2) {\n var f = b * (1 + 0.2 / c);\n f = Math.min(f, a + 100663296);\n var g = Math;\n f = Math.max(a, f);\n a: {\n g = g.min.call(g, 4294901760, f + (65536 - f % 65536) % 65536) - H.buffer.byteLength + 65535 >>> 16;\n try {\n H.grow(g);\n ea();\n var h = 1;\n break a;\n } catch (m) {\n }\n h = void 0;\n }\n if (h)\n return true;\n }\n return false;\n },\n C: function(a, b) {\n a >>>= 0;\n b >>>= 0;\n var c = 0;\n Ca().forEach(function(f, g) {\n var h = b + c;\n g = M[a + 4 * g >> 2 >>> 0] = h;\n for (h = 0; h < f.length; ++h)\n J[g++ >> 0 >>> 0] = f.charCodeAt(h);\n J[g >> 0 >>> 0] = 0;\n c += f.length + 1;\n });\n return 0;\n },\n D: function(a, b) {\n a >>>= 0;\n b >>>= 0;\n var c = Ca();\n M[a >> 2 >>> 0] = c.length;\n var f = 0;\n c.forEach(function(g) {\n f += g.length + 1;\n });\n M[b >> 2 >>> 0] = f;\n return 0;\n },\n f: () => 52,\n j: function() {\n return 52;\n },\n r: function() {\n return 70;\n },\n i: function(a, b, c, f) {\n b >>>= 0;\n c >>>= 0;\n f >>>= 0;\n for (var g = 0, h = 0; h < c; h++) {\n var m = M[b >> 2 >>> 0], q = M[b + 4 >> 2 >>> 0];\n b += 8;\n for (var w = 0; w < q; w++) {\n var t = K[m + w >>> 0], u = Da[a];\n 0 === t || 10 === t ? ((1 === a ? ca : E)(ua(u, 0)), u.length = 0) : u.push(t);\n }\n g += q;\n }\n M[f >> 2 >>> 0] = g;\n return 0;\n },\n A: Ha,\n c: function(a, b, c, f) {\n return Ha(a >>> 0, b >>> 0, c >>> 0, f >>> 0);\n }\n };\n (function() {\n function a(c) {\n c = c.exports;\n I = c = Ka(c);\n H = I.J;\n ea();\n ha.unshift(I.K);\n N--;\n d.monitorRunDependencies && d.monitorRunDependencies(N);\n if (0 == N && (null !== O && (clearInterval(O), O = null), P)) {\n var f = P;\n P = null;\n f();\n }\n return c;\n }\n var b = { a: Ja };\n N++;\n d.monitorRunDependencies && d.monitorRunDependencies(N);\n if (d.instantiateWasm)\n try {\n return d.instantiateWasm(b, a);\n } catch (c) {\n E("Module.instantiateWasm callback failed with error: " + c), l(c);\n }\n pa(b, function(c) {\n a(c.instance);\n }).catch(l);\n return {};\n })();\n d._OrtInit = (a, b) => (d._OrtInit = I.L)(a, b);\n d._OrtGetLastError = (a, b) => (d._OrtGetLastError = I.M)(a, b);\n d._OrtCreateSessionOptions = (a, b, c, f, g, h, m, q, w, t) => (d._OrtCreateSessionOptions = I.N)(a, b, c, f, g, h, m, q, w, t);\n d._OrtAppendExecutionProvider = (a, b) => (d._OrtAppendExecutionProvider = I.O)(a, b);\n d._OrtAddFreeDimensionOverride = (a, b, c) => (d._OrtAddFreeDimensionOverride = I.P)(a, b, c);\n d._OrtAddSessionConfigEntry = (a, b, c) => (d._OrtAddSessionConfigEntry = I.Q)(a, b, c);\n d._OrtReleaseSessionOptions = (a) => (d._OrtReleaseSessionOptions = I.R)(a);\n d._OrtCreateSession = (a, b, c) => (d._OrtCreateSession = I.S)(a, b, c);\n d._OrtReleaseSession = (a) => (d._OrtReleaseSession = I.T)(a);\n d._OrtGetInputOutputCount = (a, b, c) => (d._OrtGetInputOutputCount = I.U)(a, b, c);\n d._OrtGetInputName = (a, b) => (d._OrtGetInputName = I.V)(a, b);\n d._OrtGetOutputName = (a, b) => (d._OrtGetOutputName = I.W)(a, b);\n d._OrtFree = (a) => (d._OrtFree = I.X)(a);\n d._OrtCreateTensor = (a, b, c, f, g, h) => (d._OrtCreateTensor = I.Y)(a, b, c, f, g, h);\n d._OrtGetTensorData = (a, b, c, f, g) => (d._OrtGetTensorData = I.Z)(a, b, c, f, g);\n d._OrtReleaseTensor = (a) => (d._OrtReleaseTensor = I._)(a);\n d._OrtCreateRunOptions = (a, b, c, f) => (d._OrtCreateRunOptions = I.$)(a, b, c, f);\n d._OrtAddRunConfigEntry = (a, b, c) => (d._OrtAddRunConfigEntry = I.aa)(a, b, c);\n d._OrtReleaseRunOptions = (a) => (d._OrtReleaseRunOptions = I.ba)(a);\n d._OrtCreateBinding = (a) => (d._OrtCreateBinding = I.ca)(a);\n d._OrtBindInput = (a, b, c) => (d._OrtBindInput = I.da)(a, b, c);\n d._OrtBindOutput = (a, b, c, f) => (d._OrtBindOutput = I.ea)(a, b, c, f);\n d._OrtClearBoundOutputs = (a) => (d._OrtClearBoundOutputs = I.fa)(a);\n d._OrtReleaseBinding = (a) => (d._OrtReleaseBinding = I.ga)(a);\n d._OrtRunWithBinding = (a, b, c, f, g) => (d._OrtRunWithBinding = I.ha)(a, b, c, f, g);\n d._OrtRun = (a, b, c, f, g, h, m, q) => (d._OrtRun = I.ia)(a, b, c, f, g, h, m, q);\n d._OrtEndProfiling = (a) => (d._OrtEndProfiling = I.ja)(a);\n d._OrtTrainingLoadCheckpoint = (a, b) => (d._OrtTrainingLoadCheckpoint = I.ka)(a, b);\n d._OrtTrainingReleaseCheckpoint = (a) => (d._OrtTrainingReleaseCheckpoint = I.la)(a);\n d._OrtTrainingCreateSession = (a, b, c, f, g, h, m, q) => (d._OrtTrainingCreateSession = I.ma)(a, b, c, f, g, h, m, q);\n d._OrtTrainingLazyResetGrad = (a) => (d._OrtTrainingLazyResetGrad = I.na)(a);\n d._OrtTrainingRunTrainStep = (a, b, c, f, g, h) => (d._OrtTrainingRunTrainStep = I.oa)(a, b, c, f, g, h);\n d._OrtTrainingOptimizerStep = (a, b) => (d._OrtTrainingOptimizerStep = I.pa)(a, b);\n d._OrtTrainingEvalStep = (a, b, c, f, g, h) => (d._OrtTrainingEvalStep = I.qa)(a, b, c, f, g, h);\n d._OrtTrainingGetParametersSize = (a, b, c) => (d._OrtTrainingGetParametersSize = I.ra)(a, b, c);\n d._OrtTrainingCopyParametersToBuffer = (a, b, c, f) => (d._OrtTrainingCopyParametersToBuffer = I.sa)(a, b, c, f);\n d._OrtTrainingCopyParametersFromBuffer = (a, b, c, f) => (d._OrtTrainingCopyParametersFromBuffer = I.ta)(a, b, c, f);\n d._OrtTrainingReleaseSession = (a) => (d._OrtTrainingReleaseSession = I.ua)(a);\n var Aa = d._malloc = (a) => (Aa = d._malloc = I.va)(a);\n d._free = (a) => (d._free = I.wa)(a);\n var Ia = (a) => (Ia = I.ya)(a), La = () => (La = I.za)(), Ma = (a) => (Ma = I.Aa)(a), Na = (a) => (Na = I.Ba)(a);\n function Ka(a) {\n a = Object.assign({}, a);\n var b = (f) => () => f() >>> 0, c = (f) => (g) => f(g) >>> 0;\n a.__errno_location = b(a.__errno_location);\n a.malloc = c(a.malloc);\n a.stackSave = b(a.stackSave);\n a.stackAlloc = c(a.stackAlloc);\n return a;\n }\n d.stackAlloc = Na;\n d.stackSave = La;\n d.stackRestore = Ma;\n d.UTF8ToString = T;\n d.stringToUTF8 = (a, b, c) => V(a, K, b, c);\n d.lengthBytesUTF8 = U;\n var Z;\n P = function Oa() {\n Z || Pa();\n Z || (P = Oa);\n };\n function Pa() {\n function a() {\n if (!Z && (Z = true, d.calledRun = true, !da)) {\n S(ha);\n k(d);\n if (d.onRuntimeInitialized)\n d.onRuntimeInitialized();\n if (d.postRun)\n for ("function" == typeof d.postRun && (d.postRun = [d.postRun]); d.postRun.length; ) {\n var b = d.postRun.shift();\n ia.unshift(b);\n }\n S(ia);\n }\n }\n if (!(0 < N)) {\n if (d.preRun)\n for ("function" == typeof d.preRun && (d.preRun = [d.preRun]); d.preRun.length; )\n ja();\n S(fa);\n 0 < N || (d.setStatus ? (d.setStatus("Running..."), setTimeout(function() {\n setTimeout(function() {\n d.setStatus("");\n }, 1);\n a();\n }, 1)) : a());\n }\n }\n if (d.preInit)\n for ("function" == typeof d.preInit && (d.preInit = [d.preInit]); 0 < d.preInit.length; )\n d.preInit.pop()();\n Pa();\n return moduleArg.ready;\n };\n })();\n if (typeof exports === "object" && typeof module === "object")\n module.exports = ortWasm;\n else if (typeof define === "function" && define["amd"])\n define([], () => ortWasm);\n }\n });\n\n // nodejs-ignore:worker_threads\n var require_worker_threads = __commonJS({\n "nodejs-ignore:worker_threads"() {\n }\n });\n\n // nodejs-ignore:perf_hooks\n var require_perf_hooks = __commonJS({\n "nodejs-ignore:perf_hooks"() {\n }\n });\n\n // nodejs-ignore:os\n var os_exports = {};\n __export(os_exports, {\n cpus: () => cpus\n });\n var cpus;\n var init_os = __esm({\n "nodejs-ignore:os"() {\n cpus = void 0;\n }\n });\n\n // web/lib/wasm/binding/ort-wasm-threaded.js\n var require_ort_wasm_threaded = __commonJS({\n "web/lib/wasm/binding/ort-wasm-threaded.js"(exports, module) {\n "use strict";\n var ortWasmThreaded = (() => {\n var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;\n if (typeof __filename !== "undefined")\n _scriptDir = _scriptDir || __filename;\n return function(moduleArg = {}) {\n function aa() {\n d.buffer != l.buffer && m();\n return l;\n }\n function n() {\n d.buffer != l.buffer && m();\n return ba;\n }\n function p() {\n d.buffer != l.buffer && m();\n return ca;\n }\n function r() {\n d.buffer != l.buffer && m();\n return da;\n }\n function ea() {\n d.buffer != l.buffer && m();\n return fa;\n }\n var w = moduleArg, ha, x;\n w.ready = new Promise((a, b) => {\n ha = a;\n x = b;\n });\n var ia = Object.assign({}, w), ja = "./this.program", z = (a, b) => {\n throw b;\n }, ka = "object" == typeof window, A = "function" == typeof importScripts, B = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, D = w.ENVIRONMENT_IS_PTHREAD || false, E = "";\n function la(a) {\n return w.locateFile ? w.locateFile(a, E) : E + a;\n }\n var ma, F, H;\n if (B) {\n var fs = (init_fs(), __toCommonJS(fs_exports)), na = (init_path(), __toCommonJS(path_exports));\n E = A ? na.dirname(E) + "/" : __dirname + "/";\n ma = (b, c) => {\n b = b.startsWith("file://") ? new URL(b) : na.normalize(b);\n return fs.readFileSync(b, c ? void 0 : "utf8");\n };\n H = (b) => {\n b = ma(b, true);\n b.buffer || (b = new Uint8Array(b));\n return b;\n };\n F = (b, c, e, h = true) => {\n b = b.startsWith("file://") ? new URL(b) : na.normalize(b);\n fs.readFile(b, h ? void 0 : "utf8", (g, k) => {\n g ? e(g) : c(h ? k.buffer : k);\n });\n };\n !w.thisProgram && 1 < process.argv.length && (ja = process.argv[1].replace(/\\\\/g, "/"));\n process.argv.slice(2);\n z = (b, c) => {\n process.exitCode = b;\n throw c;\n };\n w.inspect = () => "[Emscripten Module object]";\n let a;\n try {\n a = require_worker_threads();\n } catch (b) {\n throw console.error(\'The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?\'), b;\n }\n global.Worker = a.Worker;\n } else if (ka || A)\n A ? E = self.location.href : "undefined" != typeof document && document.currentScript && (E = document.currentScript.src), typeof _scriptDir !== "undefined" && _scriptDir && (E = _scriptDir), 0 !== E.indexOf("blob:") ? E = E.substr(0, E.replace(/[?#].*/, "").lastIndexOf("/") + 1) : E = "", B || (ma = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.send(null);\n return b.responseText;\n }, A && (H = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.responseType = "arraybuffer";\n b.send(null);\n return new Uint8Array(b.response);\n }), F = (a, b, c) => {\n var e = new XMLHttpRequest();\n e.open("GET", a, true);\n e.responseType = "arraybuffer";\n e.onload = () => {\n 200 == e.status || 0 == e.status && e.response ? b(e.response) : c();\n };\n e.onerror = c;\n e.send(null);\n });\n B && "undefined" == typeof performance && (global.performance = require_perf_hooks().performance);\n var oa = console.log.bind(console), pa = console.error.bind(console);\n B && (oa = (...a) => fs.writeSync(1, a.join(" ") + "\\n"), pa = (...a) => fs.writeSync(2, a.join(" ") + "\\n"));\n var qa = w.print || oa, I = w.printErr || pa;\n Object.assign(w, ia);\n ia = null;\n w.thisProgram && (ja = w.thisProgram);\n w.quit && (z = w.quit);\n var J;\n w.wasmBinary && (J = w.wasmBinary);\n var noExitRuntime = w.noExitRuntime || true;\n "object" != typeof WebAssembly && K("no native wasm support detected");\n var d, L, ra, M = false, N, l, ba, ca, da, fa;\n function m() {\n var a = d.buffer;\n w.HEAP8 = l = new Int8Array(a);\n w.HEAP16 = new Int16Array(a);\n w.HEAP32 = ca = new Int32Array(a);\n w.HEAPU8 = ba = new Uint8Array(a);\n w.HEAPU16 = new Uint16Array(a);\n w.HEAPU32 = da = new Uint32Array(a);\n w.HEAPF32 = new Float32Array(a);\n w.HEAPF64 = fa = new Float64Array(a);\n }\n var O = w.INITIAL_MEMORY || 16777216;\n 5242880 <= O || K("INITIAL_MEMORY should be larger than STACK_SIZE, was " + O + "! (STACK_SIZE=5242880)");\n if (D)\n d = w.wasmMemory;\n else if (w.wasmMemory)\n d = w.wasmMemory;\n else if (d = new WebAssembly.Memory({ initial: O / 65536, maximum: 65536, shared: true }), !(d.buffer instanceof SharedArrayBuffer))\n throw I("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"), B && I("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory");\n m();\n O = d.buffer.byteLength;\n var sa, ta = [], ua = [], va = [], wa = 0;\n function P() {\n return noExitRuntime || 0 < wa;\n }\n var Q = 0, xa = null, R = null;\n function ya() {\n Q++;\n w.monitorRunDependencies && w.monitorRunDependencies(Q);\n }\n function za() {\n Q--;\n w.monitorRunDependencies && w.monitorRunDependencies(Q);\n if (0 == Q && (null !== xa && (clearInterval(xa), xa = null), R)) {\n var a = R;\n R = null;\n a();\n }\n }\n function K(a) {\n if (w.onAbort)\n w.onAbort(a);\n a = "Aborted(" + a + ")";\n I(a);\n M = true;\n N = 1;\n a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");\n x(a);\n throw a;\n }\n function Aa(a) {\n return a.startsWith("data:application/octet-stream;base64,");\n }\n var S;\n S = "ort-wasm-threaded.wasm";\n Aa(S) || (S = la(S));\n function Ba(a) {\n if (a == S && J)\n return new Uint8Array(J);\n if (H)\n return H(a);\n throw "both async and sync fetching of the wasm failed";\n }\n function Ca(a) {\n if (!J && (ka || A)) {\n if ("function" == typeof fetch && !a.startsWith("file://"))\n return fetch(a, { credentials: "same-origin" }).then((b) => {\n if (!b.ok)\n throw "failed to load wasm binary file at \'" + a + "\'";\n return b.arrayBuffer();\n }).catch(() => Ba(a));\n if (F)\n return new Promise((b, c) => {\n F(a, (e) => b(new Uint8Array(e)), c);\n });\n }\n return Promise.resolve().then(() => Ba(a));\n }\n function Da(a, b, c) {\n return Ca(a).then((e) => WebAssembly.instantiate(e, b)).then((e) => e).then(c, (e) => {\n I("failed to asynchronously prepare wasm: " + e);\n K(e);\n });\n }\n function Ea(a, b) {\n var c = S;\n return J || "function" != typeof WebAssembly.instantiateStreaming || Aa(c) || c.startsWith("file://") || B || "function" != typeof fetch ? Da(c, a, b) : fetch(c, { credentials: "same-origin" }).then((e) => WebAssembly.instantiateStreaming(e, a).then(b, function(h) {\n I("wasm streaming compile failed: " + h);\n I("falling back to ArrayBuffer instantiation");\n return Da(c, a, b);\n }));\n }\n var T;\n function U(a) {\n this.name = "ExitStatus";\n this.message = `Program terminated with exit(${a})`;\n this.status = a;\n }\n function Fa(a) {\n a.terminate();\n a.onmessage = () => {\n };\n }\n function Ga(a) {\n (a = V.La[a]) || K();\n V.lb(a);\n }\n function Ha(a) {\n var b = V.fb();\n if (!b)\n return 6;\n V.Oa.push(b);\n V.La[a.Na] = b;\n b.Na = a.Na;\n var c = { cmd: "run", start_routine: a.mb, arg: a.eb, pthread_ptr: a.Na };\n B && b.unref();\n b.postMessage(c, a.sb);\n return 0;\n }\n var Ia = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, Ja = (a, b, c) => {\n b >>>= 0;\n var e = b + c;\n for (c = b; a[c] && !(c >= e); )\n ++c;\n if (16 < c - b && a.buffer && Ia)\n return Ia.decode(a.buffer instanceof SharedArrayBuffer ? a.slice(b, c) : a.subarray(b, c));\n for (e = ""; b < c; ) {\n var h = a[b++];\n if (h & 128) {\n var g = a[b++] & 63;\n if (192 == (h & 224))\n e += String.fromCharCode((h & 31) << 6 | g);\n else {\n var k = a[b++] & 63;\n h = 224 == (h & 240) ? (h & 15) << 12 | g << 6 | k : (h & 7) << 18 | g << 12 | k << 6 | a[b++] & 63;\n 65536 > h ? e += String.fromCharCode(h) : (h -= 65536, e += String.fromCharCode(55296 | h >> 10, 56320 | h & 1023));\n }\n } else\n e += String.fromCharCode(h);\n }\n return e;\n }, Ka = (a, b) => (a >>>= 0) ? Ja(n(), a, b) : "";\n function La(a) {\n if (D)\n return W(1, 1, a);\n N = a;\n if (!P()) {\n V.nb();\n if (w.onExit)\n w.onExit(a);\n M = true;\n }\n z(a, new U(a));\n }\n var Na = (a) => {\n N = a;\n if (D)\n throw Ma(a), "unwind";\n La(a);\n }, V = {\n Ra: [],\n Oa: [],\n Za: [],\n La: {},\n Va: function() {\n D ? V.hb() : V.gb();\n },\n gb: function() {\n ta.unshift(() => {\n ya();\n V.ib(() => za());\n });\n },\n hb: function() {\n V.receiveObjectTransfer = V.kb;\n V.threadInitTLS = V.Ya;\n V.setExitStatus = V.Xa;\n noExitRuntime = false;\n },\n Xa: function(a) {\n N = a;\n },\n xb: ["$terminateWorker"],\n nb: function() {\n for (var a of V.Oa)\n Fa(a);\n for (a of V.Ra)\n Fa(a);\n V.Ra = [];\n V.Oa = [];\n V.La = [];\n },\n lb: function(a) {\n var b = a.Na;\n delete V.La[b];\n V.Ra.push(a);\n V.Oa.splice(V.Oa.indexOf(a), 1);\n a.Na = 0;\n Oa(b);\n },\n kb: function() {\n },\n Ya: function() {\n V.Za.forEach((a) => a());\n },\n jb: (a) => new Promise((b) => {\n a.onmessage = (g) => {\n g = g.data;\n var k = g.cmd;\n if (g.targetThread && g.targetThread != X()) {\n var t = V.La[g.wb];\n t ? t.postMessage(g, g.transferList) : I(\'Internal error! Worker sent a message "\' + k + \'" to target pthread \' + g.targetThread + ", but that thread no longer exists!");\n } else if ("checkMailbox" === k)\n Y();\n else if ("spawnThread" === k)\n Ha(g);\n else if ("cleanupThread" === k)\n Ga(g.thread);\n else if ("killThread" === k)\n g = g.thread, k = V.La[g], delete V.La[g], Fa(k), Oa(g), V.Oa.splice(\n V.Oa.indexOf(k),\n 1\n ), k.Na = 0;\n else if ("cancelThread" === k)\n V.La[g.thread].postMessage({ cmd: "cancel" });\n else if ("loaded" === k)\n a.loaded = true, b(a);\n else if ("alert" === k)\n alert("Thread " + g.threadId + ": " + g.text);\n else if ("setimmediate" === g.target)\n a.postMessage(g);\n else if ("callHandler" === k)\n w[g.handler](...g.args);\n else\n k && I("worker sent an unknown command " + k);\n };\n a.onerror = (g) => {\n I("worker sent an error! " + g.filename + ":" + g.lineno + ": " + g.message);\n throw g;\n };\n B && (a.on("message", function(g) {\n a.onmessage({ data: g });\n }), a.on("error", function(g) {\n a.onerror(g);\n }));\n var c = [], e = ["onExit", "onAbort", "print", "printErr"], h;\n for (h of e)\n w.hasOwnProperty(h) && c.push(h);\n a.postMessage({ cmd: "load", handlers: c, urlOrBlob: w.mainScriptUrlOrBlob || _scriptDir, wasmMemory: d, wasmModule: ra });\n }),\n ib: function(a) {\n a();\n },\n cb: function() {\n var a = la("ort-wasm-threaded.worker.js");\n a = new Worker(a);\n V.Ra.push(a);\n },\n fb: function() {\n 0 == V.Ra.length && (V.cb(), V.jb(V.Ra[0]));\n return V.Ra.pop();\n }\n };\n w.PThread = V;\n var Pa = (a) => {\n for (; 0 < a.length; )\n a.shift()(w);\n };\n w.establishStackSpace = function() {\n var a = X(), b = p()[a + 52 >> 2 >>> 0];\n a = p()[a + 56 >> 2 >>> 0];\n Qa(b, b - a);\n Ra(b);\n };\n function Ma(a) {\n if (D)\n return W(2, 0, a);\n Na(a);\n }\n var Sa = [];\n w.invokeEntryPoint = function(a, b) {\n var c = Sa[a];\n c || (a >= Sa.length && (Sa.length = a + 1), Sa[a] = c = sa.get(a));\n a = c(b);\n P() ? V.Xa(a) : Ta(a);\n };\n function Ua(a) {\n this.Ua = a - 24;\n this.bb = function(b) {\n r()[this.Ua + 4 >> 2 >>> 0] = b;\n };\n this.ab = function(b) {\n r()[this.Ua + 8 >> 2 >>> 0] = b;\n };\n this.Va = function(b, c) {\n this.$a();\n this.bb(b);\n this.ab(c);\n };\n this.$a = function() {\n r()[this.Ua + 16 >> 2 >>> 0] = 0;\n };\n }\n var Va = 0, Wa = 0;\n function Xa(a, b, c, e) {\n return D ? W(3, 1, a, b, c, e) : Ya(a, b, c, e);\n }\n function Ya(a, b, c, e) {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n e >>>= 0;\n if ("undefined" == typeof SharedArrayBuffer)\n return I("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6;\n var h = [];\n if (D && 0 === h.length)\n return Xa(a, b, c, e);\n a = { mb: c, Na: a, eb: e, sb: h };\n return D ? (a.ub = "spawnThread", postMessage(a, h), 0) : Ha(a);\n }\n function Za(a, b, c) {\n return D ? W(4, 1, a, b, c) : 0;\n }\n function $a(a, b) {\n if (D)\n return W(5, 1, a, b);\n }\n var ab = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var e = a.charCodeAt(c);\n 127 >= e ? b++ : 2047 >= e ? b += 2 : 55296 <= e && 57343 >= e ? (b += 4, ++c) : b += 3;\n }\n return b;\n }, bb = (a, b, c, e) => {\n c >>>= 0;\n if (!(0 < e))\n return 0;\n var h = c;\n e = c + e - 1;\n for (var g = 0; g < a.length; ++g) {\n var k = a.charCodeAt(g);\n if (55296 <= k && 57343 >= k) {\n var t = a.charCodeAt(++g);\n k = 65536 + ((k & 1023) << 10) | t & 1023;\n }\n if (127 >= k) {\n if (c >= e)\n break;\n b[c++ >>> 0] = k;\n } else {\n if (2047 >= k) {\n if (c + 1 >= e)\n break;\n b[c++ >>> 0] = 192 | k >> 6;\n } else {\n if (65535 >= k) {\n if (c + 2 >= e)\n break;\n b[c++ >>> 0] = 224 | k >> 12;\n } else {\n if (c + 3 >= e)\n break;\n b[c++ >>> 0] = 240 | k >> 18;\n b[c++ >>> 0] = 128 | k >> 12 & 63;\n }\n b[c++ >>> 0] = 128 | k >> 6 & 63;\n }\n b[c++ >>> 0] = 128 | k & 63;\n }\n }\n b[c >>> 0] = 0;\n return c - h;\n }, cb = (a, b, c) => bb(a, n(), b, c);\n function db(a, b) {\n if (D)\n return W(6, 1, a, b);\n }\n function eb(a, b, c) {\n if (D)\n return W(7, 1, a, b, c);\n }\n function fb(a, b, c) {\n return D ? W(8, 1, a, b, c) : 0;\n }\n function gb(a, b) {\n if (D)\n return W(9, 1, a, b);\n }\n function hb(a, b, c) {\n if (D)\n return W(10, 1, a, b, c);\n }\n function ib(a, b, c, e) {\n if (D)\n return W(11, 1, a, b, c, e);\n }\n function jb(a, b, c, e) {\n if (D)\n return W(12, 1, a, b, c, e);\n }\n function kb(a, b, c, e) {\n if (D)\n return W(13, 1, a, b, c, e);\n }\n function lb(a) {\n if (D)\n return W(14, 1, a);\n }\n function mb(a, b) {\n if (D)\n return W(15, 1, a, b);\n }\n function nb(a, b, c) {\n if (D)\n return W(16, 1, a, b, c);\n }\n var ob = (a) => {\n if (!M)\n try {\n if (a(), !P())\n try {\n D ? Ta(N) : Na(N);\n } catch (b) {\n b instanceof U || "unwind" == b || z(1, b);\n }\n } catch (b) {\n b instanceof U || "unwind" == b || z(1, b);\n }\n };\n function pb(a) {\n a >>>= 0;\n "function" === typeof Atomics.tb && (Atomics.tb(p(), a >> 2, a).value.then(Y), a += 128, Atomics.store(p(), a >> 2, 1));\n }\n w.__emscripten_thread_mailbox_await = pb;\n function Y() {\n var a = X();\n a && (pb(a), ob(() => qb()));\n }\n w.checkMailbox = Y;\n var Z = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), rb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], sb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n function tb(a, b, c, e, h, g, k, t) {\n return D ? W(17, 1, a, b, c, e, h, g, k, t) : -52;\n }\n function ub(a, b, c, e, h, g, k) {\n if (D)\n return W(18, 1, a, b, c, e, h, g, k);\n }\n var wb = (a) => {\n var b = ab(a) + 1, c = vb(b);\n c && cb(a, c, b);\n return c;\n }, yb = (a) => {\n var b = xb();\n a = a();\n Ra(b);\n return a;\n };\n function W(a, b) {\n var c = arguments.length - 2, e = arguments;\n return yb(() => {\n for (var h = zb(8 * c), g = h >> 3, k = 0; k < c; k++) {\n var t = e[2 + k];\n ea()[g + k >>> 0] = t;\n }\n return Ab(a, c, h, b);\n });\n }\n var Bb = [], Cb = {}, Eb = () => {\n if (!Db) {\n var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: ja || "./this.program" }, b;\n for (b in Cb)\n void 0 === Cb[b] ? delete a[b] : a[b] = Cb[b];\n var c = [];\n for (b in a)\n c.push(`${b}=${a[b]}`);\n Db = c;\n }\n return Db;\n }, Db;\n function Fb(a, b) {\n if (D)\n return W(19, 1, a, b);\n a >>>= 0;\n b >>>= 0;\n var c = 0;\n Eb().forEach(function(e, h) {\n var g = b + c;\n h = r()[a + 4 * h >> 2 >>> 0] = g;\n for (g = 0; g < e.length; ++g)\n aa()[h++ >> 0 >>> 0] = e.charCodeAt(g);\n aa()[h >> 0 >>> 0] = 0;\n c += e.length + 1;\n });\n return 0;\n }\n function Gb(a, b) {\n if (D)\n return W(20, 1, a, b);\n a >>>= 0;\n b >>>= 0;\n var c = Eb();\n r()[a >> 2 >>> 0] = c.length;\n var e = 0;\n c.forEach(function(h) {\n e += h.length + 1;\n });\n r()[b >> 2 >>> 0] = e;\n return 0;\n }\n function Hb(a) {\n return D ? W(21, 1, a) : 52;\n }\n function Lb(a, b, c, e) {\n return D ? W(22, 1, a, b, c, e) : 52;\n }\n function Mb(a, b, c, e, h) {\n return D ? W(23, 1, a, b, c, e, h) : 70;\n }\n var Nb = [null, [], []];\n function Ob(a, b, c, e) {\n if (D)\n return W(24, 1, a, b, c, e);\n b >>>= 0;\n c >>>= 0;\n e >>>= 0;\n for (var h = 0, g = 0; g < c; g++) {\n var k = r()[b >> 2 >>> 0], t = r()[b + 4 >> 2 >>> 0];\n b += 8;\n for (var C = 0; C < t; C++) {\n var v = n()[k + C >>> 0], y = Nb[a];\n 0 === v || 10 === v ? ((1 === a ? qa : I)(Ja(y, 0)), y.length = 0) : y.push(v);\n }\n h += t;\n }\n r()[e >> 2 >>> 0] = h;\n return 0;\n }\n var Pb = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Qb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function Rb(a) {\n var b = Array(ab(a) + 1);\n bb(a, b, 0, b.length);\n return b;\n }\n var Sb = (a, b) => {\n aa().set(a, b >>> 0);\n };\n function Tb(a, b, c, e) {\n function h(f, q, u) {\n for (f = "number" == typeof f ? f.toString() : f || ""; f.length < q; )\n f = u[0] + f;\n return f;\n }\n function g(f, q) {\n return h(f, q, "0");\n }\n function k(f, q) {\n function u(Ib) {\n return 0 > Ib ? -1 : 0 < Ib ? 1 : 0;\n }\n var G;\n 0 === (G = u(f.getFullYear() - q.getFullYear())) && 0 === (G = u(f.getMonth() - q.getMonth())) && (G = u(f.getDate() - q.getDate()));\n return G;\n }\n function t(f) {\n switch (f.getDay()) {\n case 0:\n return new Date(f.getFullYear() - 1, 11, 29);\n case 1:\n return f;\n case 2:\n return new Date(f.getFullYear(), 0, 3);\n case 3:\n return new Date(\n f.getFullYear(),\n 0,\n 2\n );\n case 4:\n return new Date(f.getFullYear(), 0, 1);\n case 5:\n return new Date(f.getFullYear() - 1, 11, 31);\n case 6:\n return new Date(f.getFullYear() - 1, 11, 30);\n }\n }\n function C(f) {\n var q = f.Pa;\n for (f = new Date(new Date(f.Qa + 1900, 0, 1).getTime()); 0 < q; ) {\n var u = f.getMonth(), G = (Z(f.getFullYear()) ? Pb : Qb)[u];\n if (q > G - f.getDate())\n q -= G - f.getDate() + 1, f.setDate(1), 11 > u ? f.setMonth(u + 1) : (f.setMonth(0), f.setFullYear(f.getFullYear() + 1));\n else {\n f.setDate(f.getDate() + q);\n break;\n }\n }\n u = new Date(f.getFullYear() + 1, 0, 4);\n q = t(new Date(\n f.getFullYear(),\n 0,\n 4\n ));\n u = t(u);\n return 0 >= k(q, f) ? 0 >= k(u, f) ? f.getFullYear() + 1 : f.getFullYear() : f.getFullYear() - 1;\n }\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n e >>>= 0;\n var v = p()[e + 40 >> 2 >>> 0];\n e = { qb: p()[e >> 2 >>> 0], pb: p()[e + 4 >> 2 >>> 0], Sa: p()[e + 8 >> 2 >>> 0], Wa: p()[e + 12 >> 2 >>> 0], Ta: p()[e + 16 >> 2 >>> 0], Qa: p()[e + 20 >> 2 >>> 0], Ma: p()[e + 24 >> 2 >>> 0], Pa: p()[e + 28 >> 2 >>> 0], yb: p()[e + 32 >> 2 >>> 0], ob: p()[e + 36 >> 2 >>> 0], rb: v ? Ka(v) : "" };\n c = Ka(c);\n v = {\n "%c": "%a %b %d %H:%M:%S %Y",\n "%D": "%m/%d/%y",\n "%F": "%Y-%m-%d",\n "%h": "%b",\n "%r": "%I:%M:%S %p",\n "%R": "%H:%M",\n "%T": "%H:%M:%S",\n "%x": "%m/%d/%y",\n "%X": "%H:%M:%S",\n "%Ec": "%c",\n "%EC": "%C",\n "%Ex": "%m/%d/%y",\n "%EX": "%H:%M:%S",\n "%Ey": "%y",\n "%EY": "%Y",\n "%Od": "%d",\n "%Oe": "%e",\n "%OH": "%H",\n "%OI": "%I",\n "%Om": "%m",\n "%OM": "%M",\n "%OS": "%S",\n "%Ou": "%u",\n "%OU": "%U",\n "%OV": "%V",\n "%Ow": "%w",\n "%OW": "%W",\n "%Oy": "%y"\n };\n for (var y in v)\n c = c.replace(new RegExp(y, "g"), v[y]);\n var Jb = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), Kb = "January February March April May June July August September October November December".split(" ");\n v = {\n "%a": (f) => Jb[f.Ma].substring(0, 3),\n "%A": (f) => Jb[f.Ma],\n "%b": (f) => Kb[f.Ta].substring(0, 3),\n "%B": (f) => Kb[f.Ta],\n "%C": (f) => g((f.Qa + 1900) / 100 | 0, 2),\n "%d": (f) => g(f.Wa, 2),\n "%e": (f) => h(f.Wa, 2, " "),\n "%g": (f) => C(f).toString().substring(2),\n "%G": (f) => C(f),\n "%H": (f) => g(f.Sa, 2),\n "%I": (f) => {\n f = f.Sa;\n 0 == f ? f = 12 : 12 < f && (f -= 12);\n return g(f, 2);\n },\n "%j": (f) => {\n for (var q = 0, u = 0; u <= f.Ta - 1; q += (Z(f.Qa + 1900) ? Pb : Qb)[u++])\n ;\n return g(f.Wa + q, 3);\n },\n "%m": (f) => g(f.Ta + 1, 2),\n "%M": (f) => g(f.pb, 2),\n "%n": () => "\\n",\n "%p": (f) => 0 <= f.Sa && 12 > f.Sa ? "AM" : "PM",\n "%S": (f) => g(f.qb, 2),\n "%t": () => " ",\n "%u": (f) => f.Ma || 7,\n "%U": (f) => g(Math.floor((f.Pa + 7 - f.Ma) / 7), 2),\n "%V": (f) => {\n var q = Math.floor((f.Pa + 7 - (f.Ma + 6) % 7) / 7);\n 2 >= (f.Ma + 371 - f.Pa - 2) % 7 && q++;\n if (q)\n 53 == q && (u = (f.Ma + 371 - f.Pa) % 7, 4 == u || 3 == u && Z(f.Qa) || (q = 1));\n else {\n q = 52;\n var u = (f.Ma + 7 - f.Pa - 1) % 7;\n (4 == u || 5 == u && Z(f.Qa % 400 - 1)) && q++;\n }\n return g(q, 2);\n },\n "%w": (f) => f.Ma,\n "%W": (f) => g(Math.floor((f.Pa + 7 - (f.Ma + 6) % 7) / 7), 2),\n "%y": (f) => (f.Qa + 1900).toString().substring(2),\n "%Y": (f) => f.Qa + 1900,\n "%z": (f) => {\n f = f.ob;\n var q = 0 <= f;\n f = Math.abs(f) / 60;\n return (q ? "+" : "-") + String("0000" + (f / 60 * 100 + f % 60)).slice(-4);\n },\n "%Z": (f) => f.rb,\n "%%": () => "%"\n };\n c = c.replace(\n /%%/g,\n "\\0\\0"\n );\n for (y in v)\n c.includes(y) && (c = c.replace(new RegExp(y, "g"), v[y](e)));\n c = c.replace(/\\0\\0/g, "%");\n y = Rb(c);\n if (y.length > b)\n return 0;\n Sb(y, a);\n return y.length - 1;\n }\n V.Va();\n var Ub = [null, La, Ma, Xa, Za, $a, db, eb, fb, gb, hb, ib, jb, kb, lb, mb, nb, tb, ub, Fb, Gb, Hb, Lb, Mb, Ob], Xb = {\n b: function(a, b, c) {\n a >>>= 0;\n new Ua(a).Va(b >>> 0, c >>> 0);\n Va = a;\n Wa++;\n throw Va;\n },\n N: function(a) {\n Vb(a >>> 0, !A, 1, !ka, 131072, false);\n V.Ya();\n },\n j: function(a) {\n a >>>= 0;\n D ? postMessage({ cmd: "cleanupThread", thread: a }) : Ga(a);\n },\n I: Ya,\n h: Za,\n T: $a,\n D: db,\n F: eb,\n U: fb,\n R: gb,\n J: hb,\n Q: ib,\n n: jb,\n E: kb,\n B: lb,\n S: mb,\n C: nb,\n q: () => true,\n z: function(a, b) {\n a >>>= 0;\n a == b >>> 0 ? setTimeout(() => Y()) : D ? postMessage({ targetThread: a, cmd: "checkMailbox" }) : (a = V.La[a]) && a.postMessage({ cmd: "checkMailbox" });\n },\n L: function() {\n return -1;\n },\n M: pb,\n p: function(a) {\n B && V.La[a >>> 0].ref();\n },\n t: function(a, b, c) {\n a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n c >>>= 0;\n a = new Date(1e3 * a);\n p()[c >> 2 >>> 0] = a.getUTCSeconds();\n p()[c + 4 >> 2 >>> 0] = a.getUTCMinutes();\n p()[c + 8 >> 2 >>> 0] = a.getUTCHours();\n p()[c + 12 >> 2 >>> 0] = a.getUTCDate();\n p()[c + 16 >> 2 >>> 0] = a.getUTCMonth();\n p()[c + 20 >> 2 >>> 0] = a.getUTCFullYear() - 1900;\n p()[c + 24 >> 2 >>> 0] = a.getUTCDay();\n a = (a.getTime() - Date.UTC(a.getUTCFullYear(), 0, 1, 0, 0, 0, 0)) / 864e5 | 0;\n p()[c + 28 >> 2 >>> 0] = a;\n },\n u: function(a, b, c) {\n a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n c >>>= 0;\n a = new Date(1e3 * a);\n p()[c >> 2 >>> 0] = a.getSeconds();\n p()[c + 4 >> 2 >>> 0] = a.getMinutes();\n p()[c + 8 >> 2 >>> 0] = a.getHours();\n p()[c + 12 >> 2 >>> 0] = a.getDate();\n p()[c + 16 >> 2 >>> 0] = a.getMonth();\n p()[c + 20 >> 2 >>> 0] = a.getFullYear() - 1900;\n p()[c + 24 >> 2 >>> 0] = a.getDay();\n b = (Z(a.getFullYear()) ? rb : sb)[a.getMonth()] + a.getDate() - 1 | 0;\n p()[c + 28 >> 2 >>> 0] = b;\n p()[c + 36 >> 2 >>> 0] = -(60 * a.getTimezoneOffset());\n b = new Date(a.getFullYear(), 6, 1).getTimezoneOffset();\n var e = new Date(a.getFullYear(), 0, 1).getTimezoneOffset();\n a = (b != e && a.getTimezoneOffset() == Math.min(e, b)) | 0;\n p()[c + 32 >> 2 >>> 0] = a;\n },\n v: function(a) {\n a >>>= 0;\n var b = new Date(p()[a + 20 >> 2 >>> 0] + 1900, p()[a + 16 >> 2 >>> 0], p()[a + 12 >> 2 >>> 0], p()[a + 8 >> 2 >>> 0], p()[a + 4 >> 2 >>> 0], p()[a >> 2 >>> 0], 0), c = p()[a + 32 >> 2 >>> 0], e = b.getTimezoneOffset(), h = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), g = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), k = Math.min(g, h);\n 0 > c ? p()[a + 32 >> 2 >>> 0] = Number(h != g && k == e) : 0 < c != (k == e) && (h = Math.max(g, h), b.setTime(b.getTime() + 6e4 * ((0 < c ? k : h) - e)));\n p()[a + 24 >> 2 >>> 0] = b.getDay();\n c = (Z(b.getFullYear()) ? rb : sb)[b.getMonth()] + b.getDate() - 1 | 0;\n p()[a + 28 >> 2 >>> 0] = c;\n p()[a >> 2 >>> 0] = b.getSeconds();\n p()[a + 4 >> 2 >>> 0] = b.getMinutes();\n p()[a + 8 >> 2 >>> 0] = b.getHours();\n p()[a + 12 >> 2 >>> 0] = b.getDate();\n p()[a + 16 >> 2 >>> 0] = b.getMonth();\n p()[a + 20 >> 2 >>> 0] = b.getYear();\n a = b.getTime() / 1e3;\n return Wb((T = a, 1 <= +Math.abs(T) ? 0 < T ? +Math.floor(T / 4294967296) >>> 0 : ~~+Math.ceil((T - +(~~T >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0;\n },\n r: tb,\n s: ub,\n y: function(a, b, c) {\n function e(v) {\n return (v = v.toTimeString().match(/\\(([A-Za-z ]+)\\)$/)) ? v[1] : "GMT";\n }\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n var h = (/* @__PURE__ */ new Date()).getFullYear(), g = new Date(h, 0, 1), k = new Date(h, 6, 1);\n h = g.getTimezoneOffset();\n var t = k.getTimezoneOffset(), C = Math.max(h, t);\n r()[a >> 2 >>> 0] = 60 * C;\n p()[b >> 2 >>> 0] = Number(h != t);\n a = e(g);\n b = e(k);\n a = wb(a);\n b = wb(b);\n t < h ? (r()[c >> 2 >>> 0] = a, r()[c + 4 >> 2 >>> 0] = b) : (r()[c >> 2 >>> 0] = b, r()[c + 4 >> 2 >>> 0] = a);\n },\n c: () => {\n K("");\n },\n k: function() {\n },\n i: function() {\n return Date.now();\n },\n o: () => {\n wa += 1;\n throw "unwind";\n },\n A: function() {\n return 4294901760;\n },\n e: () => performance.timeOrigin + performance.now(),\n f: function() {\n return B ? (init_os(), __toCommonJS(os_exports)).cpus().length : navigator.hardwareConcurrency;\n },\n K: function(a, b, c, e) {\n V.vb = b >>> 0;\n Bb.length = c;\n b = e >>> 0 >> 3;\n for (e = 0; e < c; e++)\n Bb[e] = ea()[b + e >>> 0];\n return Ub[a].apply(null, Bb);\n },\n x: function(a) {\n a >>>= 0;\n var b = n().length;\n if (a <= b || 4294901760 < a)\n return false;\n for (var c = 1; 4 >= c; c *= 2) {\n var e = b * (1 + 0.2 / c);\n e = Math.min(e, a + 100663296);\n var h = Math;\n e = Math.max(a, e);\n a: {\n h = h.min.call(h, 4294901760, e + (65536 - e % 65536) % 65536) - d.buffer.byteLength + 65535 >>> 16;\n try {\n d.grow(h);\n m();\n var g = 1;\n break a;\n } catch (k) {\n }\n g = void 0;\n }\n if (g)\n return true;\n }\n return false;\n },\n O: Fb,\n P: Gb,\n H: Na,\n g: Hb,\n m: Lb,\n w: Mb,\n l: Ob,\n a: d || w.wasmMemory,\n G: Tb,\n d: function(a, b, c, e) {\n return Tb(a >>> 0, b >>> 0, c >>> 0, e >>> 0);\n }\n };\n (function() {\n function a(c, e) {\n c = c.exports;\n L = c = Yb(c);\n V.Za.push(L.ya);\n sa = L.za;\n ua.unshift(L.V);\n ra = e;\n za();\n return c;\n }\n var b = { a: Xb };\n ya();\n if (w.instantiateWasm)\n try {\n return w.instantiateWasm(b, a);\n } catch (c) {\n I("Module.instantiateWasm callback failed with error: " + c), x(c);\n }\n Ea(b, function(c) {\n a(c.instance, c.module);\n }).catch(x);\n return {};\n })();\n w._OrtInit = (a, b) => (w._OrtInit = L.W)(a, b);\n w._OrtGetLastError = (a, b) => (w._OrtGetLastError = L.X)(a, b);\n w._OrtCreateSessionOptions = (a, b, c, e, h, g, k, t, C, v) => (w._OrtCreateSessionOptions = L.Y)(a, b, c, e, h, g, k, t, C, v);\n w._OrtAppendExecutionProvider = (a, b) => (w._OrtAppendExecutionProvider = L.Z)(a, b);\n w._OrtAddFreeDimensionOverride = (a, b, c) => (w._OrtAddFreeDimensionOverride = L._)(a, b, c);\n w._OrtAddSessionConfigEntry = (a, b, c) => (w._OrtAddSessionConfigEntry = L.$)(a, b, c);\n w._OrtReleaseSessionOptions = (a) => (w._OrtReleaseSessionOptions = L.aa)(a);\n w._OrtCreateSession = (a, b, c) => (w._OrtCreateSession = L.ba)(a, b, c);\n w._OrtReleaseSession = (a) => (w._OrtReleaseSession = L.ca)(a);\n w._OrtGetInputOutputCount = (a, b, c) => (w._OrtGetInputOutputCount = L.da)(a, b, c);\n w._OrtGetInputName = (a, b) => (w._OrtGetInputName = L.ea)(a, b);\n w._OrtGetOutputName = (a, b) => (w._OrtGetOutputName = L.fa)(a, b);\n w._OrtFree = (a) => (w._OrtFree = L.ga)(a);\n w._OrtCreateTensor = (a, b, c, e, h, g) => (w._OrtCreateTensor = L.ha)(a, b, c, e, h, g);\n w._OrtGetTensorData = (a, b, c, e, h) => (w._OrtGetTensorData = L.ia)(a, b, c, e, h);\n w._OrtReleaseTensor = (a) => (w._OrtReleaseTensor = L.ja)(a);\n w._OrtCreateRunOptions = (a, b, c, e) => (w._OrtCreateRunOptions = L.ka)(a, b, c, e);\n w._OrtAddRunConfigEntry = (a, b, c) => (w._OrtAddRunConfigEntry = L.la)(a, b, c);\n w._OrtReleaseRunOptions = (a) => (w._OrtReleaseRunOptions = L.ma)(a);\n w._OrtCreateBinding = (a) => (w._OrtCreateBinding = L.na)(a);\n w._OrtBindInput = (a, b, c) => (w._OrtBindInput = L.oa)(a, b, c);\n w._OrtBindOutput = (a, b, c, e) => (w._OrtBindOutput = L.pa)(a, b, c, e);\n w._OrtClearBoundOutputs = (a) => (w._OrtClearBoundOutputs = L.qa)(a);\n w._OrtReleaseBinding = (a) => (w._OrtReleaseBinding = L.ra)(a);\n w._OrtRunWithBinding = (a, b, c, e, h) => (w._OrtRunWithBinding = L.sa)(a, b, c, e, h);\n w._OrtRun = (a, b, c, e, h, g, k, t) => (w._OrtRun = L.ta)(a, b, c, e, h, g, k, t);\n w._OrtEndProfiling = (a) => (w._OrtEndProfiling = L.ua)(a);\n var X = w._pthread_self = () => (X = w._pthread_self = L.va)(), vb = w._malloc = (a) => (vb = w._malloc = L.wa)(a);\n w._free = (a) => (w._free = L.xa)(a);\n w.__emscripten_tls_init = () => (w.__emscripten_tls_init = L.ya)();\n var Vb = w.__emscripten_thread_init = (a, b, c, e, h, g) => (Vb = w.__emscripten_thread_init = L.Aa)(a, b, c, e, h, g);\n w.__emscripten_thread_crashed = () => (w.__emscripten_thread_crashed = L.Ba)();\n var Ab = (a, b, c, e) => (Ab = L.Ca)(a, b, c, e), Oa = (a) => (Oa = L.Da)(a), Ta = w.__emscripten_thread_exit = (a) => (Ta = w.__emscripten_thread_exit = L.Ea)(a), qb = w.__emscripten_check_mailbox = () => (qb = w.__emscripten_check_mailbox = L.Fa)(), Wb = (a) => (Wb = L.Ga)(a), Qa = (a, b) => (Qa = L.Ha)(a, b), xb = () => (xb = L.Ia)(), Ra = (a) => (Ra = L.Ja)(a), zb = (a) => (zb = L.Ka)(a);\n function Yb(a) {\n a = Object.assign({}, a);\n var b = (e) => () => e() >>> 0, c = (e) => (h) => e(h) >>> 0;\n a.__errno_location = b(a.__errno_location);\n a.pthread_self = b(a.pthread_self);\n a.malloc = c(a.malloc);\n a.stackSave = b(a.stackSave);\n a.stackAlloc = c(a.stackAlloc);\n return a;\n }\n w.keepRuntimeAlive = P;\n w.wasmMemory = d;\n w.stackAlloc = zb;\n w.stackSave = xb;\n w.stackRestore = Ra;\n w.UTF8ToString = Ka;\n w.stringToUTF8 = cb;\n w.lengthBytesUTF8 = ab;\n w.ExitStatus = U;\n w.PThread = V;\n var Zb;\n R = function $b() {\n Zb || ac();\n Zb || (R = $b);\n };\n function ac() {\n function a() {\n if (!Zb && (Zb = true, w.calledRun = true, !M)) {\n D || Pa(ua);\n ha(w);\n if (w.onRuntimeInitialized)\n w.onRuntimeInitialized();\n if (!D) {\n if (w.postRun)\n for ("function" == typeof w.postRun && (w.postRun = [w.postRun]); w.postRun.length; ) {\n var b = w.postRun.shift();\n va.unshift(b);\n }\n Pa(va);\n }\n }\n }\n if (!(0 < Q))\n if (D)\n ha(w), D || Pa(ua), startWorker(w);\n else {\n if (w.preRun)\n for ("function" == typeof w.preRun && (w.preRun = [w.preRun]); w.preRun.length; )\n ta.unshift(w.preRun.shift());\n Pa(ta);\n 0 < Q || (w.setStatus ? (w.setStatus("Running..."), setTimeout(function() {\n setTimeout(\n function() {\n w.setStatus("");\n },\n 1\n );\n a();\n }, 1)) : a());\n }\n }\n if (w.preInit)\n for ("function" == typeof w.preInit && (w.preInit = [w.preInit]); 0 < w.preInit.length; )\n w.preInit.pop()();\n ac();\n return moduleArg.ready;\n };\n })();\n if (typeof exports === "object" && typeof module === "object")\n module.exports = ortWasmThreaded;\n else if (typeof define === "function" && define["amd"])\n define([], () => ortWasmThreaded);\n }\n });\n\n // web/lib/wasm/binding/ort-wasm-threaded.worker.js\n var require_ort_wasm_threaded_worker = __commonJS({\n "web/lib/wasm/binding/ort-wasm-threaded.worker.js"(exports, module) {\n module.exports = \'"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\\\\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}ortWasmThreaded(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0,/*canBlock=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;\\n\';\n }\n });\n\n // nodejs-ignore:node:path\n var join = void 0;\n\n // web/lib/wasm/wasm-factory.ts\n var ortWasmFactory;\n if (true) {\n ortWasmFactory = require_ort_training_wasm_simd();\n } else {\n ortWasmFactory = true ? null : null;\n }\n var ortWasmFactoryThreaded = true ? true ? require_ort_wasm_threaded() : null : ortWasmFactory;\n var wasm;\n var initialized = false;\n var initializing = false;\n var aborted = false;\n var isMultiThreadSupported = (numThreads) => {\n if (numThreads === 1) {\n return false;\n }\n if (typeof SharedArrayBuffer === "undefined") {\n if (typeof self !== "undefined" && !self.crossOriginIsolated) {\n console.warn(\n "env.wasm.numThreads is set to " + numThreads + ", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."\n );\n }\n return false;\n }\n if (typeof process !== "undefined" && process.versions && process.versions.node) {\n console.warn(\n "env.wasm.numThreads is set to " + numThreads + ", however, currently onnxruntime-web does not support multi-threads in Node.js. Please consider using onnxruntime-node for performance critical scenarios."\n );\n }\n try {\n if (typeof MessageChannel !== "undefined") {\n new MessageChannel().port1.postMessage(new SharedArrayBuffer(1));\n }\n return WebAssembly.validate(new Uint8Array([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 4,\n 1,\n 96,\n 0,\n 0,\n 3,\n 2,\n 1,\n 0,\n 5,\n 4,\n 1,\n 3,\n 1,\n 1,\n 10,\n 11,\n 1,\n 9,\n 0,\n 65,\n 0,\n 254,\n 16,\n 2,\n 0,\n 26,\n 11\n ]));\n } catch (e) {\n return false;\n }\n };\n var isSimdSupported = () => {\n try {\n return WebAssembly.validate(new Uint8Array([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 4,\n 1,\n 96,\n 0,\n 0,\n 3,\n 2,\n 1,\n 0,\n 10,\n 30,\n 1,\n 28,\n 0,\n 65,\n 0,\n 253,\n 15,\n 253,\n 12,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 253,\n 186,\n 1,\n 26,\n 11\n ]));\n } catch (e) {\n return false;\n }\n };\n var getWasmFileName = (useSimd, useThreads) => {\n if (useSimd) {\n if (true) {\n return "ort-training-wasm-simd.wasm";\n }\n return useThreads ? "ort-wasm-simd-threaded.wasm" : "ort-wasm-simd.wasm";\n } else {\n return useThreads ? "ort-wasm-threaded.wasm" : "ort-wasm.wasm";\n }\n };\n var initializeWebAssembly = async (flags) => {\n if (initialized) {\n return Promise.resolve();\n }\n if (initializing) {\n throw new Error("multiple calls to \'initializeWebAssembly()\' detected.");\n }\n if (aborted) {\n throw new Error("previous call to \'initializeWebAssembly()\' failed.");\n }\n initializing = true;\n const timeout = flags.initTimeout;\n const numThreads = flags.numThreads;\n const simd = flags.simd;\n const useThreads = isMultiThreadSupported(numThreads);\n const useSimd = simd && isSimdSupported();\n const wasmPaths = flags.wasmPaths;\n const wasmPrefixOverride = typeof wasmPaths === "string" ? wasmPaths : void 0;\n const wasmFileName = getWasmFileName(useSimd, useThreads);\n const wasmPathOverride = typeof wasmPaths === "object" ? wasmPaths[wasmFileName] : void 0;\n let isTimeout = false;\n const tasks = [];\n if (timeout > 0) {\n tasks.push(new Promise((resolve) => {\n setTimeout(() => {\n isTimeout = true;\n resolve();\n }, timeout);\n }));\n }\n tasks.push(new Promise((resolve, reject) => {\n const factory = useThreads ? ortWasmFactoryThreaded : ortWasmFactory;\n const config = {\n locateFile: (fileName, scriptDirectory) => {\n if (useThreads && fileName.endsWith(".worker.js") && typeof Blob !== "undefined") {\n return URL.createObjectURL(new Blob(\n [\n // This require() function is handled by esbuild plugin to load file content as string.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n require_ort_wasm_threaded_worker()\n ],\n { type: "text/javascript" }\n ));\n }\n if (fileName.endsWith(".wasm")) {\n if (wasmPathOverride) {\n return wasmPathOverride;\n }\n const prefix = wasmPrefixOverride ?? scriptDirectory;\n if (false) {\n if (wasmFileName === "ort-wasm-simd.wasm") {\n return prefix + "ort-wasm-simd.jsep.wasm";\n } else if (wasmFileName === "ort-wasm-simd-threaded.wasm") {\n return prefix + "ort-wasm-simd-threaded.jsep.wasm";\n }\n }\n return prefix + wasmFileName;\n }\n return scriptDirectory + fileName;\n }\n };\n if (useThreads) {\n config.numThreads = numThreads;\n if (typeof Blob === "undefined") {\n config.mainScriptUrlOrBlob = join(__dirname, "ort-wasm-threaded.js");\n } else {\n const scriptSourceCode = `var ortWasmThreaded=${factory.toString()};`;\n config.mainScriptUrlOrBlob = new Blob([scriptSourceCode], { type: "text/javascript" });\n }\n }\n factory(config).then(\n // wasm module initialized successfully\n (module) => {\n initializing = false;\n initialized = true;\n wasm = module;\n resolve();\n },\n // wasm module failed to initialize\n (what) => {\n initializing = false;\n aborted = true;\n reject(what);\n }\n );\n }));\n await Promise.race(tasks);\n if (isTimeout) {\n throw new Error(`WebAssembly backend initializing failed due to timeout: ${timeout}ms`);\n }\n };\n var getInstance = () => {\n if (initialized && wasm) {\n return wasm;\n }\n throw new Error("WebAssembly is not initialized yet.");\n };\n\n // web/lib/wasm/wasm-utils.ts\n var allocWasmString = (data, allocs) => {\n const wasm2 = getInstance();\n const dataLength = wasm2.lengthBytesUTF8(data) + 1;\n const dataOffset = wasm2._malloc(dataLength);\n wasm2.stringToUTF8(data, dataOffset, dataLength);\n allocs.push(dataOffset);\n return dataOffset;\n };\n var iterateExtraOptions = (options, prefix, seen, handler) => {\n if (typeof options == "object" && options !== null) {\n if (seen.has(options)) {\n throw new Error("Circular reference in options");\n } else {\n seen.add(options);\n }\n }\n Object.entries(options).forEach(([key, value]) => {\n const name = prefix ? prefix + key : key;\n if (typeof value === "object") {\n iterateExtraOptions(value, name + ".", seen, handler);\n } else if (typeof value === "string" || typeof value === "number") {\n handler(name, value.toString());\n } else if (typeof value === "boolean") {\n handler(name, value ? "1" : "0");\n } else {\n throw new Error(`Can\'t handle extra config type: ${typeof value}`);\n }\n });\n };\n var checkLastError = (message) => {\n const wasm2 = getInstance();\n const stack = wasm2.stackSave();\n try {\n const paramsOffset = wasm2.stackAlloc(8);\n wasm2._OrtGetLastError(paramsOffset, paramsOffset + 4);\n const errorCode = wasm2.HEAP32[paramsOffset / 4];\n const errorMessagePointer = wasm2.HEAPU32[paramsOffset / 4 + 1];\n const errorMessage = errorMessagePointer ? wasm2.UTF8ToString(errorMessagePointer) : "";\n throw new Error(`${message} ERROR_CODE: ${errorCode}, ERROR_MESSAGE: ${errorMessage}`);\n } finally {\n wasm2.stackRestore(stack);\n }\n };\n\n // web/lib/wasm/run-options.ts\n var setRunOptions = (options) => {\n const wasm2 = getInstance();\n let runOptionsHandle = 0;\n const allocs = [];\n const runOptions = options || {};\n try {\n if (options?.logSeverityLevel === void 0) {\n runOptions.logSeverityLevel = 2;\n } else if (typeof options.logSeverityLevel !== "number" || !Number.isInteger(options.logSeverityLevel) || options.logSeverityLevel < 0 || options.logSeverityLevel > 4) {\n throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);\n }\n if (options?.logVerbosityLevel === void 0) {\n runOptions.logVerbosityLevel = 0;\n } else if (typeof options.logVerbosityLevel !== "number" || !Number.isInteger(options.logVerbosityLevel)) {\n throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);\n }\n if (options?.terminate === void 0) {\n runOptions.terminate = false;\n }\n let tagDataOffset = 0;\n if (options?.tag !== void 0) {\n tagDataOffset = allocWasmString(options.tag, allocs);\n }\n runOptionsHandle = wasm2._OrtCreateRunOptions(\n runOptions.logSeverityLevel,\n runOptions.logVerbosityLevel,\n !!runOptions.terminate,\n tagDataOffset\n );\n if (runOptionsHandle === 0) {\n checkLastError("Can\'t create run options.");\n }\n if (options?.extra !== void 0) {\n iterateExtraOptions(options.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => {\n const keyDataOffset = allocWasmString(key, allocs);\n const valueDataOffset = allocWasmString(value, allocs);\n if (wasm2._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a run config entry: ${key} - ${value}.`);\n }\n });\n }\n return [runOptionsHandle, allocs];\n } catch (e) {\n if (runOptionsHandle !== 0) {\n wasm2._OrtReleaseRunOptions(runOptionsHandle);\n }\n allocs.forEach((alloc) => wasm2._free(alloc));\n throw e;\n }\n };\n\n // web/lib/wasm/session-options.ts\n var getGraphOptimzationLevel = (graphOptimizationLevel) => {\n switch (graphOptimizationLevel) {\n case "disabled":\n return 0;\n case "basic":\n return 1;\n case "extended":\n return 2;\n case "all":\n return 99;\n default:\n throw new Error(`unsupported graph optimization level: ${graphOptimizationLevel}`);\n }\n };\n var getExecutionMode = (executionMode) => {\n switch (executionMode) {\n case "sequential":\n return 0;\n case "parallel":\n return 1;\n default:\n throw new Error(`unsupported execution mode: ${executionMode}`);\n }\n };\n var appendDefaultOptions = (options) => {\n if (!options.extra) {\n options.extra = {};\n }\n if (!options.extra.session) {\n options.extra.session = {};\n }\n const session = options.extra.session;\n if (!session.use_ort_model_bytes_directly) {\n session.use_ort_model_bytes_directly = "1";\n }\n if (options.executionProviders && options.executionProviders.some((ep) => (typeof ep === "string" ? ep : ep.name) === "webgpu")) {\n options.enableMemPattern = false;\n }\n };\n var setExecutionProviders = (sessionOptionsHandle, executionProviders, allocs) => {\n for (const ep of executionProviders) {\n let epName = typeof ep === "string" ? ep : ep.name;\n switch (epName) {\n case "webnn":\n epName = "WEBNN";\n if (typeof ep !== "string") {\n const webnnOptions = ep;\n if (webnnOptions?.deviceType) {\n const keyDataOffset = allocWasmString("deviceType", allocs);\n const valueDataOffset = allocWasmString(webnnOptions.deviceType, allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a session config entry: \'deviceType\' - ${webnnOptions.deviceType}.`);\n }\n }\n if (webnnOptions?.numThreads) {\n let numThreads = webnnOptions.numThreads;\n if (typeof numThreads != "number" || !Number.isInteger(numThreads) || numThreads < 0) {\n numThreads = 0;\n }\n const keyDataOffset = allocWasmString("numThreads", allocs);\n const valueDataOffset = allocWasmString(numThreads.toString(), allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a session config entry: \'numThreads\' - ${webnnOptions.numThreads}.`);\n }\n }\n if (webnnOptions?.powerPreference) {\n const keyDataOffset = allocWasmString("powerPreference", allocs);\n const valueDataOffset = allocWasmString(webnnOptions.powerPreference, allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(\n `Can\'t set a session config entry: \'powerPreference\' - ${webnnOptions.powerPreference}.`\n );\n }\n }\n }\n break;\n case "webgpu":\n epName = "JS";\n if (typeof ep !== "string") {\n const webgpuOptions = ep;\n if (webgpuOptions?.preferredLayout) {\n if (webgpuOptions.preferredLayout !== "NCHW" && webgpuOptions.preferredLayout !== "NHWC") {\n throw new Error(`preferredLayout must be either \'NCHW\' or \'NHWC\': ${webgpuOptions.preferredLayout}`);\n }\n const keyDataOffset = allocWasmString("preferredLayout", allocs);\n const valueDataOffset = allocWasmString(webgpuOptions.preferredLayout, allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(\n `Can\'t set a session config entry: \'preferredLayout\' - ${webgpuOptions.preferredLayout}.`\n );\n }\n }\n }\n break;\n case "wasm":\n case "cpu":\n continue;\n default:\n throw new Error(`not supported execution provider: ${epName}`);\n }\n const epNameDataOffset = allocWasmString(epName, allocs);\n if (getInstance()._OrtAppendExecutionProvider(sessionOptionsHandle, epNameDataOffset) !== 0) {\n checkLastError(`Can\'t append execution provider: ${epName}.`);\n }\n }\n };\n var setSessionOptions = (options) => {\n const wasm2 = getInstance();\n let sessionOptionsHandle = 0;\n const allocs = [];\n const sessionOptions = options || {};\n appendDefaultOptions(sessionOptions);\n try {\n const graphOptimizationLevel = getGraphOptimzationLevel(sessionOptions.graphOptimizationLevel ?? "all");\n const executionMode = getExecutionMode(sessionOptions.executionMode ?? "sequential");\n const logIdDataOffset = typeof sessionOptions.logId === "string" ? allocWasmString(sessionOptions.logId, allocs) : 0;\n const logSeverityLevel = sessionOptions.logSeverityLevel ?? 2;\n if (!Number.isInteger(logSeverityLevel) || logSeverityLevel < 0 || logSeverityLevel > 4) {\n throw new Error(`log serverity level is not valid: ${logSeverityLevel}`);\n }\n const logVerbosityLevel = sessionOptions.logVerbosityLevel ?? 0;\n if (!Number.isInteger(logVerbosityLevel) || logVerbosityLevel < 0 || logVerbosityLevel > 4) {\n throw new Error(`log verbosity level is not valid: ${logVerbosityLevel}`);\n }\n const optimizedModelFilePathOffset = typeof sessionOptions.optimizedModelFilePath === "string" ? allocWasmString(sessionOptions.optimizedModelFilePath, allocs) : 0;\n sessionOptionsHandle = wasm2._OrtCreateSessionOptions(\n graphOptimizationLevel,\n !!sessionOptions.enableCpuMemArena,\n !!sessionOptions.enableMemPattern,\n executionMode,\n !!sessionOptions.enableProfiling,\n 0,\n logIdDataOffset,\n logSeverityLevel,\n logVerbosityLevel,\n optimizedModelFilePathOffset\n );\n if (sessionOptionsHandle === 0) {\n checkLastError("Can\'t create session options.");\n }\n if (sessionOptions.executionProviders) {\n setExecutionProviders(sessionOptionsHandle, sessionOptions.executionProviders, allocs);\n }\n if (sessionOptions.enableGraphCapture !== void 0) {\n if (typeof sessionOptions.enableGraphCapture !== "boolean") {\n throw new Error(`enableGraphCapture must be a boolean value: ${sessionOptions.enableGraphCapture}`);\n }\n const keyDataOffset = allocWasmString("enableGraphCapture", allocs);\n const valueDataOffset = allocWasmString(sessionOptions.enableGraphCapture.toString(), allocs);\n if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(\n `Can\'t set a session config entry: \'enableGraphCapture\' - ${sessionOptions.enableGraphCapture}.`\n );\n }\n }\n if (sessionOptions.freeDimensionOverrides) {\n for (const [name, value] of Object.entries(sessionOptions.freeDimensionOverrides)) {\n if (typeof name !== "string") {\n throw new Error(`free dimension override name must be a string: ${name}`);\n }\n if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {\n throw new Error(`free dimension override value must be a non-negative integer: ${value}`);\n }\n const nameOffset = allocWasmString(name, allocs);\n if (wasm2._OrtAddFreeDimensionOverride(sessionOptionsHandle, nameOffset, value) !== 0) {\n checkLastError(`Can\'t set a free dimension override: ${name} - ${value}.`);\n }\n }\n }\n if (sessionOptions.extra !== void 0) {\n iterateExtraOptions(sessionOptions.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => {\n const keyDataOffset = allocWasmString(key, allocs);\n const valueDataOffset = allocWasmString(value, allocs);\n if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a session config entry: ${key} - ${value}.`);\n }\n });\n }\n return [sessionOptionsHandle, allocs];\n } catch (e) {\n if (sessionOptionsHandle !== 0) {\n wasm2._OrtReleaseSessionOptions(sessionOptionsHandle);\n }\n allocs.forEach((alloc) => wasm2._free(alloc));\n throw e;\n }\n };\n\n // web/lib/wasm/wasm-common.ts\n var tensorDataTypeStringToEnum = (type) => {\n switch (type) {\n case "int8":\n return 3 /* int8 */;\n case "uint8":\n return 2 /* uint8 */;\n case "bool":\n return 9 /* bool */;\n case "int16":\n return 5 /* int16 */;\n case "uint16":\n return 4 /* uint16 */;\n case "int32":\n return 6 /* int32 */;\n case "uint32":\n return 12 /* uint32 */;\n case "float16":\n return 10 /* float16 */;\n case "float32":\n return 1 /* float */;\n case "float64":\n return 11 /* double */;\n case "string":\n return 8 /* string */;\n case "int64":\n return 7 /* int64 */;\n case "uint64":\n return 13 /* uint64 */;\n default:\n throw new Error(`unsupported data type: ${type}`);\n }\n };\n var tensorDataTypeEnumToString = (typeProto) => {\n switch (typeProto) {\n case 3 /* int8 */:\n return "int8";\n case 2 /* uint8 */:\n return "uint8";\n case 9 /* bool */:\n return "bool";\n case 5 /* int16 */:\n return "int16";\n case 4 /* uint16 */:\n return "uint16";\n case 6 /* int32 */:\n return "int32";\n case 12 /* uint32 */:\n return "uint32";\n case 10 /* float16 */:\n return "float16";\n case 1 /* float */:\n return "float32";\n case 11 /* double */:\n return "float64";\n case 8 /* string */:\n return "string";\n case 7 /* int64 */:\n return "int64";\n case 13 /* uint64 */:\n return "uint64";\n default:\n throw new Error(`unsupported data type: ${typeProto}`);\n }\n };\n var getTensorElementSize = (dateType) => [void 0, 4, 1, 1, 2, 2, 4, 8, void 0, 1, 2, 8, 4, 8, void 0, void 0, void 0][dateType];\n var tensorTypeToTypedArrayConstructor = (type) => {\n switch (type) {\n case "float16":\n return typeof Float16Array !== "undefined" && Float16Array.from ? Float16Array : Uint16Array;\n case "float32":\n return Float32Array;\n case "uint8":\n return Uint8Array;\n case "int8":\n return Int8Array;\n case "uint16":\n return Uint16Array;\n case "int16":\n return Int16Array;\n case "int32":\n return Int32Array;\n case "bool":\n return Uint8Array;\n case "float64":\n return Float64Array;\n case "uint32":\n return Uint32Array;\n case "int64":\n return BigInt64Array;\n case "uint64":\n return BigUint64Array;\n default:\n throw new Error(`unsupported type: ${type}`);\n }\n };\n var logLevelStringToEnum = (logLevel) => {\n switch (logLevel) {\n case "verbose":\n return 0;\n case "info":\n return 1;\n case "warning":\n return 2;\n case "error":\n return 3;\n case "fatal":\n return 4;\n default:\n throw new Error(`unsupported logging level: ${logLevel}`);\n }\n };\n var isGpuBufferSupportedType = (type) => type === "float32" || type === "float16" || type === "int32" || type === "int64" || type === "uint32" || type === "uint8" || type === "bool";\n var dataLocationStringToEnum = (location) => {\n switch (location) {\n case "none":\n return 0;\n case "cpu":\n return 1;\n case "cpu-pinned":\n return 2;\n case "texture":\n return 3;\n case "gpu-buffer":\n return 4;\n default:\n throw new Error(`unsupported data location: ${location}`);\n }\n };\n\n // web/lib/wasm/wasm-utils-load-file.ts\n init_fs();\n\n // nodejs-ignore:node:fs/promises\n var readFile2 = void 0;\n\n // web/lib/wasm/wasm-utils-load-file.ts\n var loadFile = async (file) => {\n if (typeof file === "string") {\n if (typeof process !== "undefined" && process.versions && process.versions.node) {\n try {\n return new Uint8Array(await readFile2(file));\n } catch (e) {\n if (e.code === "ERR_FS_FILE_TOO_LARGE") {\n const stream = createReadStream(file);\n const chunks = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return new Uint8Array(Buffer.concat(chunks));\n }\n throw e;\n }\n } else {\n const response = await fetch(file);\n if (!response.ok) {\n throw new Error(`failed to load external data file: ${file}`);\n }\n const contentLengthHeader = response.headers.get("Content-Length");\n const fileSize = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0;\n if (fileSize < 1073741824) {\n return new Uint8Array(await response.arrayBuffer());\n } else {\n if (!response.body) {\n throw new Error(`failed to load external data file: ${file}, no response body.`);\n }\n const reader = response.body.getReader();\n let buffer;\n try {\n buffer = new ArrayBuffer(fileSize);\n } catch (e) {\n if (e instanceof RangeError) {\n const pages = Math.ceil(fileSize / 65536);\n buffer = new WebAssembly.Memory({ initial: pages, maximum: pages }).buffer;\n } else {\n throw e;\n }\n }\n let offset = 0;\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n const chunkSize = value.byteLength;\n const chunk = new Uint8Array(buffer, offset, chunkSize);\n chunk.set(value);\n offset += chunkSize;\n }\n return new Uint8Array(buffer, 0, fileSize);\n }\n }\n } else if (file instanceof Blob) {\n return new Uint8Array(await file.arrayBuffer());\n } else if (file instanceof Uint8Array) {\n return file;\n } else {\n return new Uint8Array(file);\n }\n };\n\n // web/lib/wasm/wasm-core-impl.ts\n var initOrt = (numThreads, loggingLevel) => {\n const errorCode = getInstance()._OrtInit(numThreads, loggingLevel);\n if (errorCode !== 0) {\n checkLastError("Can\'t initialize onnxruntime.");\n }\n };\n var initRuntime = async (env) => {\n initOrt(env.wasm.numThreads, logLevelStringToEnum(env.logLevel));\n };\n var initEp = async (env, epName) => {\n if (false) {\n const initJsep = null.init;\n if (epName === "webgpu") {\n if (typeof navigator === "undefined" || !navigator.gpu) {\n throw new Error("WebGPU is not supported in current environment");\n }\n let adapter = env.webgpu.adapter;\n if (!adapter) {\n const powerPreference = env.webgpu.powerPreference;\n if (powerPreference !== void 0 && powerPreference !== "low-power" && powerPreference !== "high-performance") {\n throw new Error(`Invalid powerPreference setting: "${powerPreference}"`);\n }\n const forceFallbackAdapter = env.webgpu.forceFallbackAdapter;\n if (forceFallbackAdapter !== void 0 && typeof forceFallbackAdapter !== "boolean") {\n throw new Error(`Invalid forceFallbackAdapter setting: "${forceFallbackAdapter}"`);\n }\n adapter = await navigator.gpu.requestAdapter({ powerPreference, forceFallbackAdapter });\n if (!adapter) {\n throw new Error(\n \'Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.\'\n );\n }\n } else {\n if (typeof adapter.limits !== "object" || typeof adapter.features !== "object" || typeof adapter.requestDevice !== "function") {\n throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.");\n }\n }\n if (!env.wasm.simd) {\n throw new Error(\n "Not supported for WebGPU=ON and SIMD=OFF. Please set `env.wasm.simd` to true when using `webgpu` EP"\n );\n }\n await initJsep("webgpu", getInstance(), env, adapter);\n }\n if (epName === "webnn") {\n if (typeof navigator === "undefined" || !navigator.ml) {\n throw new Error("WebNN is not supported in current environment");\n }\n await initJsep("webnn", getInstance(), env);\n }\n }\n };\n var activeSessions = /* @__PURE__ */ new Map();\n var getSessionInputOutputCount = (sessionHandle) => {\n const wasm2 = getInstance();\n const stack = wasm2.stackSave();\n try {\n const dataOffset = wasm2.stackAlloc(8);\n const errorCode = wasm2._OrtGetInputOutputCount(sessionHandle, dataOffset, dataOffset + 4);\n if (errorCode !== 0) {\n checkLastError("Can\'t get session input/output count.");\n }\n return [wasm2.HEAP32[dataOffset / 4], wasm2.HEAP32[dataOffset / 4 + 1]];\n } finally {\n wasm2.stackRestore(stack);\n }\n };\n var copyFromExternalBuffer = (model) => {\n const wasm2 = getInstance();\n const modelDataOffset = wasm2._malloc(model.byteLength);\n if (modelDataOffset === 0) {\n throw new Error(`Can\'t create a session. failed to allocate a buffer of size ${model.byteLength}.`);\n }\n wasm2.HEAPU8.set(model, modelDataOffset);\n return [modelDataOffset, model.byteLength];\n };\n var createSession = async (modelData, options) => {\n let modelDataOffset, modelDataLength;\n const wasm2 = getInstance();\n if (Array.isArray(modelData)) {\n [modelDataOffset, modelDataLength] = modelData;\n } else if (modelData.buffer === wasm2.HEAPU8.buffer) {\n [modelDataOffset, modelDataLength] = [modelData.byteOffset, modelData.byteLength];\n } else {\n [modelDataOffset, modelDataLength] = copyFromExternalBuffer(modelData);\n }\n let sessionHandle = 0;\n let sessionOptionsHandle = 0;\n let ioBindingHandle = 0;\n let allocs = [];\n const inputNamesUTF8Encoded = [];\n const outputNamesUTF8Encoded = [];\n try {\n [sessionOptionsHandle, allocs] = setSessionOptions(options);\n if (options?.externalData && wasm2.mountExternalData) {\n const loadingPromises = [];\n for (const file of options.externalData) {\n const path = typeof file === "string" ? file : file.path;\n loadingPromises.push(loadFile(typeof file === "string" ? file : file.data).then((data) => {\n wasm2.mountExternalData(path, data);\n }));\n }\n await Promise.all(loadingPromises);\n }\n sessionHandle = await wasm2._OrtCreateSession(modelDataOffset, modelDataLength, sessionOptionsHandle);\n if (sessionHandle === 0) {\n checkLastError("Can\'t create a session.");\n }\n const [inputCount, outputCount] = getSessionInputOutputCount(sessionHandle);\n const enableGraphCapture = !!options?.enableGraphCapture;\n const inputNames = [];\n const outputNames = [];\n const outputPreferredLocations = [];\n for (let i = 0; i < inputCount; i++) {\n const name = wasm2._OrtGetInputName(sessionHandle, i);\n if (name === 0) {\n checkLastError("Can\'t get an input name.");\n }\n inputNamesUTF8Encoded.push(name);\n inputNames.push(wasm2.UTF8ToString(name));\n }\n for (let i = 0; i < outputCount; i++) {\n const name = wasm2._OrtGetOutputName(sessionHandle, i);\n if (name === 0) {\n checkLastError("Can\'t get an output name.");\n }\n outputNamesUTF8Encoded.push(name);\n const nameString = wasm2.UTF8ToString(name);\n outputNames.push(nameString);\n if (false) {\n if (enableGraphCapture && options?.preferredOutputLocation === void 0) {\n outputPreferredLocations.push("gpu-buffer");\n continue;\n }\n const location = typeof options?.preferredOutputLocation === "string" ? options.preferredOutputLocation : options?.preferredOutputLocation?.[nameString] ?? "cpu";\n if (location !== "cpu" && location !== "cpu-pinned" && location !== "gpu-buffer") {\n throw new Error(`Not supported preferred output location: ${location}.`);\n }\n if (enableGraphCapture && location !== "gpu-buffer") {\n throw new Error(`Not supported preferred output location: ${location}. Only \'gpu-buffer\' location is supported when enableGraphCapture is true.`);\n }\n outputPreferredLocations.push(location);\n }\n }\n let bindingState = null;\n if (false) {\n ioBindingHandle = wasm2._OrtCreateBinding(sessionHandle);\n if (ioBindingHandle === 0) {\n checkLastError("Can\'t create IO binding.");\n }\n bindingState = {\n handle: ioBindingHandle,\n outputPreferredLocations,\n outputPreferredLocationsEncoded: outputPreferredLocations.map((l) => dataLocationStringToEnum(l))\n };\n }\n activeSessions.set(\n sessionHandle,\n [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, bindingState, enableGraphCapture, false]\n );\n return [sessionHandle, inputNames, outputNames];\n } catch (e) {\n inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n if (ioBindingHandle !== 0) {\n wasm2._OrtReleaseBinding(ioBindingHandle);\n }\n if (sessionHandle !== 0) {\n wasm2._OrtReleaseSession(sessionHandle);\n }\n throw e;\n } finally {\n wasm2._free(modelDataOffset);\n if (sessionOptionsHandle !== 0) {\n wasm2._OrtReleaseSessionOptions(sessionOptionsHandle);\n }\n allocs.forEach((alloc) => wasm2._free(alloc));\n wasm2.unmountExternalData?.();\n }\n };\n var releaseSession = (sessionId) => {\n const wasm2 = getInstance();\n const session = activeSessions.get(sessionId);\n if (!session) {\n throw new Error(`cannot release session. invalid session id: ${sessionId}`);\n }\n const [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture] = session;\n if (ioBindingState) {\n if (enableGraphCapture) {\n wasm2._OrtClearBoundOutputs(ioBindingState.handle);\n }\n wasm2._OrtReleaseBinding(ioBindingState.handle);\n }\n wasm2.jsepOnReleaseSession?.(sessionId);\n inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n wasm2._OrtReleaseSession(sessionHandle);\n activeSessions.delete(sessionId);\n };\n var prepareInputOutputTensor = (tensor, tensorHandles, allocs, sessionId, index, enableGraphCapture = false) => {\n if (!tensor) {\n tensorHandles.push(0);\n return;\n }\n const wasm2 = getInstance();\n const dataType = tensor[0];\n const dims = tensor[1];\n const location = tensor[3];\n let rawData;\n let dataByteLength;\n if (dataType === "string" && location === "gpu-buffer") {\n throw new Error("String tensor is not supported on GPU.");\n }\n if (enableGraphCapture && location !== "gpu-buffer") {\n throw new Error(\n `External buffer must be provided for input/output index ${index} when enableGraphCapture is true.`\n );\n }\n if (location === "gpu-buffer") {\n const gpuBuffer = tensor[2].gpuBuffer;\n const elementSizeInBytes = getTensorElementSize(tensorDataTypeStringToEnum(dataType));\n dataByteLength = dims.reduce((a, b) => a * b, 1) * elementSizeInBytes;\n const registerBuffer = wasm2.jsepRegisterBuffer;\n if (!registerBuffer) {\n throw new Error(\'Tensor location "gpu-buffer" is not supported without using WebGPU.\');\n }\n rawData = registerBuffer(sessionId, index, gpuBuffer, dataByteLength);\n } else {\n const data = tensor[2];\n if (Array.isArray(data)) {\n dataByteLength = 4 * data.length;\n rawData = wasm2._malloc(dataByteLength);\n allocs.push(rawData);\n let dataIndex = rawData / 4;\n for (let i = 0; i < data.length; i++) {\n if (typeof data[i] !== "string") {\n throw new TypeError(`tensor data at index ${i} is not a string`);\n }\n wasm2.HEAPU32[dataIndex++] = allocWasmString(data[i], allocs);\n }\n } else {\n dataByteLength = data.byteLength;\n rawData = wasm2._malloc(dataByteLength);\n allocs.push(rawData);\n wasm2.HEAPU8.set(new Uint8Array(data.buffer, data.byteOffset, dataByteLength), rawData);\n }\n }\n const stack = wasm2.stackSave();\n const dimsOffset = wasm2.stackAlloc(4 * dims.length);\n try {\n let dimIndex = dimsOffset / 4;\n dims.forEach((d) => wasm2.HEAP32[dimIndex++] = d);\n const tensor2 = wasm2._OrtCreateTensor(\n tensorDataTypeStringToEnum(dataType),\n rawData,\n dataByteLength,\n dimsOffset,\n dims.length,\n dataLocationStringToEnum(location)\n );\n if (tensor2 === 0) {\n checkLastError(`Can\'t create tensor for input/output. session=${sessionId}, index=${index}.`);\n }\n tensorHandles.push(tensor2);\n } finally {\n wasm2.stackRestore(stack);\n }\n };\n var run = async (sessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => {\n const wasm2 = getInstance();\n const session = activeSessions.get(sessionId);\n if (!session) {\n throw new Error(`cannot run inference. invalid session id: ${sessionId}`);\n }\n const sessionHandle = session[0];\n const inputNamesUTF8Encoded = session[1];\n const outputNamesUTF8Encoded = session[2];\n const ioBindingState = session[3];\n const enableGraphCapture = session[4];\n const inputOutputBound = session[5];\n const inputCount = inputIndices.length;\n const outputCount = outputIndices.length;\n let runOptionsHandle = 0;\n let runOptionsAllocs = [];\n const inputTensorHandles = [];\n const outputTensorHandles = [];\n const inputOutputAllocs = [];\n const beforeRunStack = wasm2.stackSave();\n const inputValuesOffset = wasm2.stackAlloc(inputCount * 4);\n const inputNamesOffset = wasm2.stackAlloc(inputCount * 4);\n const outputValuesOffset = wasm2.stackAlloc(outputCount * 4);\n const outputNamesOffset = wasm2.stackAlloc(outputCount * 4);\n try {\n [runOptionsHandle, runOptionsAllocs] = setRunOptions(options);\n for (let i = 0; i < inputCount; i++) {\n prepareInputOutputTensor(\n inputTensors[i],\n inputTensorHandles,\n inputOutputAllocs,\n sessionId,\n inputIndices[i],\n enableGraphCapture\n );\n }\n for (let i = 0; i < outputCount; i++) {\n prepareInputOutputTensor(\n outputTensors[i],\n outputTensorHandles,\n inputOutputAllocs,\n sessionId,\n inputCount + outputIndices[i],\n enableGraphCapture\n );\n }\n let inputValuesIndex = inputValuesOffset / 4;\n let inputNamesIndex = inputNamesOffset / 4;\n let outputValuesIndex = outputValuesOffset / 4;\n let outputNamesIndex = outputNamesOffset / 4;\n for (let i = 0; i < inputCount; i++) {\n wasm2.HEAPU32[inputValuesIndex++] = inputTensorHandles[i];\n wasm2.HEAPU32[inputNamesIndex++] = inputNamesUTF8Encoded[inputIndices[i]];\n }\n for (let i = 0; i < outputCount; i++) {\n wasm2.HEAPU32[outputValuesIndex++] = outputTensorHandles[i];\n wasm2.HEAPU32[outputNamesIndex++] = outputNamesUTF8Encoded[outputIndices[i]];\n }\n if (false) {\n const { handle, outputPreferredLocations, outputPreferredLocationsEncoded } = ioBindingState;\n if (inputNamesUTF8Encoded.length !== inputCount) {\n throw new Error(`input count from feeds (${inputCount}) is expected to be always equal to model\'s input count (${inputNamesUTF8Encoded.length}).`);\n }\n for (let i = 0; i < inputCount; i++) {\n const index = inputIndices[i];\n const errorCode2 = await wasm2._OrtBindInput(handle, inputNamesUTF8Encoded[index], inputTensorHandles[i]);\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t bind input[${i}] for session=${sessionId}.`);\n }\n }\n for (let i = 0; i < outputCount; i++) {\n const index = outputIndices[i];\n const location = outputTensors[i]?.[3];\n if (location) {\n const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], outputTensorHandles[i], 0);\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t bind pre-allocated output[${i}] for session=${sessionId}.`);\n }\n } else {\n const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], 0, outputPreferredLocationsEncoded[index]);\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t bind output[${i}] to ${outputPreferredLocations[i]} for session=${sessionId}.`);\n }\n }\n }\n activeSessions.set(\n sessionId,\n [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, true]\n );\n }\n wasm2.jsepOnRunStart?.(sessionHandle);\n let errorCode;\n if (false) {\n errorCode = await wasm2._OrtRunWithBinding(\n sessionHandle,\n ioBindingState.handle,\n outputCount,\n outputValuesOffset,\n runOptionsHandle\n );\n } else {\n errorCode = await wasm2._OrtRun(\n sessionHandle,\n inputNamesOffset,\n inputValuesOffset,\n inputCount,\n outputNamesOffset,\n outputCount,\n outputValuesOffset,\n runOptionsHandle\n );\n }\n if (errorCode !== 0) {\n checkLastError("failed to call OrtRun().");\n }\n const output = [];\n for (let i = 0; i < outputCount; i++) {\n const tensor = wasm2.HEAPU32[outputValuesOffset / 4 + i];\n if (tensor === outputTensorHandles[i]) {\n output.push(outputTensors[i]);\n continue;\n }\n const beforeGetTensorDataStack = wasm2.stackSave();\n const tensorDataOffset = wasm2.stackAlloc(4 * 4);\n let keepOutputTensor = false;\n let type, dataOffset = 0;\n try {\n const errorCode2 = wasm2._OrtGetTensorData(\n tensor,\n tensorDataOffset,\n tensorDataOffset + 4,\n tensorDataOffset + 8,\n tensorDataOffset + 12\n );\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t access output tensor data on index ${i}.`);\n }\n let tensorDataIndex = tensorDataOffset / 4;\n const dataType = wasm2.HEAPU32[tensorDataIndex++];\n dataOffset = wasm2.HEAPU32[tensorDataIndex++];\n const dimsOffset = wasm2.HEAPU32[tensorDataIndex++];\n const dimsLength = wasm2.HEAPU32[tensorDataIndex++];\n const dims = [];\n for (let i2 = 0; i2 < dimsLength; i2++) {\n dims.push(wasm2.HEAPU32[dimsOffset / 4 + i2]);\n }\n wasm2._OrtFree(dimsOffset);\n const size = dims.reduce((a, b) => a * b, 1);\n type = tensorDataTypeEnumToString(dataType);\n const preferredLocation = ioBindingState?.outputPreferredLocations[outputIndices[i]];\n if (type === "string") {\n if (preferredLocation === "gpu-buffer") {\n throw new Error("String tensor is not supported on GPU.");\n }\n const stringData = [];\n let dataIndex = dataOffset / 4;\n for (let i2 = 0; i2 < size; i2++) {\n const offset = wasm2.HEAPU32[dataIndex++];\n const maxBytesToRead = i2 === size - 1 ? void 0 : wasm2.HEAPU32[dataIndex] - offset;\n stringData.push(wasm2.UTF8ToString(offset, maxBytesToRead));\n }\n output.push([type, dims, stringData, "cpu"]);\n } else {\n if (preferredLocation === "gpu-buffer" && size > 0) {\n const getBuffer = wasm2.jsepGetBuffer;\n if (!getBuffer) {\n throw new Error(\'preferredLocation "gpu-buffer" is not supported without using WebGPU.\');\n }\n const gpuBuffer = getBuffer(dataOffset);\n const elementSize = getTensorElementSize(dataType);\n if (elementSize === void 0 || !isGpuBufferSupportedType(type)) {\n throw new Error(`Unsupported data type: ${type}`);\n }\n keepOutputTensor = true;\n output.push([\n type,\n dims,\n {\n gpuBuffer,\n download: wasm2.jsepCreateDownloader(gpuBuffer, size * elementSize, type),\n dispose: () => {\n wasm2._OrtReleaseTensor(tensor);\n }\n },\n "gpu-buffer"\n ]);\n } else {\n const typedArrayConstructor = tensorTypeToTypedArrayConstructor(type);\n const data = new typedArrayConstructor(size);\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength));\n output.push([type, dims, data, "cpu"]);\n }\n }\n } finally {\n wasm2.stackRestore(beforeGetTensorDataStack);\n if (type === "string" && dataOffset) {\n wasm2._free(dataOffset);\n }\n if (!keepOutputTensor) {\n wasm2._OrtReleaseTensor(tensor);\n }\n }\n }\n if (ioBindingState && !enableGraphCapture) {\n wasm2._OrtClearBoundOutputs(ioBindingState.handle);\n activeSessions.set(\n sessionId,\n [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, false]\n );\n }\n return output;\n } finally {\n wasm2.stackRestore(beforeRunStack);\n inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v));\n outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v));\n inputOutputAllocs.forEach((p) => wasm2._free(p));\n if (runOptionsHandle !== 0) {\n wasm2._OrtReleaseRunOptions(runOptionsHandle);\n }\n runOptionsAllocs.forEach((p) => wasm2._free(p));\n }\n };\n var endProfiling = (sessionId) => {\n const wasm2 = getInstance();\n const session = activeSessions.get(sessionId);\n if (!session) {\n throw new Error("invalid session id");\n }\n const sessionHandle = session[0];\n const profileFileName = wasm2._OrtEndProfiling(sessionHandle);\n if (profileFileName === 0) {\n checkLastError("Can\'t get an profile file name.");\n }\n wasm2._OrtFree(profileFileName);\n };\n var extractTransferableBuffers = (tensors) => {\n const buffers = [];\n for (const tensor of tensors) {\n const data = tensor[2];\n if (!Array.isArray(data) && "buffer" in data) {\n buffers.push(data.buffer);\n }\n }\n return buffers;\n };\n\n // web/lib/wasm/proxy-worker/main.ts\n self.onmessage = (ev) => {\n const { type, in: message } = ev.data;\n try {\n switch (type) {\n case "init-wasm":\n initializeWebAssembly(message.wasm).then(\n () => {\n initRuntime(message).then(\n () => {\n postMessage({ type });\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n case "init-ep": {\n const { epName, env } = message;\n initEp(env, epName).then(\n () => {\n postMessage({ type });\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n }\n case "copy-from": {\n const { buffer } = message;\n const bufferData = copyFromExternalBuffer(buffer);\n postMessage({ type, out: bufferData });\n break;\n }\n case "create": {\n const { model, options } = message;\n createSession(model, options).then(\n (sessionMetadata) => {\n postMessage({ type, out: sessionMetadata });\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n }\n case "release":\n releaseSession(message);\n postMessage({ type });\n break;\n case "run": {\n const { sessionId, inputIndices, inputs, outputIndices, options } = message;\n run(sessionId, inputIndices, inputs, outputIndices, new Array(outputIndices.length).fill(null), options).then(\n (outputs) => {\n if (outputs.some((o) => o[3] !== "cpu")) {\n postMessage({ type, err: "Proxy does not support non-cpu tensor location." });\n } else {\n postMessage(\n { type, out: outputs },\n extractTransferableBuffers([...inputs, ...outputs])\n );\n }\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n }\n case "end-profiling":\n endProfiling(message);\n postMessage({ type });\n break;\n default:\n }\n } catch (err) {\n postMessage({ type, err });\n }\n };\n})();\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZWpzLWlnbm9yZTpmcyIsICJub2RlanMtaWdub3JlOnBhdGgiLCAiLi4vLi4vbGliL3dhc20vYmluZGluZy9vcnQtdHJhaW5pbmctd2FzbS1zaW1kLmpzIiwgIm5vZGVqcy1pZ25vcmU6d29ya2VyX3RocmVhZHMiLCAibm9kZWpzLWlnbm9yZTpwZXJmX2hvb2tzIiwgIm5vZGVqcy1pZ25vcmU6b3MiLCAiLi4vLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC5qcyIsICIuLi8uLi9saWIvd2FzbS9iaW5kaW5nL29ydC13YXNtLXRocmVhZGVkLndvcmtlci5qcyIsICJub2RlanMtaWdub3JlOm5vZGU6cGF0aCIsICIuLi8uLi9saWIvd2FzbS93YXNtLWZhY3RvcnkudHMiLCAiLi4vLi4vbGliL3dhc20vd2FzbS11dGlscy50cyIsICIuLi8uLi9saWIvd2FzbS9ydW4tb3B0aW9ucy50cyIsICIuLi8uLi9saWIvd2FzbS9zZXNzaW9uLW9wdGlvbnMudHMiLCAiLi4vLi4vbGliL3dhc20vd2FzbS1jb21tb24udHMiLCAiLi4vLi4vbGliL3dhc20vd2FzbS11dGlscy1sb2FkLWZpbGUudHMiLCAibm9kZWpzLWlnbm9yZTpub2RlOmZzL3Byb21pc2VzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tY29yZS1pbXBsLnRzIiwgIi4uLy4uL2xpYi93YXNtL3Byb3h5LXdvcmtlci9tYWluLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgY29uc3QgcmVhZEZpbGUgPSB1bmRlZmluZWQ7ZXhwb3J0IGNvbnN0IHJlYWRGaWxlU3luYyA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgY3JlYXRlUmVhZFN0cmVhbSA9IHVuZGVmaW5lZDsiLCAiZXhwb3J0IGNvbnN0IGpvaW4gPSB1bmRlZmluZWQ7IiwgIlxudmFyIG9ydFdhc20gPSAoKCkgPT4ge1xuICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIF9fZmlsZW5hbWUgIT09ICd1bmRlZmluZWQnKSBfc2NyaXB0RGlyID0gX3NjcmlwdERpciB8fCBfX2ZpbGVuYW1lO1xuICByZXR1cm4gKFxuZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHtcblxudmFyIGQ9bW9kdWxlQXJnLGssbDtkLnJlYWR5PW5ldyBQcm9taXNlKChhLGIpPT57az1hO2w9Yn0pO3ZhciByPU9iamVjdC5hc3NpZ24oe30sZCksdj1cIi4vdGhpcy5wcm9ncmFtXCIsYWE9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyx4PVwiZnVuY3Rpb25cIj09dHlwZW9mIGltcG9ydFNjcmlwdHMsYmE9XCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLHk9XCJcIixBLEIsQztcbmlmKGJhKXt2YXIgZnM9cmVxdWlyZShcImZzXCIpLEQ9cmVxdWlyZShcInBhdGhcIik7eT14P0QuZGlybmFtZSh5KStcIi9cIjpfX2Rpcm5hbWUrXCIvXCI7QT0oYSxiKT0+e2E9YS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9uZXcgVVJMKGEpOkQubm9ybWFsaXplKGEpO3JldHVybiBmcy5yZWFkRmlsZVN5bmMoYSxiP3ZvaWQgMDpcInV0ZjhcIil9O0M9YT0+e2E9QShhLCEwKTthLmJ1ZmZlcnx8KGE9bmV3IFVpbnQ4QXJyYXkoYSkpO3JldHVybiBhfTtCPShhLGIsYyxmPSEwKT0+e2E9YS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9uZXcgVVJMKGEpOkQubm9ybWFsaXplKGEpO2ZzLnJlYWRGaWxlKGEsZj92b2lkIDA6XCJ1dGY4XCIsKGcsaCk9PntnP2MoZyk6YihmP2guYnVmZmVyOmgpfSl9OyFkLnRoaXNQcm9ncmFtJiYxPHByb2Nlc3MuYXJndi5sZW5ndGgmJih2PXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpKTtwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7ZC5pbnNwZWN0PSgpPT5cIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdXCJ9ZWxzZSBpZihhYXx8XG54KXg/eT1zZWxmLmxvY2F0aW9uLmhyZWY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoeT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksX3NjcmlwdERpciYmKHk9X3NjcmlwdERpciksMCE9PXkuaW5kZXhPZihcImJsb2I6XCIpP3k9eS5zdWJzdHIoMCx5LnJlcGxhY2UoL1s/I10uKi8sXCJcIikubGFzdEluZGV4T2YoXCIvXCIpKzEpOnk9XCJcIixBPWE9Pnt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5zZW5kKG51bGwpO3JldHVybiBiLnJlc3BvbnNlVGV4dH0seCYmKEM9YT0+e3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJHRVRcIixhLCExKTtiLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7Yi5zZW5kKG51bGwpO3JldHVybiBuZXcgVWludDhBcnJheShiLnJlc3BvbnNlKX0pLEI9KGEsYixjKT0+e3ZhciBmPW5ldyBYTUxIdHRwUmVxdWVzdDtmLm9wZW4oXCJHRVRcIixhLCEwKTtmLnJlc3BvbnNlVHlwZT1cblwiYXJyYXlidWZmZXJcIjtmLm9ubG9hZD0oKT0+ezIwMD09Zi5zdGF0dXN8fDA9PWYuc3RhdHVzJiZmLnJlc3BvbnNlP2IoZi5yZXNwb25zZSk6YygpfTtmLm9uZXJyb3I9YztmLnNlbmQobnVsbCl9O3ZhciBjYT1kLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLEU9ZC5wcmludEVycnx8Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxyKTtyPW51bGw7ZC50aGlzUHJvZ3JhbSYmKHY9ZC50aGlzUHJvZ3JhbSk7dmFyIEY7ZC53YXNtQmluYXJ5JiYoRj1kLndhc21CaW5hcnkpO3ZhciBub0V4aXRSdW50aW1lPWQubm9FeGl0UnVudGltZXx8ITA7XCJvYmplY3RcIiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZHKFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTt2YXIgSCxJLGRhPSExLEosSyxMLE07XG5mdW5jdGlvbiBlYSgpe3ZhciBhPUguYnVmZmVyO2QuSEVBUDg9Sj1uZXcgSW50OEFycmF5KGEpO2QuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGEpO2QuSEVBUDMyPUw9bmV3IEludDMyQXJyYXkoYSk7ZC5IRUFQVTg9Sz1uZXcgVWludDhBcnJheShhKTtkLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGEpO2QuSEVBUFUzMj1NPW5ldyBVaW50MzJBcnJheShhKTtkLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShhKTtkLkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShhKX12YXIgZmE9W10saGE9W10saWE9W107ZnVuY3Rpb24gamEoKXt2YXIgYT1kLnByZVJ1bi5zaGlmdCgpO2ZhLnVuc2hpZnQoYSl9dmFyIE49MCxPPW51bGwsUD1udWxsO1xuZnVuY3Rpb24gRyhhKXtpZihkLm9uQWJvcnQpZC5vbkFib3J0KGEpO2E9XCJBYm9ydGVkKFwiK2ErXCIpXCI7RShhKTtkYT0hMDthPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYStcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIik7bChhKTt0aHJvdyBhO31mdW5jdGlvbiBrYShhKXtyZXR1cm4gYS5zdGFydHNXaXRoKFwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LFwiKX12YXIgUTtRPVwib3J0LXRyYWluaW5nLXdhc20tc2ltZC53YXNtXCI7aWYoIWthKFEpKXt2YXIgbGE9UTtRPWQubG9jYXRlRmlsZT9kLmxvY2F0ZUZpbGUobGEseSk6eStsYX1mdW5jdGlvbiBtYShhKXtpZihhPT1RJiZGKXJldHVybiBuZXcgVWludDhBcnJheShGKTtpZihDKXJldHVybiBDKGEpO3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO31cbmZ1bmN0aW9uIG5hKGEpe2lmKCFGJiYoYWF8fHgpKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBmZXRjaCYmIWEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpcmV0dXJuIGZldGNoKGEse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oYj0+e2lmKCFiLm9rKXRocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIithK1wiJ1wiO3JldHVybiBiLmFycmF5QnVmZmVyKCl9KS5jYXRjaCgoKT0+bWEoYSkpO2lmKEIpcmV0dXJuIG5ldyBQcm9taXNlKChiLGMpPT57QihhLGY9PmIobmV3IFVpbnQ4QXJyYXkoZikpLGMpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm1hKGEpKX1mdW5jdGlvbiBvYShhLGIsYyl7cmV0dXJuIG5hKGEpLnRoZW4oZj0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZixiKSkudGhlbihmPT5mKS50aGVuKGMsZj0+e0UoXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIitmKTtHKGYpfSl9XG5mdW5jdGlvbiBwYShhLGIpe3ZhciBjPVE7cmV0dXJuIEZ8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxrYShjKXx8Yy5zdGFydHNXaXRoKFwiZmlsZTovL1wiKXx8YmF8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGZldGNoP29hKGMsYSxiKTpmZXRjaChjLHtjcmVkZW50aWFsczpcInNhbWUtb3JpZ2luXCJ9KS50aGVuKGY9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGYsYSkudGhlbihiLGZ1bmN0aW9uKGcpe0UoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIrZyk7RShcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO3JldHVybiBvYShjLGEsYil9KSl9dmFyIFIsUz1hPT57Zm9yKDswPGEubGVuZ3RoOylhLnNoaWZ0KCkoZCl9O1xuZnVuY3Rpb24gcWEoYSl7dGhpcy5IYT1hLTI0O3RoaXMuTGE9ZnVuY3Rpb24oYil7TVt0aGlzLkhhKzQ+PjI+Pj4wXT1ifTt0aGlzLkthPWZ1bmN0aW9uKGIpe01bdGhpcy5IYSs4Pj4yPj4+MF09Yn07dGhpcy5JYT1mdW5jdGlvbihiLGMpe3RoaXMuSmEoKTt0aGlzLkxhKGIpO3RoaXMuS2EoYyl9O3RoaXMuSmE9ZnVuY3Rpb24oKXtNW3RoaXMuSGErMTY+PjI+Pj4wXT0wfX1cbnZhciByYT0wLHNhPTAsdGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcihcInV0ZjhcIik6dm9pZCAwLHVhPShhLGIsYyk9PntiPj4+PTA7dmFyIGY9YitjO2ZvcihjPWI7YVtjXSYmIShjPj1mKTspKytjO2lmKDE2PGMtYiYmYS5idWZmZXImJnRhKXJldHVybiB0YS5kZWNvZGUoYS5zdWJhcnJheShiLGMpKTtmb3IoZj1cIlwiO2I8Yzspe3ZhciBnPWFbYisrXTtpZihnJjEyOCl7dmFyIGg9YVtiKytdJjYzO2lmKDE5Mj09KGcmMjI0KSlmKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChnJjMxKTw8NnxoKTtlbHNle3ZhciBtPWFbYisrXSY2MztnPTIyND09KGcmMjQwKT8oZyYxNSk8PDEyfGg8PDZ8bTooZyY3KTw8MTh8aDw8MTJ8bTw8NnxhW2IrK10mNjM7NjU1MzY+Zz9mKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGcpOihnLT02NTUzNixmKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGc+PjEwLDU2MzIwfGcmMTAyMykpfX1lbHNlIGYrPVN0cmluZy5mcm9tQ2hhckNvZGUoZyl9cmV0dXJuIGZ9LFxuVD0oYSxiKT0+KGE+Pj49MCk/dWEoSyxhLGIpOlwiXCIsVT1hPT57Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZj1hLmNoYXJDb2RlQXQoYyk7MTI3Pj1mP2IrKzoyMDQ3Pj1mP2IrPTI6NTUyOTY8PWYmJjU3MzQzPj1mPyhiKz00LCsrYyk6Yis9M31yZXR1cm4gYn0sVj0oYSxiLGMsZik9PntjPj4+PTA7aWYoISgwPGYpKXJldHVybiAwO3ZhciBnPWM7Zj1jK2YtMTtmb3IodmFyIGg9MDtoPGEubGVuZ3RoOysraCl7dmFyIG09YS5jaGFyQ29kZUF0KGgpO2lmKDU1Mjk2PD1tJiY1NzM0Mz49bSl7dmFyIHE9YS5jaGFyQ29kZUF0KCsraCk7bT02NTUzNisoKG0mMTAyMyk8PDEwKXxxJjEwMjN9aWYoMTI3Pj1tKXtpZihjPj1mKWJyZWFrO2JbYysrPj4+MF09bX1lbHNle2lmKDIwNDc+PW0pe2lmKGMrMT49ZilicmVhaztiW2MrKz4+PjBdPTE5MnxtPj42fWVsc2V7aWYoNjU1MzU+PW0pe2lmKGMrMj49ZilicmVhaztiW2MrKz4+PjBdPTIyNHxtPj4xMn1lbHNle2lmKGMrMz49XG5mKWJyZWFrO2JbYysrPj4+MF09MjQwfG0+PjE4O2JbYysrPj4+MF09MTI4fG0+PjEyJjYzfWJbYysrPj4+MF09MTI4fG0+PjYmNjN9YltjKys+Pj4wXT0xMjh8bSY2M319YltjPj4+MF09MDtyZXR1cm4gYy1nfSxXPWE9PjA9PT1hJTQmJigwIT09YSUxMDB8fDA9PT1hJTQwMCksdmE9WzAsMzEsNjAsOTEsMTIxLDE1MiwxODIsMjEzLDI0NCwyNzQsMzA1LDMzNV0sd2E9WzAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNF0sQmE9YT0+e3ZhciBiPVUoYSkrMSxjPUFhKGIpO2MmJlYoYSxLLGMsYik7cmV0dXJuIGN9LFg9e30sQ2E9KCk9PntpZighWSl7dmFyIGE9e1VTRVI6XCJ3ZWJfdXNlclwiLExPR05BTUU6XCJ3ZWJfdXNlclwiLFBBVEg6XCIvXCIsUFdEOlwiL1wiLEhPTUU6XCIvaG9tZS93ZWJfdXNlclwiLExBTkc6KFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fFwiQ1wiKS5yZXBsYWNlKFwiLVwiLFxuXCJfXCIpK1wiLlVURi04XCIsXzp2fHxcIi4vdGhpcy5wcm9ncmFtXCJ9LGI7Zm9yKGIgaW4gWCl2b2lkIDA9PT1YW2JdP2RlbGV0ZSBhW2JdOmFbYl09WFtiXTt2YXIgYz1bXTtmb3IoYiBpbiBhKWMucHVzaChgJHtifT0ke2FbYl19YCk7WT1jfXJldHVybiBZfSxZLERhPVtudWxsLFtdLFtdXSxFYT1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLEZhPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZnVuY3Rpb24gR2EoYSl7dmFyIGI9QXJyYXkoVShhKSsxKTtWKGEsYiwwLGIubGVuZ3RoKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEhhKGEsYixjLGYpe2Z1bmN0aW9uIGcoZSxuLHApe2ZvcihlPVwibnVtYmVyXCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplfHxcIlwiO2UubGVuZ3RoPG47KWU9cFswXStlO3JldHVybiBlfWZ1bmN0aW9uIGgoZSxuKXtyZXR1cm4gZyhlLG4sXCIwXCIpfWZ1bmN0aW9uIG0oZSxuKXtmdW5jdGlvbiBwKHhhKXtyZXR1cm4gMD54YT8tMTowPHhhPzE6MH12YXIgejswPT09KHo9cChlLmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKSkmJjA9PT0oej1wKGUuZ2V0TW9udGgoKS1uLmdldE1vbnRoKCkpKSYmKHo9cChlLmdldERhdGUoKS1uLmdldERhdGUoKSkpO3JldHVybiB6fWZ1bmN0aW9uIHEoZSl7c3dpdGNoKGUuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gZTtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLFxuMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLTEsMTEsMzEpO2Nhc2UgNjpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiB3KGUpe3ZhciBuPWUuQ2E7Zm9yKGU9bmV3IERhdGUoKG5ldyBEYXRlKGUuRGErMTkwMCwwLDEpKS5nZXRUaW1lKCkpOzA8bjspe3ZhciBwPWUuZ2V0TW9udGgoKSx6PShXKGUuZ2V0RnVsbFllYXIoKSk/RWE6RmEpW3BdO2lmKG4+ei1lLmdldERhdGUoKSluLT16LWUuZ2V0RGF0ZSgpKzEsZS5zZXREYXRlKDEpLDExPnA/ZS5zZXRNb250aChwKzEpOihlLnNldE1vbnRoKDApLGUuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpKzEpKTtlbHNle2Uuc2V0RGF0ZShlLmdldERhdGUoKStuKTticmVha319cD1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCkrMSwwLDQpO249cShuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksXG4wLDQpKTtwPXEocCk7cmV0dXJuIDA+PW0obixlKT8wPj1tKHAsZSk/ZS5nZXRGdWxsWWVhcigpKzE6ZS5nZXRGdWxsWWVhcigpOmUuZ2V0RnVsbFllYXIoKS0xfWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO2Y+Pj49MDt2YXIgdD1MW2YrNDA+PjI+Pj4wXTtmPXtPYTpMW2Y+PjI+Pj4wXSxOYTpMW2YrND4+Mj4+PjBdLEVhOkxbZis4Pj4yPj4+MF0sR2E6TFtmKzEyPj4yPj4+MF0sRmE6TFtmKzE2Pj4yPj4+MF0sRGE6TFtmKzIwPj4yPj4+MF0seGE6TFtmKzI0Pj4yPj4+MF0sQ2E6TFtmKzI4Pj4yPj4+MF0sUWE6TFtmKzMyPj4yPj4+MF0sTWE6TFtmKzM2Pj4yPj4+MF0sUGE6dD9UKHQpOlwiXCJ9O2M9VChjKTt0PXtcIiVjXCI6XCIlYSAlYiAlZCAlSDolTTolUyAlWVwiLFwiJURcIjpcIiVtLyVkLyV5XCIsXCIlRlwiOlwiJVktJW0tJWRcIixcIiVoXCI6XCIlYlwiLFwiJXJcIjpcIiVJOiVNOiVTICVwXCIsXCIlUlwiOlwiJUg6JU1cIixcIiVUXCI6XCIlSDolTTolU1wiLFwiJXhcIjpcIiVtLyVkLyV5XCIsXCIlWFwiOlwiJUg6JU06JVNcIixcIiVFY1wiOlwiJWNcIixcblwiJUVDXCI6XCIlQ1wiLFwiJUV4XCI6XCIlbS8lZC8leVwiLFwiJUVYXCI6XCIlSDolTTolU1wiLFwiJUV5XCI6XCIleVwiLFwiJUVZXCI6XCIlWVwiLFwiJU9kXCI6XCIlZFwiLFwiJU9lXCI6XCIlZVwiLFwiJU9IXCI6XCIlSFwiLFwiJU9JXCI6XCIlSVwiLFwiJU9tXCI6XCIlbVwiLFwiJU9NXCI6XCIlTVwiLFwiJU9TXCI6XCIlU1wiLFwiJU91XCI6XCIldVwiLFwiJU9VXCI6XCIlVVwiLFwiJU9WXCI6XCIlVlwiLFwiJU93XCI6XCIld1wiLFwiJU9XXCI6XCIlV1wiLFwiJU95XCI6XCIleVwifTtmb3IodmFyIHUgaW4gdCljPWMucmVwbGFjZShuZXcgUmVnRXhwKHUsXCJnXCIpLHRbdV0pO3ZhciB5YT1cIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLHphPVwiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlclwiLnNwbGl0KFwiIFwiKTt0PXtcIiVhXCI6ZT0+eWFbZS54YV0uc3Vic3RyaW5nKDAsMyksXCIlQVwiOmU9PnlhW2UueGFdLFwiJWJcIjplPT5cbnphW2UuRmFdLnN1YnN0cmluZygwLDMpLFwiJUJcIjplPT56YVtlLkZhXSxcIiVDXCI6ZT0+aCgoZS5EYSsxOTAwKS8xMDB8MCwyKSxcIiVkXCI6ZT0+aChlLkdhLDIpLFwiJWVcIjplPT5nKGUuR2EsMixcIiBcIiksXCIlZ1wiOmU9PncoZSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXCIlR1wiOmU9PncoZSksXCIlSFwiOmU9PmgoZS5FYSwyKSxcIiVJXCI6ZT0+e2U9ZS5FYTswPT1lP2U9MTI6MTI8ZSYmKGUtPTEyKTtyZXR1cm4gaChlLDIpfSxcIiVqXCI6ZT0+e2Zvcih2YXIgbj0wLHA9MDtwPD1lLkZhLTE7bis9KFcoZS5EYSsxOTAwKT9FYTpGYSlbcCsrXSk7cmV0dXJuIGgoZS5HYStuLDMpfSxcIiVtXCI6ZT0+aChlLkZhKzEsMiksXCIlTVwiOmU9PmgoZS5OYSwyKSxcIiVuXCI6KCk9PlwiXFxuXCIsXCIlcFwiOmU9PjA8PWUuRWEmJjEyPmUuRWE/XCJBTVwiOlwiUE1cIixcIiVTXCI6ZT0+aChlLk9hLDIpLFwiJXRcIjooKT0+XCJcXHRcIixcIiV1XCI6ZT0+ZS54YXx8NyxcIiVVXCI6ZT0+aChNYXRoLmZsb29yKChlLkNhKzctZS54YSkvNyksMiksXCIlVlwiOmU9Plxue3ZhciBuPU1hdGguZmxvb3IoKGUuQ2ErNy0oZS54YSs2KSU3KS83KTsyPj0oZS54YSszNzEtZS5DYS0yKSU3JiZuKys7aWYobik1Mz09biYmKHA9KGUueGErMzcxLWUuQ2EpJTcsND09cHx8Mz09cCYmVyhlLkRhKXx8KG49MSkpO2Vsc2V7bj01Mjt2YXIgcD0oZS54YSs3LWUuQ2EtMSklNzsoND09cHx8NT09cCYmVyhlLkRhJTQwMC0xKSkmJm4rK31yZXR1cm4gaChuLDIpfSxcIiV3XCI6ZT0+ZS54YSxcIiVXXCI6ZT0+aChNYXRoLmZsb29yKChlLkNhKzctKGUueGErNiklNykvNyksMiksXCIleVwiOmU9PihlLkRhKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJVlcIjplPT5lLkRhKzE5MDAsXCIlelwiOmU9PntlPWUuTWE7dmFyIG49MDw9ZTtlPU1hdGguYWJzKGUpLzYwO3JldHVybihuP1wiK1wiOlwiLVwiKStTdHJpbmcoXCIwMDAwXCIrKGUvNjAqMTAwK2UlNjApKS5zbGljZSgtNCl9LFwiJVpcIjplPT5lLlBhLFwiJSVcIjooKT0+XCIlXCJ9O2M9Yy5yZXBsYWNlKC8lJS9nLFwiXFx4MDBcXHgwMFwiKTtmb3IodSBpbiB0KWMuaW5jbHVkZXModSkmJlxuKGM9Yy5yZXBsYWNlKG5ldyBSZWdFeHAodSxcImdcIiksdFt1XShmKSkpO2M9Yy5yZXBsYWNlKC9cXDBcXDAvZyxcIiVcIik7dT1HYShjKTtpZih1Lmxlbmd0aD5iKXJldHVybiAwO0ouc2V0KHUsYT4+PjApO3JldHVybiB1Lmxlbmd0aC0xfVxudmFyIEphPXthOmZ1bmN0aW9uKGEsYixjKXthPj4+PTA7KG5ldyBxYShhKSkuSWEoYj4+PjAsYz4+PjApO3JhPWE7c2ErKzt0aHJvdyByYTt9LGU6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sSDpmdW5jdGlvbigpe30seDpmdW5jdGlvbigpe30sejpmdW5jdGlvbigpe30sazpmdW5jdGlvbigpe3JldHVybiAwfSxGOmZ1bmN0aW9uKCl7fSxCOmZ1bmN0aW9uKCl7fSxFOmZ1bmN0aW9uKCl7fSxnOmZ1bmN0aW9uKCl7fSx5OmZ1bmN0aW9uKCl7fSx2OmZ1bmN0aW9uKCl7fSxHOmZ1bmN0aW9uKCl7fSx3OmZ1bmN0aW9uKCl7fSxsOigpPT4hMCxvOmZ1bmN0aW9uKGEsYixjKXthPWIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWE/KGE+Pj4wKSs0Mjk0OTY3Mjk2KmI6TmFOO2M+Pj49MDthPW5ldyBEYXRlKDFFMyphKTtMW2M+PjI+Pj4wXT1hLmdldFVUQ1NlY29uZHMoKTtMW2MrND4+Mj4+PjBdPWEuZ2V0VVRDTWludXRlcygpO0xbYys4Pj4yPj4+MF09YS5nZXRVVENIb3VycygpO0xbYysxMj4+Mj4+PlxuMF09YS5nZXRVVENEYXRlKCk7TFtjKzE2Pj4yPj4+MF09YS5nZXRVVENNb250aCgpO0xbYysyMD4+Mj4+PjBdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwO0xbYysyND4+Mj4+PjBdPWEuZ2V0VVRDRGF5KCk7TFtjKzI4Pj4yPj4+MF09KGEuZ2V0VGltZSgpLURhdGUuVVRDKGEuZ2V0VVRDRnVsbFllYXIoKSwwLDEsMCwwLDAsMCkpLzg2NEU1fDB9LHA6ZnVuY3Rpb24oYSxiLGMpe2E9YisyMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO0xbYz4+Mj4+PjBdPWEuZ2V0U2Vjb25kcygpO0xbYys0Pj4yPj4+MF09YS5nZXRNaW51dGVzKCk7TFtjKzg+PjI+Pj4wXT1hLmdldEhvdXJzKCk7TFtjKzEyPj4yPj4+MF09YS5nZXREYXRlKCk7TFtjKzE2Pj4yPj4+MF09YS5nZXRNb250aCgpO0xbYysyMD4+Mj4+PjBdPWEuZ2V0RnVsbFllYXIoKS0xOTAwO0xbYysyND4+Mj4+PjBdPWEuZ2V0RGF5KCk7TFtjKzI4Pj4yPj4+XG4wXT0oVyhhLmdldEZ1bGxZZWFyKCkpP3ZhOndhKVthLmdldE1vbnRoKCldK2EuZ2V0RGF0ZSgpLTF8MDtMW2MrMzY+PjI+Pj4wXT0tKDYwKmEuZ2V0VGltZXpvbmVPZmZzZXQoKSk7Yj0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLDYsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCk7dmFyIGY9KG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSwwLDEpKS5nZXRUaW1lem9uZU9mZnNldCgpO0xbYyszMj4+Mj4+PjBdPShiIT1mJiZhLmdldFRpbWV6b25lT2Zmc2V0KCk9PU1hdGgubWluKGYsYikpfDB9LHE6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPW5ldyBEYXRlKExbYSsyMD4+Mj4+PjBdKzE5MDAsTFthKzE2Pj4yPj4+MF0sTFthKzEyPj4yPj4+MF0sTFthKzg+PjI+Pj4wXSxMW2ErND4+Mj4+PjBdLExbYT4+Mj4+PjBdLDApLGM9TFthKzMyPj4yPj4+MF0sZj1iLmdldFRpbWV6b25lT2Zmc2V0KCksZz0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDYsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksXG5oPShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksMCwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxtPU1hdGgubWluKGgsZyk7MD5jP0xbYSszMj4+Mj4+PjBdPU51bWJlcihnIT1oJiZtPT1mKTowPGMhPShtPT1mKSYmKGc9TWF0aC5tYXgoaCxnKSxiLnNldFRpbWUoYi5nZXRUaW1lKCkrNkU0KigoMDxjP206ZyktZikpKTtMW2ErMjQ+PjI+Pj4wXT1iLmdldERheSgpO0xbYSsyOD4+Mj4+PjBdPShXKGIuZ2V0RnVsbFllYXIoKSk/dmE6d2EpW2IuZ2V0TW9udGgoKV0rYi5nZXREYXRlKCktMXwwO0xbYT4+Mj4+PjBdPWIuZ2V0U2Vjb25kcygpO0xbYSs0Pj4yPj4+MF09Yi5nZXRNaW51dGVzKCk7TFthKzg+PjI+Pj4wXT1iLmdldEhvdXJzKCk7TFthKzEyPj4yPj4+MF09Yi5nZXREYXRlKCk7TFthKzE2Pj4yPj4+MF09Yi5nZXRNb250aCgpO0xbYSsyMD4+Mj4+PjBdPWIuZ2V0WWVhcigpO2E9Yi5nZXRUaW1lKCkvMUUzO3JldHVybiBJYSgoUj1hLDE8PStNYXRoLmFicyhSKT8wPFI/K01hdGguZmxvb3IoUi9cbjQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFItKyh+flI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApKSxhPj4+MH0sbTpmdW5jdGlvbigpe3JldHVybi01Mn0sbjpmdW5jdGlvbigpe30sdDpmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZih3KXtyZXR1cm4odz13LnRvVGltZVN0cmluZygpLm1hdGNoKC9cXCgoW0EtWmEteiBdKylcXCkkLykpP3dbMV06XCJHTVRcIn1jPj4+PTA7dmFyIGc9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGg9bmV3IERhdGUoZywwLDEpLG09bmV3IERhdGUoZyw2LDEpO2c9aC5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBxPW0uZ2V0VGltZXpvbmVPZmZzZXQoKTtNW2E+Pj4wPj4yPj4+MF09NjAqTWF0aC5tYXgoZyxxKTtMW2I+Pj4wPj4yPj4+MF09TnVtYmVyKGchPXEpO2E9ZihoKTtiPWYobSk7YT1CYShhKTtiPUJhKGIpO3E8Zz8oTVtjPj4yPj4+MF09YSxNW2MrND4+Mj4+PjBdPWIpOihNW2M+PjI+Pj4wXT1iLE1bYys0Pj4yPj4+MF09YSl9LGQ6KCk9PntHKFwiXCIpfSxcbmg6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sdTpmdW5jdGlvbigpe3JldHVybiA0Mjk0OTAxNzYwfSxiOigpPT5wZXJmb3JtYW5jZS5ub3coKSxJOmZ1bmN0aW9uKGEsYixjKXtiPj4+PTA7cmV0dXJuIEsuY29weVdpdGhpbihhPj4+MD4+PjAsYj4+PjAsYisoYz4+PjApPj4+MCl9LHM6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPUsubGVuZ3RoO2lmKDQyOTQ5MDE3NjA8YSlyZXR1cm4hMTtmb3IodmFyIGM9MTs0Pj1jO2MqPTIpe3ZhciBmPWIqKDErLjIvYyk7Zj1NYXRoLm1pbihmLGErMTAwNjYzMjk2KTt2YXIgZz1NYXRoO2Y9TWF0aC5tYXgoYSxmKTthOntnPWcubWluLmNhbGwoZyw0Mjk0OTAxNzYwLGYrKDY1NTM2LWYlNjU1MzYpJTY1NTM2KS1ILmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTY7dHJ5e0guZ3JvdyhnKTtlYSgpO3ZhciBoPTE7YnJlYWsgYX1jYXRjaChtKXt9aD12b2lkIDB9aWYoaClyZXR1cm4hMH1yZXR1cm4hMX0sQzpmdW5jdGlvbihhLGIpe2E+Pj49XG4wO2I+Pj49MDt2YXIgYz0wO0NhKCkuZm9yRWFjaChmdW5jdGlvbihmLGcpe3ZhciBoPWIrYztnPU1bYSs0Kmc+PjI+Pj4wXT1oO2ZvcihoPTA7aDxmLmxlbmd0aDsrK2gpSltnKys+PjA+Pj4wXT1mLmNoYXJDb2RlQXQoaCk7SltnPj4wPj4+MF09MDtjKz1mLmxlbmd0aCsxfSk7cmV0dXJuIDB9LEQ6ZnVuY3Rpb24oYSxiKXthPj4+PTA7Yj4+Pj0wO3ZhciBjPUNhKCk7TVthPj4yPj4+MF09Yy5sZW5ndGg7dmFyIGY9MDtjLmZvckVhY2goZnVuY3Rpb24oZyl7Zis9Zy5sZW5ndGgrMX0pO01bYj4+Mj4+PjBdPWY7cmV0dXJuIDB9LGY6KCk9PjUyLGo6ZnVuY3Rpb24oKXtyZXR1cm4gNTJ9LHI6ZnVuY3Rpb24oKXtyZXR1cm4gNzB9LGk6ZnVuY3Rpb24oYSxiLGMsZil7Yj4+Pj0wO2M+Pj49MDtmPj4+PTA7Zm9yKHZhciBnPTAsaD0wO2g8YztoKyspe3ZhciBtPU1bYj4+Mj4+PjBdLHE9TVtiKzQ+PjI+Pj4wXTtiKz04O2Zvcih2YXIgdz0wO3c8cTt3Kyspe3ZhciB0PUtbbSt3Pj4+MF0sdT1cbkRhW2FdOzA9PT10fHwxMD09PXQ/KCgxPT09YT9jYTpFKSh1YSh1LDApKSx1Lmxlbmd0aD0wKTp1LnB1c2godCl9Zys9cX1NW2Y+PjI+Pj4wXT1nO3JldHVybiAwfSxBOkhhLGM6ZnVuY3Rpb24oYSxiLGMsZil7cmV0dXJuIEhhKGE+Pj4wLGI+Pj4wLGM+Pj4wLGY+Pj4wKX19O1xuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjKXtjPWMuZXhwb3J0cztJPWM9S2EoYyk7SD1JLko7ZWEoKTtoYS51bnNoaWZ0KEkuSyk7Ti0tO2QubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKE4pO2lmKDA9PU4mJihudWxsIT09TyYmKGNsZWFySW50ZXJ2YWwoTyksTz1udWxsKSxQKSl7dmFyIGY9UDtQPW51bGw7ZigpfXJldHVybiBjfXZhciBiPXthOkphfTtOKys7ZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoTik7aWYoZC5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBkLmluc3RhbnRpYXRlV2FzbShiLGEpfWNhdGNoKGMpe0UoXCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiBcIitjKSxsKGMpfXBhKGIsZnVuY3Rpb24oYyl7YShjLmluc3RhbmNlKX0pLmNhdGNoKGwpO3JldHVybnt9fSkoKTtcbmQuX09ydEluaXQ9KGEsYik9PihkLl9PcnRJbml0PUkuTCkoYSxiKTtkLl9PcnRHZXRMYXN0RXJyb3I9KGEsYik9PihkLl9PcnRHZXRMYXN0RXJyb3I9SS5NKShhLGIpO2QuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPShhLGIsYyxmLGcsaCxtLHEsdyx0KT0+KGQuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPUkuTikoYSxiLGMsZixnLGgsbSxxLHcsdCk7ZC5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9KGEsYik9PihkLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj1JLk8pKGEsYik7ZC5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlPShhLGIsYyk9PihkLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9SS5QKShhLGIsYyk7ZC5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PShhLGIsYyk9PihkLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9SS5RKShhLGIsYyk7ZC5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPWE9PihkLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9SS5SKShhKTtcbmQuX09ydENyZWF0ZVNlc3Npb249KGEsYixjKT0+KGQuX09ydENyZWF0ZVNlc3Npb249SS5TKShhLGIsYyk7ZC5fT3J0UmVsZWFzZVNlc3Npb249YT0+KGQuX09ydFJlbGVhc2VTZXNzaW9uPUkuVCkoYSk7ZC5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD0oYSxiLGMpPT4oZC5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD1JLlUpKGEsYixjKTtkLl9PcnRHZXRJbnB1dE5hbWU9KGEsYik9PihkLl9PcnRHZXRJbnB1dE5hbWU9SS5WKShhLGIpO2QuX09ydEdldE91dHB1dE5hbWU9KGEsYik9PihkLl9PcnRHZXRPdXRwdXROYW1lPUkuVykoYSxiKTtkLl9PcnRGcmVlPWE9PihkLl9PcnRGcmVlPUkuWCkoYSk7ZC5fT3J0Q3JlYXRlVGVuc29yPShhLGIsYyxmLGcsaCk9PihkLl9PcnRDcmVhdGVUZW5zb3I9SS5ZKShhLGIsYyxmLGcsaCk7ZC5fT3J0R2V0VGVuc29yRGF0YT0oYSxiLGMsZixnKT0+KGQuX09ydEdldFRlbnNvckRhdGE9SS5aKShhLGIsYyxmLGcpO1xuZC5fT3J0UmVsZWFzZVRlbnNvcj1hPT4oZC5fT3J0UmVsZWFzZVRlbnNvcj1JLl8pKGEpO2QuX09ydENyZWF0ZVJ1bk9wdGlvbnM9KGEsYixjLGYpPT4oZC5fT3J0Q3JlYXRlUnVuT3B0aW9ucz1JLiQpKGEsYixjLGYpO2QuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PShhLGIsYyk9PihkLl9PcnRBZGRSdW5Db25maWdFbnRyeT1JLmFhKShhLGIsYyk7ZC5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9YT0+KGQuX09ydFJlbGVhc2VSdW5PcHRpb25zPUkuYmEpKGEpO2QuX09ydENyZWF0ZUJpbmRpbmc9YT0+KGQuX09ydENyZWF0ZUJpbmRpbmc9SS5jYSkoYSk7ZC5fT3J0QmluZElucHV0PShhLGIsYyk9PihkLl9PcnRCaW5kSW5wdXQ9SS5kYSkoYSxiLGMpO2QuX09ydEJpbmRPdXRwdXQ9KGEsYixjLGYpPT4oZC5fT3J0QmluZE91dHB1dD1JLmVhKShhLGIsYyxmKTtkLl9PcnRDbGVhckJvdW5kT3V0cHV0cz1hPT4oZC5fT3J0Q2xlYXJCb3VuZE91dHB1dHM9SS5mYSkoYSk7XG5kLl9PcnRSZWxlYXNlQmluZGluZz1hPT4oZC5fT3J0UmVsZWFzZUJpbmRpbmc9SS5nYSkoYSk7ZC5fT3J0UnVuV2l0aEJpbmRpbmc9KGEsYixjLGYsZyk9PihkLl9PcnRSdW5XaXRoQmluZGluZz1JLmhhKShhLGIsYyxmLGcpO2QuX09ydFJ1bj0oYSxiLGMsZixnLGgsbSxxKT0+KGQuX09ydFJ1bj1JLmlhKShhLGIsYyxmLGcsaCxtLHEpO2QuX09ydEVuZFByb2ZpbGluZz1hPT4oZC5fT3J0RW5kUHJvZmlsaW5nPUkuamEpKGEpO2QuX09ydFRyYWluaW5nTG9hZENoZWNrcG9pbnQ9KGEsYik9PihkLl9PcnRUcmFpbmluZ0xvYWRDaGVja3BvaW50PUkua2EpKGEsYik7ZC5fT3J0VHJhaW5pbmdSZWxlYXNlQ2hlY2twb2ludD1hPT4oZC5fT3J0VHJhaW5pbmdSZWxlYXNlQ2hlY2twb2ludD1JLmxhKShhKTtkLl9PcnRUcmFpbmluZ0NyZWF0ZVNlc3Npb249KGEsYixjLGYsZyxoLG0scSk9PihkLl9PcnRUcmFpbmluZ0NyZWF0ZVNlc3Npb249SS5tYSkoYSxiLGMsZixnLGgsbSxxKTtcbmQuX09ydFRyYWluaW5nTGF6eVJlc2V0R3JhZD1hPT4oZC5fT3J0VHJhaW5pbmdMYXp5UmVzZXRHcmFkPUkubmEpKGEpO2QuX09ydFRyYWluaW5nUnVuVHJhaW5TdGVwPShhLGIsYyxmLGcsaCk9PihkLl9PcnRUcmFpbmluZ1J1blRyYWluU3RlcD1JLm9hKShhLGIsYyxmLGcsaCk7ZC5fT3J0VHJhaW5pbmdPcHRpbWl6ZXJTdGVwPShhLGIpPT4oZC5fT3J0VHJhaW5pbmdPcHRpbWl6ZXJTdGVwPUkucGEpKGEsYik7ZC5fT3J0VHJhaW5pbmdFdmFsU3RlcD0oYSxiLGMsZixnLGgpPT4oZC5fT3J0VHJhaW5pbmdFdmFsU3RlcD1JLnFhKShhLGIsYyxmLGcsaCk7ZC5fT3J0VHJhaW5pbmdHZXRQYXJhbWV0ZXJzU2l6ZT0oYSxiLGMpPT4oZC5fT3J0VHJhaW5pbmdHZXRQYXJhbWV0ZXJzU2l6ZT1JLnJhKShhLGIsYyk7ZC5fT3J0VHJhaW5pbmdDb3B5UGFyYW1ldGVyc1RvQnVmZmVyPShhLGIsYyxmKT0+KGQuX09ydFRyYWluaW5nQ29weVBhcmFtZXRlcnNUb0J1ZmZlcj1JLnNhKShhLGIsYyxmKTtcbmQuX09ydFRyYWluaW5nQ29weVBhcmFtZXRlcnNGcm9tQnVmZmVyPShhLGIsYyxmKT0+KGQuX09ydFRyYWluaW5nQ29weVBhcmFtZXRlcnNGcm9tQnVmZmVyPUkudGEpKGEsYixjLGYpO2QuX09ydFRyYWluaW5nUmVsZWFzZVNlc3Npb249YT0+KGQuX09ydFRyYWluaW5nUmVsZWFzZVNlc3Npb249SS51YSkoYSk7dmFyIEFhPWQuX21hbGxvYz1hPT4oQWE9ZC5fbWFsbG9jPUkudmEpKGEpO2QuX2ZyZWU9YT0+KGQuX2ZyZWU9SS53YSkoYSk7dmFyIElhPWE9PihJYT1JLnlhKShhKSxMYT0oKT0+KExhPUkuemEpKCksTWE9YT0+KE1hPUkuQWEpKGEpLE5hPWE9PihOYT1JLkJhKShhKTtcbmZ1bmN0aW9uIEthKGEpe2E9T2JqZWN0LmFzc2lnbih7fSxhKTt2YXIgYj1mPT4oKT0+ZigpPj4+MCxjPWY9Pmc9PmYoZyk+Pj4wO2EuX19lcnJub19sb2NhdGlvbj1iKGEuX19lcnJub19sb2NhdGlvbik7YS5tYWxsb2M9YyhhLm1hbGxvYyk7YS5zdGFja1NhdmU9YihhLnN0YWNrU2F2ZSk7YS5zdGFja0FsbG9jPWMoYS5zdGFja0FsbG9jKTtyZXR1cm4gYX1kLnN0YWNrQWxsb2M9TmE7ZC5zdGFja1NhdmU9TGE7ZC5zdGFja1Jlc3RvcmU9TWE7ZC5VVEY4VG9TdHJpbmc9VDtkLnN0cmluZ1RvVVRGOD0oYSxiLGMpPT5WKGEsSyxiLGMpO2QubGVuZ3RoQnl0ZXNVVEY4PVU7dmFyIFo7UD1mdW5jdGlvbiBPYSgpe1p8fFBhKCk7Wnx8KFA9T2EpfTtcbmZ1bmN0aW9uIFBhKCl7ZnVuY3Rpb24gYSgpe2lmKCFaJiYoWj0hMCxkLmNhbGxlZFJ1bj0hMCwhZGEpKXtTKGhhKTtrKGQpO2lmKGQub25SdW50aW1lSW5pdGlhbGl6ZWQpZC5vblJ1bnRpbWVJbml0aWFsaXplZCgpO2lmKGQucG9zdFJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wb3N0UnVuJiYoZC5wb3N0UnVuPVtkLnBvc3RSdW5dKTtkLnBvc3RSdW4ubGVuZ3RoOyl7dmFyIGI9ZC5wb3N0UnVuLnNoaWZ0KCk7aWEudW5zaGlmdChiKX1TKGlhKX19aWYoISgwPE4pKXtpZihkLnByZVJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wcmVSdW4mJihkLnByZVJ1bj1bZC5wcmVSdW5dKTtkLnByZVJ1bi5sZW5ndGg7KWphKCk7UyhmYSk7MDxOfHwoZC5zZXRTdGF0dXM/KGQuc2V0U3RhdHVzKFwiUnVubmluZy4uLlwiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Quc2V0U3RhdHVzKFwiXCIpfSwxKTthKCl9LDEpKTphKCkpfX1cbmlmKGQucHJlSW5pdClmb3IoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wcmVJbml0JiYoZC5wcmVJbml0PVtkLnByZUluaXRdKTswPGQucHJlSW5pdC5sZW5ndGg7KWQucHJlSW5pdC5wb3AoKSgpO1BhKCk7XG5cblxuICByZXR1cm4gbW9kdWxlQXJnLnJlYWR5XG59XG5cbik7XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtO1xuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxuICBkZWZpbmUoW10sICgpID0+IG9ydFdhc20pO1xuIiwgIiIsICIiLCAiZXhwb3J0IGNvbnN0IGNwdXMgPSB1bmRlZmluZWQ7IiwgIlxudmFyIG9ydFdhc21UaHJlYWRlZCA9ICgoKSA9PiB7XG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIF9zY3JpcHREaXIgPSBfc2NyaXB0RGlyIHx8IF9fZmlsZW5hbWU7XG4gIHJldHVybiAoXG5mdW5jdGlvbihtb2R1bGVBcmcgPSB7fSkge1xuXG5mdW5jdGlvbiBhYSgpe2QuYnVmZmVyIT1sLmJ1ZmZlciYmbSgpO3JldHVybiBsfWZ1bmN0aW9uIG4oKXtkLmJ1ZmZlciE9bC5idWZmZXImJm0oKTtyZXR1cm4gYmF9ZnVuY3Rpb24gcCgpe2QuYnVmZmVyIT1sLmJ1ZmZlciYmbSgpO3JldHVybiBjYX1mdW5jdGlvbiByKCl7ZC5idWZmZXIhPWwuYnVmZmVyJiZtKCk7cmV0dXJuIGRhfWZ1bmN0aW9uIGVhKCl7ZC5idWZmZXIhPWwuYnVmZmVyJiZtKCk7cmV0dXJuIGZhfXZhciB3PW1vZHVsZUFyZyxoYSx4O3cucmVhZHk9bmV3IFByb21pc2UoKGEsYik9PntoYT1hO3g9Yn0pO1xudmFyIGlhPU9iamVjdC5hc3NpZ24oe30sdyksamE9XCIuL3RoaXMucHJvZ3JhbVwiLHo9KGEsYik9Pnt0aHJvdyBiO30sa2E9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyxBPVwiZnVuY3Rpb25cIj09dHlwZW9mIGltcG9ydFNjcmlwdHMsQj1cIm9iamVjdFwiPT10eXBlb2YgcHJvY2VzcyYmXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMmJlwic3RyaW5nXCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUsRD13LkVOVklST05NRU5UX0lTX1BUSFJFQUR8fCExLEU9XCJcIjtmdW5jdGlvbiBsYShhKXtyZXR1cm4gdy5sb2NhdGVGaWxlP3cubG9jYXRlRmlsZShhLEUpOkUrYX12YXIgbWEsRixIO1xuaWYoQil7dmFyIGZzPXJlcXVpcmUoXCJmc1wiKSxuYT1yZXF1aXJlKFwicGF0aFwiKTtFPUE/bmEuZGlybmFtZShFKStcIi9cIjpfX2Rpcm5hbWUrXCIvXCI7bWE9KGIsYyk9PntiPWIuc3RhcnRzV2l0aChcImZpbGU6Ly9cIik/bmV3IFVSTChiKTpuYS5ub3JtYWxpemUoYik7cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhiLGM/dm9pZCAwOlwidXRmOFwiKX07SD1iPT57Yj1tYShiLCEwKTtiLmJ1ZmZlcnx8KGI9bmV3IFVpbnQ4QXJyYXkoYikpO3JldHVybiBifTtGPShiLGMsZSxoPSEwKT0+e2I9Yi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9uZXcgVVJMKGIpOm5hLm5vcm1hbGl6ZShiKTtmcy5yZWFkRmlsZShiLGg/dm9pZCAwOlwidXRmOFwiLChnLGspPT57Zz9lKGcpOmMoaD9rLmJ1ZmZlcjprKX0pfTshdy50aGlzUHJvZ3JhbSYmMTxwcm9jZXNzLmFyZ3YubGVuZ3RoJiYoamE9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpO3Byb2Nlc3MuYXJndi5zbGljZSgyKTt6PShiLGMpPT57cHJvY2Vzcy5leGl0Q29kZT1cbmI7dGhyb3cgYzt9O3cuaW5zcGVjdD0oKT0+XCJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XVwiO2xldCBhO3RyeXthPXJlcXVpcmUoXCJ3b3JrZXJfdGhyZWFkc1wiKX1jYXRjaChiKXt0aHJvdyBjb25zb2xlLmVycm9yKCdUaGUgXCJ3b3JrZXJfdGhyZWFkc1wiIG1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgbm9kZS5qcyBidWlsZCAtIHBlcmhhcHMgYSBuZXdlciB2ZXJzaW9uIGlzIG5lZWRlZD8nKSxiO31nbG9iYWwuV29ya2VyPWEuV29ya2VyfWVsc2UgaWYoa2F8fEEpQT9FPXNlbGYubG9jYXRpb24uaHJlZjpcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihFPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwodHlwZW9mIF9zY3JpcHREaXIgIT09IFwidW5kZWZpbmVkXCIgJiYgX3NjcmlwdERpcikmJihFPV9zY3JpcHREaXIpLDAhPT1FLmluZGV4T2YoXCJibG9iOlwiKT9FPUUuc3Vic3RyKDAsRS5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKTpFPVwiXCIsQnx8KG1hPWE9Pnt2YXIgYj1cbm5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJHRVRcIixhLCExKTtiLnNlbmQobnVsbCk7cmV0dXJuIGIucmVzcG9uc2VUZXh0fSxBJiYoSD1hPT57dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2IucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIjtiLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGIucmVzcG9uc2UpfSksRj0oYSxiLGMpPT57dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O2Uub3BlbihcIkdFVFwiLGEsITApO2UucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIjtlLm9ubG9hZD0oKT0+ezIwMD09ZS5zdGF0dXN8fDA9PWUuc3RhdHVzJiZlLnJlc3BvbnNlP2IoZS5yZXNwb25zZSk6YygpfTtlLm9uZXJyb3I9YztlLnNlbmQobnVsbCl9KTtCJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJihnbG9iYWwucGVyZm9ybWFuY2U9cmVxdWlyZShcInBlcmZfaG9va3NcIikucGVyZm9ybWFuY2UpO1xudmFyIG9hPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkscGE9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO0ImJihvYT0oLi4uYSk9PmZzLndyaXRlU3luYygxLGEuam9pbihcIiBcIikrXCJcXG5cIikscGE9KC4uLmEpPT5mcy53cml0ZVN5bmMoMixhLmpvaW4oXCIgXCIpK1wiXFxuXCIpKTt2YXIgcWE9dy5wcmludHx8b2EsST13LnByaW50RXJyfHxwYTtPYmplY3QuYXNzaWduKHcsaWEpO2lhPW51bGw7dy50aGlzUHJvZ3JhbSYmKGphPXcudGhpc1Byb2dyYW0pO3cucXVpdCYmKHo9dy5xdWl0KTt2YXIgSjt3Lndhc21CaW5hcnkmJihKPXcud2FzbUJpbmFyeSk7dmFyIG5vRXhpdFJ1bnRpbWU9dy5ub0V4aXRSdW50aW1lfHwhMDtcIm9iamVjdFwiIT10eXBlb2YgV2ViQXNzZW1ibHkmJksoXCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkXCIpO3ZhciBkLEwscmEsTT0hMSxOLGwsYmEsY2EsZGEsZmE7XG5mdW5jdGlvbiBtKCl7dmFyIGE9ZC5idWZmZXI7dy5IRUFQOD1sPW5ldyBJbnQ4QXJyYXkoYSk7dy5IRUFQMTY9bmV3IEludDE2QXJyYXkoYSk7dy5IRUFQMzI9Y2E9bmV3IEludDMyQXJyYXkoYSk7dy5IRUFQVTg9YmE9bmV3IFVpbnQ4QXJyYXkoYSk7dy5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShhKTt3LkhFQVBVMzI9ZGE9bmV3IFVpbnQzMkFycmF5KGEpO3cuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGEpO3cuSEVBUEY2ND1mYT1uZXcgRmxvYXQ2NEFycmF5KGEpfXZhciBPPXcuSU5JVElBTF9NRU1PUll8fDE2Nzc3MjE2OzUyNDI4ODA8PU98fEsoXCJJTklUSUFMX01FTU9SWSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gU1RBQ0tfU0laRSwgd2FzIFwiK08rXCIhIChTVEFDS19TSVpFPTUyNDI4ODApXCIpO1xuaWYoRClkPXcud2FzbU1lbW9yeTtlbHNlIGlmKHcud2FzbU1lbW9yeSlkPXcud2FzbU1lbW9yeTtlbHNlIGlmKGQ9bmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDpPLzY1NTM2LG1heGltdW06NjU1MzYsc2hhcmVkOiEwfSksIShkLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKSl0aHJvdyBJKFwicmVxdWVzdGVkIGEgc2hhcmVkIFdlYkFzc2VtYmx5Lk1lbW9yeSBidXQgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBub3QgYSBTaGFyZWRBcnJheUJ1ZmZlciwgaW5kaWNhdGluZyB0aGF0IHdoaWxlIHRoZSBicm93c2VyIGhhcyBTaGFyZWRBcnJheUJ1ZmZlciBpdCBkb2VzIG5vdCBoYXZlIFdlYkFzc2VtYmx5IHRocmVhZHMgc3VwcG9ydCAtIHlvdSBtYXkgbmVlZCB0byBzZXQgYSBmbGFnXCIpLEImJkkoXCIob24gbm9kZSB5b3UgbWF5IG5lZWQ6IC0tZXhwZXJpbWVudGFsLXdhc20tdGhyZWFkcyAtLWV4cGVyaW1lbnRhbC13YXNtLWJ1bGstbWVtb3J5IGFuZC9vciByZWNlbnQgdmVyc2lvbilcIiksXG5FcnJvcihcImJhZCBtZW1vcnlcIik7bSgpO089ZC5idWZmZXIuYnl0ZUxlbmd0aDt2YXIgc2EsdGE9W10sdWE9W10sdmE9W10sd2E9MDtmdW5jdGlvbiBQKCl7cmV0dXJuIG5vRXhpdFJ1bnRpbWV8fDA8d2F9dmFyIFE9MCx4YT1udWxsLFI9bnVsbDtmdW5jdGlvbiB5YSgpe1ErKzt3Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJncubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhRKX1mdW5jdGlvbiB6YSgpe1EtLTt3Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJncubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhRKTtpZigwPT1RJiYobnVsbCE9PXhhJiYoY2xlYXJJbnRlcnZhbCh4YSkseGE9bnVsbCksUikpe3ZhciBhPVI7Uj1udWxsO2EoKX19XG5mdW5jdGlvbiBLKGEpe2lmKHcub25BYm9ydCl3Lm9uQWJvcnQoYSk7YT1cIkFib3J0ZWQoXCIrYStcIilcIjtJKGEpO009ITA7Tj0xO2E9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihhK1wiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLlwiKTt4KGEpO3Rocm93IGE7fWZ1bmN0aW9uIEFhKGEpe3JldHVybiBhLnN0YXJ0c1dpdGgoXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCIpfXZhciBTO1M9XCJvcnQtd2FzbS10aHJlYWRlZC53YXNtXCI7QWEoUyl8fChTPWxhKFMpKTtmdW5jdGlvbiBCYShhKXtpZihhPT1TJiZKKXJldHVybiBuZXcgVWludDhBcnJheShKKTtpZihIKXJldHVybiBIKGEpO3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO31cbmZ1bmN0aW9uIENhKGEpe2lmKCFKJiYoa2F8fEEpKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBmZXRjaCYmIWEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpcmV0dXJuIGZldGNoKGEse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oYj0+e2lmKCFiLm9rKXRocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIithK1wiJ1wiO3JldHVybiBiLmFycmF5QnVmZmVyKCl9KS5jYXRjaCgoKT0+QmEoYSkpO2lmKEYpcmV0dXJuIG5ldyBQcm9taXNlKChiLGMpPT57RihhLGU9PmIobmV3IFVpbnQ4QXJyYXkoZSkpLGMpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkJhKGEpKX1mdW5jdGlvbiBEYShhLGIsYyl7cmV0dXJuIENhKGEpLnRoZW4oZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZSxiKSkudGhlbihlPT5lKS50aGVuKGMsZT0+e0koXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIitlKTtLKGUpfSl9XG5mdW5jdGlvbiBFYShhLGIpe3ZhciBjPVM7cmV0dXJuIEp8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxBYShjKXx8Yy5zdGFydHNXaXRoKFwiZmlsZTovL1wiKXx8Qnx8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/RGEoYyxhLGIpOmZldGNoKGMse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZSxhKS50aGVuKGIsZnVuY3Rpb24oaCl7SShcIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiBcIitoKTtJKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7cmV0dXJuIERhKGMsYSxiKX0pKX12YXIgVDtmdW5jdGlvbiBVKGEpe3RoaXMubmFtZT1cIkV4aXRTdGF0dXNcIjt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHthfSlgO3RoaXMuc3RhdHVzPWF9XG5mdW5jdGlvbiBGYShhKXthLnRlcm1pbmF0ZSgpO2Eub25tZXNzYWdlPSgpPT57fX1mdW5jdGlvbiBHYShhKXsoYT1WLkxhW2FdKXx8SygpO1YubGIoYSl9ZnVuY3Rpb24gSGEoYSl7dmFyIGI9Vi5mYigpO2lmKCFiKXJldHVybiA2O1YuT2EucHVzaChiKTtWLkxhW2EuTmFdPWI7Yi5OYT1hLk5hO3ZhciBjPXtjbWQ6XCJydW5cIixzdGFydF9yb3V0aW5lOmEubWIsYXJnOmEuZWIscHRocmVhZF9wdHI6YS5OYX07QiYmYi51bnJlZigpO2IucG9zdE1lc3NhZ2UoYyxhLnNiKTtyZXR1cm4gMH1cbnZhciBJYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp2b2lkIDAsSmE9KGEsYixjKT0+e2I+Pj49MDt2YXIgZT1iK2M7Zm9yKGM9YjthW2NdJiYhKGM+PWUpOykrK2M7aWYoMTY8Yy1iJiZhLmJ1ZmZlciYmSWEpcmV0dXJuIElhLmRlY29kZShhLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP2Euc2xpY2UoYixjKTphLnN1YmFycmF5KGIsYykpO2ZvcihlPVwiXCI7YjxjOyl7dmFyIGg9YVtiKytdO2lmKGgmMTI4KXt2YXIgZz1hW2IrK10mNjM7aWYoMTkyPT0oaCYyMjQpKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGgmMzEpPDw2fGcpO2Vsc2V7dmFyIGs9YVtiKytdJjYzO2g9MjI0PT0oaCYyNDApPyhoJjE1KTw8MTJ8Zzw8NnxrOihoJjcpPDwxOHxnPDwxMnxrPDw2fGFbYisrXSY2Mzs2NTUzNj5oP2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoaCk6KGgtPTY1NTM2LGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8aD4+XG4xMCw1NjMyMHxoJjEwMjMpKX19ZWxzZSBlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpfXJldHVybiBlfSxLYT0oYSxiKT0+KGE+Pj49MCk/SmEobigpLGEsYik6XCJcIjtmdW5jdGlvbiBMYShhKXtpZihEKXJldHVybiBXKDEsMSxhKTtOPWE7aWYoIVAoKSl7Vi5uYigpO2lmKHcub25FeGl0KXcub25FeGl0KGEpO009ITB9eihhLG5ldyBVKGEpKX1cbnZhciBOYT1hPT57Tj1hO2lmKEQpdGhyb3cgTWEoYSksXCJ1bndpbmRcIjtMYShhKX0sVj17UmE6W10sT2E6W10sWmE6W10sTGE6e30sVmE6ZnVuY3Rpb24oKXtEP1YuaGIoKTpWLmdiKCl9LGdiOmZ1bmN0aW9uKCl7dGEudW5zaGlmdCgoKT0+e3lhKCk7Vi5pYigoKT0+emEoKSl9KX0saGI6ZnVuY3Rpb24oKXtWLnJlY2VpdmVPYmplY3RUcmFuc2Zlcj1WLmtiO1YudGhyZWFkSW5pdFRMUz1WLllhO1Yuc2V0RXhpdFN0YXR1cz1WLlhhO25vRXhpdFJ1bnRpbWU9ITF9LFhhOmZ1bmN0aW9uKGEpe049YX0seGI6W1wiJHRlcm1pbmF0ZVdvcmtlclwiXSxuYjpmdW5jdGlvbigpe2Zvcih2YXIgYSBvZiBWLk9hKUZhKGEpO2ZvcihhIG9mIFYuUmEpRmEoYSk7Vi5SYT1bXTtWLk9hPVtdO1YuTGE9W119LGxiOmZ1bmN0aW9uKGEpe3ZhciBiPWEuTmE7ZGVsZXRlIFYuTGFbYl07Vi5SYS5wdXNoKGEpO1YuT2Euc3BsaWNlKFYuT2EuaW5kZXhPZihhKSwxKTthLk5hPTA7T2EoYil9LGtiOmZ1bmN0aW9uKCl7fSxcbllhOmZ1bmN0aW9uKCl7Vi5aYS5mb3JFYWNoKGE9PmEoKSl9LGpiOmE9Pm5ldyBQcm9taXNlKGI9PnthLm9ubWVzc2FnZT1nPT57Zz1nLmRhdGE7dmFyIGs9Zy5jbWQ7aWYoZy50YXJnZXRUaHJlYWQmJmcudGFyZ2V0VGhyZWFkIT1YKCkpe3ZhciB0PVYuTGFbZy53Yl07dD90LnBvc3RNZXNzYWdlKGcsZy50cmFuc2Zlckxpc3QpOkkoJ0ludGVybmFsIGVycm9yISBXb3JrZXIgc2VudCBhIG1lc3NhZ2UgXCInK2srJ1wiIHRvIHRhcmdldCBwdGhyZWFkICcrZy50YXJnZXRUaHJlYWQrXCIsIGJ1dCB0aGF0IHRocmVhZCBubyBsb25nZXIgZXhpc3RzIVwiKX1lbHNlIGlmKFwiY2hlY2tNYWlsYm94XCI9PT1rKVkoKTtlbHNlIGlmKFwic3Bhd25UaHJlYWRcIj09PWspSGEoZyk7ZWxzZSBpZihcImNsZWFudXBUaHJlYWRcIj09PWspR2EoZy50aHJlYWQpO2Vsc2UgaWYoXCJraWxsVGhyZWFkXCI9PT1rKWc9Zy50aHJlYWQsaz1WLkxhW2ddLGRlbGV0ZSBWLkxhW2ddLEZhKGspLE9hKGcpLFYuT2Euc3BsaWNlKFYuT2EuaW5kZXhPZihrKSxcbjEpLGsuTmE9MDtlbHNlIGlmKFwiY2FuY2VsVGhyZWFkXCI9PT1rKVYuTGFbZy50aHJlYWRdLnBvc3RNZXNzYWdlKHtjbWQ6XCJjYW5jZWxcIn0pO2Vsc2UgaWYoXCJsb2FkZWRcIj09PWspYS5sb2FkZWQ9ITAsYihhKTtlbHNlIGlmKFwiYWxlcnRcIj09PWspYWxlcnQoXCJUaHJlYWQgXCIrZy50aHJlYWRJZCtcIjogXCIrZy50ZXh0KTtlbHNlIGlmKFwic2V0aW1tZWRpYXRlXCI9PT1nLnRhcmdldClhLnBvc3RNZXNzYWdlKGcpO2Vsc2UgaWYoXCJjYWxsSGFuZGxlclwiPT09ayl3W2cuaGFuZGxlcl0oLi4uZy5hcmdzKTtlbHNlIGsmJkkoXCJ3b3JrZXIgc2VudCBhbiB1bmtub3duIGNvbW1hbmQgXCIrayl9O2Eub25lcnJvcj1nPT57SShcIndvcmtlciBzZW50IGFuIGVycm9yISBcIitnLmZpbGVuYW1lK1wiOlwiK2cubGluZW5vK1wiOiBcIitnLm1lc3NhZ2UpO3Rocm93IGc7fTtCJiYoYS5vbihcIm1lc3NhZ2VcIixmdW5jdGlvbihnKXthLm9ubWVzc2FnZSh7ZGF0YTpnfSl9KSxhLm9uKFwiZXJyb3JcIixmdW5jdGlvbihnKXthLm9uZXJyb3IoZyl9KSk7XG52YXIgYz1bXSxlPVtcIm9uRXhpdFwiLFwib25BYm9ydFwiLFwicHJpbnRcIixcInByaW50RXJyXCJdLGg7Zm9yKGggb2YgZSl3Lmhhc093blByb3BlcnR5KGgpJiZjLnB1c2goaCk7YS5wb3N0TWVzc2FnZSh7Y21kOlwibG9hZFwiLGhhbmRsZXJzOmMsdXJsT3JCbG9iOncubWFpblNjcmlwdFVybE9yQmxvYnx8X3NjcmlwdERpcix3YXNtTWVtb3J5OmQsd2FzbU1vZHVsZTpyYX0pfSksaWI6ZnVuY3Rpb24oYSl7YSgpfSxjYjpmdW5jdGlvbigpe3ZhciBhPWxhKFwib3J0LXdhc20tdGhyZWFkZWQud29ya2VyLmpzXCIpO2E9bmV3IFdvcmtlcihhKTtWLlJhLnB1c2goYSl9LGZiOmZ1bmN0aW9uKCl7MD09Vi5SYS5sZW5ndGgmJihWLmNiKCksVi5qYihWLlJhWzBdKSk7cmV0dXJuIFYuUmEucG9wKCl9fTt3LlBUaHJlYWQ9Vjt2YXIgUGE9YT0+e2Zvcig7MDxhLmxlbmd0aDspYS5zaGlmdCgpKHcpfTtcbncuZXN0YWJsaXNoU3RhY2tTcGFjZT1mdW5jdGlvbigpe3ZhciBhPVgoKSxiPXAoKVthKzUyPj4yPj4+MF07YT1wKClbYSs1Nj4+Mj4+PjBdO1FhKGIsYi1hKTtSYShiKX07ZnVuY3Rpb24gTWEoYSl7aWYoRClyZXR1cm4gVygyLDAsYSk7TmEoYSl9dmFyIFNhPVtdO3cuaW52b2tlRW50cnlQb2ludD1mdW5jdGlvbihhLGIpe3ZhciBjPVNhW2FdO2N8fChhPj1TYS5sZW5ndGgmJihTYS5sZW5ndGg9YSsxKSxTYVthXT1jPXNhLmdldChhKSk7YT1jKGIpO1AoKT9WLlhhKGEpOlRhKGEpfTtmdW5jdGlvbiBVYShhKXt0aGlzLlVhPWEtMjQ7dGhpcy5iYj1mdW5jdGlvbihiKXtyKClbdGhpcy5VYSs0Pj4yPj4+MF09Yn07dGhpcy5hYj1mdW5jdGlvbihiKXtyKClbdGhpcy5VYSs4Pj4yPj4+MF09Yn07dGhpcy5WYT1mdW5jdGlvbihiLGMpe3RoaXMuJGEoKTt0aGlzLmJiKGIpO3RoaXMuYWIoYyl9O3RoaXMuJGE9ZnVuY3Rpb24oKXtyKClbdGhpcy5VYSsxNj4+Mj4+PjBdPTB9fVxudmFyIFZhPTAsV2E9MDtmdW5jdGlvbiBYYShhLGIsYyxlKXtyZXR1cm4gRD9XKDMsMSxhLGIsYyxlKTpZYShhLGIsYyxlKX1mdW5jdGlvbiBZYShhLGIsYyxlKXthPj4+PTA7Yj4+Pj0wO2M+Pj49MDtlPj4+PTA7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyKXJldHVybiBJKFwiQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IFNoYXJlZEFycmF5QnVmZmVyLCBwdGhyZWFkcyBhcmUgbm90IGF2YWlsYWJsZSFcIiksNjt2YXIgaD1bXTtpZihEJiYwPT09aC5sZW5ndGgpcmV0dXJuIFhhKGEsYixjLGUpO2E9e21iOmMsTmE6YSxlYjplLHNiOmh9O3JldHVybiBEPyhhLnViPVwic3Bhd25UaHJlYWRcIixwb3N0TWVzc2FnZShhLGgpLDApOkhhKGEpfWZ1bmN0aW9uIFphKGEsYixjKXtyZXR1cm4gRD9XKDQsMSxhLGIsYyk6MH1mdW5jdGlvbiAkYShhLGIpe2lmKEQpcmV0dXJuIFcoNSwxLGEsYil9XG52YXIgYWI9YT0+e2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGU9YS5jaGFyQ29kZUF0KGMpOzEyNz49ZT9iKys6MjA0Nz49ZT9iKz0yOjU1Mjk2PD1lJiY1NzM0Mz49ZT8oYis9NCwrK2MpOmIrPTN9cmV0dXJuIGJ9LGJiPShhLGIsYyxlKT0+e2M+Pj49MDtpZighKDA8ZSkpcmV0dXJuIDA7dmFyIGg9YztlPWMrZS0xO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7KytnKXt2YXIgaz1hLmNoYXJDb2RlQXQoZyk7aWYoNTUyOTY8PWsmJjU3MzQzPj1rKXt2YXIgdD1hLmNoYXJDb2RlQXQoKytnKTtrPTY1NTM2KygoayYxMDIzKTw8MTApfHQmMTAyM31pZigxMjc+PWspe2lmKGM+PWUpYnJlYWs7YltjKys+Pj4wXT1rfWVsc2V7aWYoMjA0Nz49ayl7aWYoYysxPj1lKWJyZWFrO2JbYysrPj4+MF09MTkyfGs+PjZ9ZWxzZXtpZig2NTUzNT49ayl7aWYoYysyPj1lKWJyZWFrO2JbYysrPj4+MF09MjI0fGs+PjEyfWVsc2V7aWYoYyszPj1lKWJyZWFrO2JbYysrPj4+MF09MjQwfGs+PlxuMTg7YltjKys+Pj4wXT0xMjh8az4+MTImNjN9YltjKys+Pj4wXT0xMjh8az4+NiY2M31iW2MrKz4+PjBdPTEyOHxrJjYzfX1iW2M+Pj4wXT0wO3JldHVybiBjLWh9LGNiPShhLGIsYyk9PmJiKGEsbigpLGIsYyk7ZnVuY3Rpb24gZGIoYSxiKXtpZihEKXJldHVybiBXKDYsMSxhLGIpfWZ1bmN0aW9uIGViKGEsYixjKXtpZihEKXJldHVybiBXKDcsMSxhLGIsYyl9ZnVuY3Rpb24gZmIoYSxiLGMpe3JldHVybiBEP1coOCwxLGEsYixjKTowfWZ1bmN0aW9uIGdiKGEsYil7aWYoRClyZXR1cm4gVyg5LDEsYSxiKX1mdW5jdGlvbiBoYihhLGIsYyl7aWYoRClyZXR1cm4gVygxMCwxLGEsYixjKX1mdW5jdGlvbiBpYihhLGIsYyxlKXtpZihEKXJldHVybiBXKDExLDEsYSxiLGMsZSl9ZnVuY3Rpb24gamIoYSxiLGMsZSl7aWYoRClyZXR1cm4gVygxMiwxLGEsYixjLGUpfWZ1bmN0aW9uIGtiKGEsYixjLGUpe2lmKEQpcmV0dXJuIFcoMTMsMSxhLGIsYyxlKX1cbmZ1bmN0aW9uIGxiKGEpe2lmKEQpcmV0dXJuIFcoMTQsMSxhKX1mdW5jdGlvbiBtYihhLGIpe2lmKEQpcmV0dXJuIFcoMTUsMSxhLGIpfWZ1bmN0aW9uIG5iKGEsYixjKXtpZihEKXJldHVybiBXKDE2LDEsYSxiLGMpfXZhciBvYj1hPT57aWYoIU0pdHJ5e2lmKGEoKSwhUCgpKXRyeXtEP1RhKE4pOk5hKE4pfWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBVfHxcInVud2luZFwiPT1ifHx6KDEsYil9fWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBVfHxcInVud2luZFwiPT1ifHx6KDEsYil9fTtmdW5jdGlvbiBwYihhKXthPj4+PTA7XCJmdW5jdGlvblwiPT09dHlwZW9mIEF0b21pY3MudGImJihBdG9taWNzLnRiKHAoKSxhPj4yLGEpLnZhbHVlLnRoZW4oWSksYSs9MTI4LEF0b21pY3Muc3RvcmUocCgpLGE+PjIsMSkpfXcuX19lbXNjcmlwdGVuX3RocmVhZF9tYWlsYm94X2F3YWl0PXBiO2Z1bmN0aW9uIFkoKXt2YXIgYT1YKCk7YSYmKHBiKGEpLG9iKCgpPT5xYigpKSl9dy5jaGVja01haWxib3g9WTtcbnZhciBaPWE9PjA9PT1hJTQmJigwIT09YSUxMDB8fDA9PT1hJTQwMCkscmI9WzAsMzEsNjAsOTEsMTIxLDE1MiwxODIsMjEzLDI0NCwyNzQsMzA1LDMzNV0sc2I9WzAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNF07ZnVuY3Rpb24gdGIoYSxiLGMsZSxoLGcsayx0KXtyZXR1cm4gRD9XKDE3LDEsYSxiLGMsZSxoLGcsayx0KTotNTJ9ZnVuY3Rpb24gdWIoYSxiLGMsZSxoLGcsayl7aWYoRClyZXR1cm4gVygxOCwxLGEsYixjLGUsaCxnLGspfXZhciB3Yj1hPT57dmFyIGI9YWIoYSkrMSxjPXZiKGIpO2MmJmNiKGEsYyxiKTtyZXR1cm4gY30seWI9YT0+e3ZhciBiPXhiKCk7YT1hKCk7UmEoYik7cmV0dXJuIGF9O1xuZnVuY3Rpb24gVyhhLGIpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGgtMixlPWFyZ3VtZW50cztyZXR1cm4geWIoKCk9Pntmb3IodmFyIGg9emIoOCpjKSxnPWg+PjMsaz0wO2s8YztrKyspe3ZhciB0PWVbMitrXTtlYSgpW2craz4+PjBdPXR9cmV0dXJuIEFiKGEsYyxoLGIpfSl9XG52YXIgQmI9W10sQ2I9e30sRWI9KCk9PntpZighRGIpe3ZhciBhPXtVU0VSOlwid2ViX3VzZXJcIixMT0dOQU1FOlwid2ViX3VzZXJcIixQQVRIOlwiL1wiLFBXRDpcIi9cIixIT01FOlwiL2hvbWUvd2ViX3VzZXJcIixMQU5HOihcIm9iamVjdFwiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHxcIkNcIikucmVwbGFjZShcIi1cIixcIl9cIikrXCIuVVRGLThcIixfOmphfHxcIi4vdGhpcy5wcm9ncmFtXCJ9LGI7Zm9yKGIgaW4gQ2Ipdm9pZCAwPT09Q2JbYl0/ZGVsZXRlIGFbYl06YVtiXT1DYltiXTt2YXIgYz1bXTtmb3IoYiBpbiBhKWMucHVzaChgJHtifT0ke2FbYl19YCk7RGI9Y31yZXR1cm4gRGJ9LERiO1xuZnVuY3Rpb24gRmIoYSxiKXtpZihEKXJldHVybiBXKDE5LDEsYSxiKTthPj4+PTA7Yj4+Pj0wO3ZhciBjPTA7RWIoKS5mb3JFYWNoKGZ1bmN0aW9uKGUsaCl7dmFyIGc9YitjO2g9cigpW2ErNCpoPj4yPj4+MF09Zztmb3IoZz0wO2c8ZS5sZW5ndGg7KytnKWFhKClbaCsrPj4wPj4+MF09ZS5jaGFyQ29kZUF0KGcpO2FhKClbaD4+MD4+PjBdPTA7Yys9ZS5sZW5ndGgrMX0pO3JldHVybiAwfWZ1bmN0aW9uIEdiKGEsYil7aWYoRClyZXR1cm4gVygyMCwxLGEsYik7YT4+Pj0wO2I+Pj49MDt2YXIgYz1FYigpO3IoKVthPj4yPj4+MF09Yy5sZW5ndGg7dmFyIGU9MDtjLmZvckVhY2goZnVuY3Rpb24oaCl7ZSs9aC5sZW5ndGgrMX0pO3IoKVtiPj4yPj4+MF09ZTtyZXR1cm4gMH1mdW5jdGlvbiBIYihhKXtyZXR1cm4gRD9XKDIxLDEsYSk6NTJ9ZnVuY3Rpb24gTGIoYSxiLGMsZSl7cmV0dXJuIEQ/VygyMiwxLGEsYixjLGUpOjUyfVxuZnVuY3Rpb24gTWIoYSxiLGMsZSxoKXtyZXR1cm4gRD9XKDIzLDEsYSxiLGMsZSxoKTo3MH12YXIgTmI9W251bGwsW10sW11dO2Z1bmN0aW9uIE9iKGEsYixjLGUpe2lmKEQpcmV0dXJuIFcoMjQsMSxhLGIsYyxlKTtiPj4+PTA7Yz4+Pj0wO2U+Pj49MDtmb3IodmFyIGg9MCxnPTA7ZzxjO2crKyl7dmFyIGs9cigpW2I+PjI+Pj4wXSx0PXIoKVtiKzQ+PjI+Pj4wXTtiKz04O2Zvcih2YXIgQz0wO0M8dDtDKyspe3ZhciB2PW4oKVtrK0M+Pj4wXSx5PU5iW2FdOzA9PT12fHwxMD09PXY/KCgxPT09YT9xYTpJKShKYSh5LDApKSx5Lmxlbmd0aD0wKTp5LnB1c2godil9aCs9dH1yKClbZT4+Mj4+PjBdPWg7cmV0dXJuIDB9dmFyIFBiPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sUWI9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiBSYihhKXt2YXIgYj1BcnJheShhYihhKSsxKTtiYihhLGIsMCxiLmxlbmd0aCk7cmV0dXJuIGJ9XG52YXIgU2I9KGEsYik9PnthYSgpLnNldChhLGI+Pj4wKX07XG5mdW5jdGlvbiBUYihhLGIsYyxlKXtmdW5jdGlvbiBoKGYscSx1KXtmb3IoZj1cIm51bWJlclwiPT10eXBlb2YgZj9mLnRvU3RyaW5nKCk6Znx8XCJcIjtmLmxlbmd0aDxxOylmPXVbMF0rZjtyZXR1cm4gZn1mdW5jdGlvbiBnKGYscSl7cmV0dXJuIGgoZixxLFwiMFwiKX1mdW5jdGlvbiBrKGYscSl7ZnVuY3Rpb24gdShJYil7cmV0dXJuIDA+SWI/LTE6MDxJYj8xOjB9dmFyIEc7MD09PShHPXUoZi5nZXRGdWxsWWVhcigpLXEuZ2V0RnVsbFllYXIoKSkpJiYwPT09KEc9dShmLmdldE1vbnRoKCktcS5nZXRNb250aCgpKSkmJihHPXUoZi5nZXREYXRlKCktcS5nZXREYXRlKCkpKTtyZXR1cm4gR31mdW5jdGlvbiB0KGYpe3N3aXRjaChmLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIGY7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKSxcbjAsMik7Y2FzZSA0OnJldHVybiBuZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKS0xLDExLDMwKX19ZnVuY3Rpb24gQyhmKXt2YXIgcT1mLlBhO2ZvcihmPW5ldyBEYXRlKChuZXcgRGF0ZShmLlFhKzE5MDAsMCwxKSkuZ2V0VGltZSgpKTswPHE7KXt2YXIgdT1mLmdldE1vbnRoKCksRz0oWihmLmdldEZ1bGxZZWFyKCkpP1BiOlFiKVt1XTtpZihxPkctZi5nZXREYXRlKCkpcS09Ry1mLmdldERhdGUoKSsxLGYuc2V0RGF0ZSgxKSwxMT51P2Yuc2V0TW9udGgodSsxKTooZi5zZXRNb250aCgwKSxmLnNldEZ1bGxZZWFyKGYuZ2V0RnVsbFllYXIoKSsxKSk7ZWxzZXtmLnNldERhdGUoZi5nZXREYXRlKCkrcSk7YnJlYWt9fXU9bmV3IERhdGUoZi5nZXRGdWxsWWVhcigpKzEsMCw0KTtxPXQobmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLFxuMCw0KSk7dT10KHUpO3JldHVybiAwPj1rKHEsZik/MD49ayh1LGYpP2YuZ2V0RnVsbFllYXIoKSsxOmYuZ2V0RnVsbFllYXIoKTpmLmdldEZ1bGxZZWFyKCktMX1hPj4+PTA7Yj4+Pj0wO2M+Pj49MDtlPj4+PTA7dmFyIHY9cCgpW2UrNDA+PjI+Pj4wXTtlPXtxYjpwKClbZT4+Mj4+PjBdLHBiOnAoKVtlKzQ+PjI+Pj4wXSxTYTpwKClbZSs4Pj4yPj4+MF0sV2E6cCgpW2UrMTI+PjI+Pj4wXSxUYTpwKClbZSsxNj4+Mj4+PjBdLFFhOnAoKVtlKzIwPj4yPj4+MF0sTWE6cCgpW2UrMjQ+PjI+Pj4wXSxQYTpwKClbZSsyOD4+Mj4+PjBdLHliOnAoKVtlKzMyPj4yPj4+MF0sb2I6cCgpW2UrMzY+PjI+Pj4wXSxyYjp2P0thKHYpOlwiXCJ9O2M9S2EoYyk7dj17XCIlY1wiOlwiJWEgJWIgJWQgJUg6JU06JVMgJVlcIixcIiVEXCI6XCIlbS8lZC8leVwiLFwiJUZcIjpcIiVZLSVtLSVkXCIsXCIlaFwiOlwiJWJcIixcIiVyXCI6XCIlSTolTTolUyAlcFwiLFwiJVJcIjpcIiVIOiVNXCIsXCIlVFwiOlwiJUg6JU06JVNcIixcIiV4XCI6XCIlbS8lZC8leVwiLFxuXCIlWFwiOlwiJUg6JU06JVNcIixcIiVFY1wiOlwiJWNcIixcIiVFQ1wiOlwiJUNcIixcIiVFeFwiOlwiJW0vJWQvJXlcIixcIiVFWFwiOlwiJUg6JU06JVNcIixcIiVFeVwiOlwiJXlcIixcIiVFWVwiOlwiJVlcIixcIiVPZFwiOlwiJWRcIixcIiVPZVwiOlwiJWVcIixcIiVPSFwiOlwiJUhcIixcIiVPSVwiOlwiJUlcIixcIiVPbVwiOlwiJW1cIixcIiVPTVwiOlwiJU1cIixcIiVPU1wiOlwiJVNcIixcIiVPdVwiOlwiJXVcIixcIiVPVVwiOlwiJVVcIixcIiVPVlwiOlwiJVZcIixcIiVPd1wiOlwiJXdcIixcIiVPV1wiOlwiJVdcIixcIiVPeVwiOlwiJXlcIn07Zm9yKHZhciB5IGluIHYpYz1jLnJlcGxhY2UobmV3IFJlZ0V4cCh5LFwiZ1wiKSx2W3ldKTt2YXIgSmI9XCJTdW5kYXkgTW9uZGF5IFR1ZXNkYXkgV2VkbmVzZGF5IFRodXJzZGF5IEZyaWRheSBTYXR1cmRheVwiLnNwbGl0KFwiIFwiKSxLYj1cIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXJcIi5zcGxpdChcIiBcIik7dj17XCIlYVwiOmY9PkpiW2YuTWFdLnN1YnN0cmluZygwLDMpLFxuXCIlQVwiOmY9PkpiW2YuTWFdLFwiJWJcIjpmPT5LYltmLlRhXS5zdWJzdHJpbmcoMCwzKSxcIiVCXCI6Zj0+S2JbZi5UYV0sXCIlQ1wiOmY9PmcoKGYuUWErMTkwMCkvMTAwfDAsMiksXCIlZFwiOmY9PmcoZi5XYSwyKSxcIiVlXCI6Zj0+aChmLldhLDIsXCIgXCIpLFwiJWdcIjpmPT5DKGYpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJUdcIjpmPT5DKGYpLFwiJUhcIjpmPT5nKGYuU2EsMiksXCIlSVwiOmY9PntmPWYuU2E7MD09Zj9mPTEyOjEyPGYmJihmLT0xMik7cmV0dXJuIGcoZiwyKX0sXCIlalwiOmY9Pntmb3IodmFyIHE9MCx1PTA7dTw9Zi5UYS0xO3ErPShaKGYuUWErMTkwMCk/UGI6UWIpW3UrK10pO3JldHVybiBnKGYuV2ErcSwzKX0sXCIlbVwiOmY9PmcoZi5UYSsxLDIpLFwiJU1cIjpmPT5nKGYucGIsMiksXCIlblwiOigpPT5cIlxcblwiLFwiJXBcIjpmPT4wPD1mLlNhJiYxMj5mLlNhP1wiQU1cIjpcIlBNXCIsXCIlU1wiOmY9PmcoZi5xYiwyKSxcIiV0XCI6KCk9PlwiXFx0XCIsXCIldVwiOmY9PmYuTWF8fDcsXCIlVVwiOmY9PmcoTWF0aC5mbG9vcigoZi5QYStcbjctZi5NYSkvNyksMiksXCIlVlwiOmY9Pnt2YXIgcT1NYXRoLmZsb29yKChmLlBhKzctKGYuTWErNiklNykvNyk7Mj49KGYuTWErMzcxLWYuUGEtMiklNyYmcSsrO2lmKHEpNTM9PXEmJih1PShmLk1hKzM3MS1mLlBhKSU3LDQ9PXV8fDM9PXUmJlooZi5RYSl8fChxPTEpKTtlbHNle3E9NTI7dmFyIHU9KGYuTWErNy1mLlBhLTEpJTc7KDQ9PXV8fDU9PXUmJlooZi5RYSU0MDAtMSkpJiZxKyt9cmV0dXJuIGcocSwyKX0sXCIld1wiOmY9PmYuTWEsXCIlV1wiOmY9PmcoTWF0aC5mbG9vcigoZi5QYSs3LShmLk1hKzYpJTcpLzcpLDIpLFwiJXlcIjpmPT4oZi5RYSsxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSxcIiVZXCI6Zj0+Zi5RYSsxOTAwLFwiJXpcIjpmPT57Zj1mLm9iO3ZhciBxPTA8PWY7Zj1NYXRoLmFicyhmKS82MDtyZXR1cm4ocT9cIitcIjpcIi1cIikrU3RyaW5nKFwiMDAwMFwiKyhmLzYwKjEwMCtmJTYwKSkuc2xpY2UoLTQpfSxcIiVaXCI6Zj0+Zi5yYixcIiUlXCI6KCk9PlwiJVwifTtjPWMucmVwbGFjZSgvJSUvZyxcblwiXFx4MDBcXHgwMFwiKTtmb3IoeSBpbiB2KWMuaW5jbHVkZXMoeSkmJihjPWMucmVwbGFjZShuZXcgUmVnRXhwKHksXCJnXCIpLHZbeV0oZSkpKTtjPWMucmVwbGFjZSgvXFwwXFwwL2csXCIlXCIpO3k9UmIoYyk7aWYoeS5sZW5ndGg+YilyZXR1cm4gMDtTYih5LGEpO3JldHVybiB5Lmxlbmd0aC0xfVYuVmEoKTtcbnZhciBVYj1bbnVsbCxMYSxNYSxYYSxaYSwkYSxkYixlYixmYixnYixoYixpYixqYixrYixsYixtYixuYix0Yix1YixGYixHYixIYixMYixNYixPYl0sWGI9e2I6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDsobmV3IFVhKGEpKS5WYShiPj4+MCxjPj4+MCk7VmE9YTtXYSsrO3Rocm93IFZhO30sTjpmdW5jdGlvbihhKXtWYihhPj4+MCwhQSwxLCFrYSwxMzEwNzIsITEpO1YuWWEoKX0sajpmdW5jdGlvbihhKXthPj4+PTA7RD9wb3N0TWVzc2FnZSh7Y21kOlwiY2xlYW51cFRocmVhZFwiLHRocmVhZDphfSk6R2EoYSl9LEk6WWEsaDpaYSxUOiRhLEQ6ZGIsRjplYixVOmZiLFI6Z2IsSjpoYixROmliLG46amIsRTprYixCOmxiLFM6bWIsQzpuYixxOigpPT4hMCx6OmZ1bmN0aW9uKGEsYil7YT4+Pj0wO2E9PWI+Pj4wP3NldFRpbWVvdXQoKCk9PlkoKSk6RD9wb3N0TWVzc2FnZSh7dGFyZ2V0VGhyZWFkOmEsY21kOlwiY2hlY2tNYWlsYm94XCJ9KTooYT1WLkxhW2FdKSYmYS5wb3N0TWVzc2FnZSh7Y21kOlwiY2hlY2tNYWlsYm94XCJ9KX0sXG5MOmZ1bmN0aW9uKCl7cmV0dXJuLTF9LE06cGIscDpmdW5jdGlvbihhKXtCJiZWLkxhW2E+Pj4wXS5yZWYoKX0sdDpmdW5jdGlvbihhLGIsYyl7YT1iKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFhPyhhPj4+MCkrNDI5NDk2NzI5NipiOk5hTjtjPj4+PTA7YT1uZXcgRGF0ZSgxRTMqYSk7cCgpW2M+PjI+Pj4wXT1hLmdldFVUQ1NlY29uZHMoKTtwKClbYys0Pj4yPj4+MF09YS5nZXRVVENNaW51dGVzKCk7cCgpW2MrOD4+Mj4+PjBdPWEuZ2V0VVRDSG91cnMoKTtwKClbYysxMj4+Mj4+PjBdPWEuZ2V0VVRDRGF0ZSgpO3AoKVtjKzE2Pj4yPj4+MF09YS5nZXRVVENNb250aCgpO3AoKVtjKzIwPj4yPj4+MF09YS5nZXRVVENGdWxsWWVhcigpLTE5MDA7cCgpW2MrMjQ+PjI+Pj4wXT1hLmdldFVUQ0RheSgpO2E9KGEuZ2V0VGltZSgpLURhdGUuVVRDKGEuZ2V0VVRDRnVsbFllYXIoKSwwLDEsMCwwLDAsMCkpLzg2NEU1fDA7cCgpW2MrMjg+PjI+Pj4wXT1hfSx1OmZ1bmN0aW9uKGEsYixjKXthPWIrXG4yMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO3AoKVtjPj4yPj4+MF09YS5nZXRTZWNvbmRzKCk7cCgpW2MrND4+Mj4+PjBdPWEuZ2V0TWludXRlcygpO3AoKVtjKzg+PjI+Pj4wXT1hLmdldEhvdXJzKCk7cCgpW2MrMTI+PjI+Pj4wXT1hLmdldERhdGUoKTtwKClbYysxNj4+Mj4+PjBdPWEuZ2V0TW9udGgoKTtwKClbYysyMD4+Mj4+PjBdPWEuZ2V0RnVsbFllYXIoKS0xOTAwO3AoKVtjKzI0Pj4yPj4+MF09YS5nZXREYXkoKTtiPShaKGEuZ2V0RnVsbFllYXIoKSk/cmI6c2IpW2EuZ2V0TW9udGgoKV0rYS5nZXREYXRlKCktMXwwO3AoKVtjKzI4Pj4yPj4+MF09YjtwKClbYyszNj4+Mj4+PjBdPS0oNjAqYS5nZXRUaW1lem9uZU9mZnNldCgpKTtiPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgZT0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5hPShiIT1lJiZhLmdldFRpbWV6b25lT2Zmc2V0KCk9PU1hdGgubWluKGUsYikpfDA7cCgpW2MrMzI+PjI+Pj4wXT1hfSx2OmZ1bmN0aW9uKGEpe2E+Pj49MDt2YXIgYj1uZXcgRGF0ZShwKClbYSsyMD4+Mj4+PjBdKzE5MDAscCgpW2ErMTY+PjI+Pj4wXSxwKClbYSsxMj4+Mj4+PjBdLHAoKVthKzg+PjI+Pj4wXSxwKClbYSs0Pj4yPj4+MF0scCgpW2E+PjI+Pj4wXSwwKSxjPXAoKVthKzMyPj4yPj4+MF0sZT1iLmdldFRpbWV6b25lT2Zmc2V0KCksaD0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDYsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksZz0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksaz1NYXRoLm1pbihnLGgpOzA+Yz9wKClbYSszMj4+Mj4+PjBdPU51bWJlcihoIT1nJiZrPT1lKTowPGMhPShrPT1lKSYmKGg9TWF0aC5tYXgoZyxoKSxiLnNldFRpbWUoYi5nZXRUaW1lKCkrNkU0KigoMDxjP2s6aCktZSkpKTtwKClbYSsyND4+Mj4+PlxuMF09Yi5nZXREYXkoKTtjPShaKGIuZ2V0RnVsbFllYXIoKSk/cmI6c2IpW2IuZ2V0TW9udGgoKV0rYi5nZXREYXRlKCktMXwwO3AoKVthKzI4Pj4yPj4+MF09YztwKClbYT4+Mj4+PjBdPWIuZ2V0U2Vjb25kcygpO3AoKVthKzQ+PjI+Pj4wXT1iLmdldE1pbnV0ZXMoKTtwKClbYSs4Pj4yPj4+MF09Yi5nZXRIb3VycygpO3AoKVthKzEyPj4yPj4+MF09Yi5nZXREYXRlKCk7cCgpW2ErMTY+PjI+Pj4wXT1iLmdldE1vbnRoKCk7cCgpW2ErMjA+PjI+Pj4wXT1iLmdldFllYXIoKTthPWIuZ2V0VGltZSgpLzFFMztyZXR1cm4gV2IoKFQ9YSwxPD0rTWF0aC5hYnMoVCk/MDxUPytNYXRoLmZsb29yKFQvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoVC0rKH5+VD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCkpLGE+Pj4wfSxyOnRiLHM6dWIseTpmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZSh2KXtyZXR1cm4odj12LnRvVGltZVN0cmluZygpLm1hdGNoKC9cXCgoW0EtWmEteiBdKylcXCkkLykpP1xudlsxXTpcIkdNVFwifWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO3ZhciBoPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxnPW5ldyBEYXRlKGgsMCwxKSxrPW5ldyBEYXRlKGgsNiwxKTtoPWcuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgdD1rLmdldFRpbWV6b25lT2Zmc2V0KCksQz1NYXRoLm1heChoLHQpO3IoKVthPj4yPj4+MF09NjAqQztwKClbYj4+Mj4+PjBdPU51bWJlcihoIT10KTthPWUoZyk7Yj1lKGspO2E9d2IoYSk7Yj13YihiKTt0PGg/KHIoKVtjPj4yPj4+MF09YSxyKClbYys0Pj4yPj4+MF09Yik6KHIoKVtjPj4yPj4+MF09YixyKClbYys0Pj4yPj4+MF09YSl9LGM6KCk9PntLKFwiXCIpfSxrOmZ1bmN0aW9uKCl7fSxpOmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LG86KCk9Pnt3YSs9MTt0aHJvd1widW53aW5kXCI7fSxBOmZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5MDE3NjB9LGU6KCk9PnBlcmZvcm1hbmNlLnRpbWVPcmlnaW4rcGVyZm9ybWFuY2Uubm93KCksZjpmdW5jdGlvbigpe3JldHVybiBCP1xucmVxdWlyZShcIm9zXCIpLmNwdXMoKS5sZW5ndGg6bmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3l9LEs6ZnVuY3Rpb24oYSxiLGMsZSl7Vi52Yj1iPj4+MDtCYi5sZW5ndGg9YztiPWU+Pj4wPj4zO2ZvcihlPTA7ZTxjO2UrKylCYltlXT1lYSgpW2IrZT4+PjBdO3JldHVybiBVYlthXS5hcHBseShudWxsLEJiKX0seDpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9bigpLmxlbmd0aDtpZihhPD1ifHw0Mjk0OTAxNzYwPGEpcmV0dXJuITE7Zm9yKHZhciBjPTE7ND49YztjKj0yKXt2YXIgZT1iKigxKy4yL2MpO2U9TWF0aC5taW4oZSxhKzEwMDY2MzI5Nik7dmFyIGg9TWF0aDtlPU1hdGgubWF4KGEsZSk7YTp7aD1oLm1pbi5jYWxsKGgsNDI5NDkwMTc2MCxlKyg2NTUzNi1lJTY1NTM2KSU2NTUzNiktZC5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2O3RyeXtkLmdyb3coaCk7bSgpO3ZhciBnPTE7YnJlYWsgYX1jYXRjaChrKXt9Zz12b2lkIDB9aWYoZylyZXR1cm4hMH1yZXR1cm4hMX0sXG5POkZiLFA6R2IsSDpOYSxnOkhiLG06TGIsdzpNYixsOk9iLGE6ZHx8dy53YXNtTWVtb3J5LEc6VGIsZDpmdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gVGIoYT4+PjAsYj4+PjAsYz4+PjAsZT4+PjApfX07KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjLGUpe2M9Yy5leHBvcnRzO0w9Yz1ZYihjKTtWLlphLnB1c2goTC55YSk7c2E9TC56YTt1YS51bnNoaWZ0KEwuVik7cmE9ZTt6YSgpO3JldHVybiBjfXZhciBiPXthOlhifTt5YSgpO2lmKHcuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gdy5pbnN0YW50aWF0ZVdhc20oYixhKX1jYXRjaChjKXtJKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIrYykseChjKX1FYShiLGZ1bmN0aW9uKGMpe2EoYy5pbnN0YW5jZSxjLm1vZHVsZSl9KS5jYXRjaCh4KTtyZXR1cm57fX0pKCk7dy5fT3J0SW5pdD0oYSxiKT0+KHcuX09ydEluaXQ9TC5XKShhLGIpO1xudy5fT3J0R2V0TGFzdEVycm9yPShhLGIpPT4ody5fT3J0R2V0TGFzdEVycm9yPUwuWCkoYSxiKTt3Ll9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz0oYSxiLGMsZSxoLGcsayx0LEMsdik9Pih3Ll9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz1MLlkpKGEsYixjLGUsaCxnLGssdCxDLHYpO3cuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyPShhLGIpPT4ody5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9TC5aKShhLGIpO3cuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZT0oYSxiLGMpPT4ody5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlPUwuXykoYSxiLGMpO3cuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeT0oYSxiLGMpPT4ody5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PUwuJCkoYSxiLGMpO3cuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucz1hPT4ody5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPUwuYWEpKGEpO1xudy5fT3J0Q3JlYXRlU2Vzc2lvbj0oYSxiLGMpPT4ody5fT3J0Q3JlYXRlU2Vzc2lvbj1MLmJhKShhLGIsYyk7dy5fT3J0UmVsZWFzZVNlc3Npb249YT0+KHcuX09ydFJlbGVhc2VTZXNzaW9uPUwuY2EpKGEpO3cuX09ydEdldElucHV0T3V0cHV0Q291bnQ9KGEsYixjKT0+KHcuX09ydEdldElucHV0T3V0cHV0Q291bnQ9TC5kYSkoYSxiLGMpO3cuX09ydEdldElucHV0TmFtZT0oYSxiKT0+KHcuX09ydEdldElucHV0TmFtZT1MLmVhKShhLGIpO3cuX09ydEdldE91dHB1dE5hbWU9KGEsYik9Pih3Ll9PcnRHZXRPdXRwdXROYW1lPUwuZmEpKGEsYik7dy5fT3J0RnJlZT1hPT4ody5fT3J0RnJlZT1MLmdhKShhKTt3Ll9PcnRDcmVhdGVUZW5zb3I9KGEsYixjLGUsaCxnKT0+KHcuX09ydENyZWF0ZVRlbnNvcj1MLmhhKShhLGIsYyxlLGgsZyk7dy5fT3J0R2V0VGVuc29yRGF0YT0oYSxiLGMsZSxoKT0+KHcuX09ydEdldFRlbnNvckRhdGE9TC5pYSkoYSxiLGMsZSxoKTtcbncuX09ydFJlbGVhc2VUZW5zb3I9YT0+KHcuX09ydFJlbGVhc2VUZW5zb3I9TC5qYSkoYSk7dy5fT3J0Q3JlYXRlUnVuT3B0aW9ucz0oYSxiLGMsZSk9Pih3Ll9PcnRDcmVhdGVSdW5PcHRpb25zPUwua2EpKGEsYixjLGUpO3cuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PShhLGIsYyk9Pih3Ll9PcnRBZGRSdW5Db25maWdFbnRyeT1MLmxhKShhLGIsYyk7dy5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9YT0+KHcuX09ydFJlbGVhc2VSdW5PcHRpb25zPUwubWEpKGEpO3cuX09ydENyZWF0ZUJpbmRpbmc9YT0+KHcuX09ydENyZWF0ZUJpbmRpbmc9TC5uYSkoYSk7dy5fT3J0QmluZElucHV0PShhLGIsYyk9Pih3Ll9PcnRCaW5kSW5wdXQ9TC5vYSkoYSxiLGMpO3cuX09ydEJpbmRPdXRwdXQ9KGEsYixjLGUpPT4ody5fT3J0QmluZE91dHB1dD1MLnBhKShhLGIsYyxlKTt3Ll9PcnRDbGVhckJvdW5kT3V0cHV0cz1hPT4ody5fT3J0Q2xlYXJCb3VuZE91dHB1dHM9TC5xYSkoYSk7XG53Ll9PcnRSZWxlYXNlQmluZGluZz1hPT4ody5fT3J0UmVsZWFzZUJpbmRpbmc9TC5yYSkoYSk7dy5fT3J0UnVuV2l0aEJpbmRpbmc9KGEsYixjLGUsaCk9Pih3Ll9PcnRSdW5XaXRoQmluZGluZz1MLnNhKShhLGIsYyxlLGgpO3cuX09ydFJ1bj0oYSxiLGMsZSxoLGcsayx0KT0+KHcuX09ydFJ1bj1MLnRhKShhLGIsYyxlLGgsZyxrLHQpO3cuX09ydEVuZFByb2ZpbGluZz1hPT4ody5fT3J0RW5kUHJvZmlsaW5nPUwudWEpKGEpO3ZhciBYPXcuX3B0aHJlYWRfc2VsZj0oKT0+KFg9dy5fcHRocmVhZF9zZWxmPUwudmEpKCksdmI9dy5fbWFsbG9jPWE9Pih2Yj13Ll9tYWxsb2M9TC53YSkoYSk7dy5fZnJlZT1hPT4ody5fZnJlZT1MLnhhKShhKTt3Ll9fZW1zY3JpcHRlbl90bHNfaW5pdD0oKT0+KHcuX19lbXNjcmlwdGVuX3Rsc19pbml0PUwueWEpKCk7XG52YXIgVmI9dy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXQ9KGEsYixjLGUsaCxnKT0+KFZiPXcuX19lbXNjcmlwdGVuX3RocmVhZF9pbml0PUwuQWEpKGEsYixjLGUsaCxnKTt3Ll9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZD0oKT0+KHcuX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkPUwuQmEpKCk7dmFyIEFiPShhLGIsYyxlKT0+KEFiPUwuQ2EpKGEsYixjLGUpLE9hPWE9PihPYT1MLkRhKShhKSxUYT13Ll9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdD1hPT4oVGE9dy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQ9TC5FYSkoYSkscWI9dy5fX2Vtc2NyaXB0ZW5fY2hlY2tfbWFpbGJveD0oKT0+KHFiPXcuX19lbXNjcmlwdGVuX2NoZWNrX21haWxib3g9TC5GYSkoKSxXYj1hPT4oV2I9TC5HYSkoYSksUWE9KGEsYik9PihRYT1MLkhhKShhLGIpLHhiPSgpPT4oeGI9TC5JYSkoKSxSYT1hPT4oUmE9TC5KYSkoYSksemI9YT0+KHpiPUwuS2EpKGEpO1xuZnVuY3Rpb24gWWIoYSl7YT1PYmplY3QuYXNzaWduKHt9LGEpO3ZhciBiPWU9PigpPT5lKCk+Pj4wLGM9ZT0+aD0+ZShoKT4+PjA7YS5fX2Vycm5vX2xvY2F0aW9uPWIoYS5fX2Vycm5vX2xvY2F0aW9uKTthLnB0aHJlYWRfc2VsZj1iKGEucHRocmVhZF9zZWxmKTthLm1hbGxvYz1jKGEubWFsbG9jKTthLnN0YWNrU2F2ZT1iKGEuc3RhY2tTYXZlKTthLnN0YWNrQWxsb2M9YyhhLnN0YWNrQWxsb2MpO3JldHVybiBhfXcua2VlcFJ1bnRpbWVBbGl2ZT1QO3cud2FzbU1lbW9yeT1kO3cuc3RhY2tBbGxvYz16Yjt3LnN0YWNrU2F2ZT14Yjt3LnN0YWNrUmVzdG9yZT1SYTt3LlVURjhUb1N0cmluZz1LYTt3LnN0cmluZ1RvVVRGOD1jYjt3Lmxlbmd0aEJ5dGVzVVRGOD1hYjt3LkV4aXRTdGF0dXM9VTt3LlBUaHJlYWQ9Vjt2YXIgWmI7Uj1mdW5jdGlvbiAkYigpe1pifHxhYygpO1pifHwoUj0kYil9O1xuZnVuY3Rpb24gYWMoKXtmdW5jdGlvbiBhKCl7aWYoIVpiJiYoWmI9ITAsdy5jYWxsZWRSdW49ITAsIU0pKXtEfHxQYSh1YSk7aGEodyk7aWYody5vblJ1bnRpbWVJbml0aWFsaXplZCl3Lm9uUnVudGltZUluaXRpYWxpemVkKCk7aWYoIUQpe2lmKHcucG9zdFJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2Ygdy5wb3N0UnVuJiYody5wb3N0UnVuPVt3LnBvc3RSdW5dKTt3LnBvc3RSdW4ubGVuZ3RoOyl7dmFyIGI9dy5wb3N0UnVuLnNoaWZ0KCk7dmEudW5zaGlmdChiKX1QYSh2YSl9fX1pZighKDA8USkpaWYoRCloYSh3KSxEfHxQYSh1YSksc3RhcnRXb3JrZXIodyk7ZWxzZXtpZih3LnByZVJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2Ygdy5wcmVSdW4mJih3LnByZVJ1bj1bdy5wcmVSdW5dKTt3LnByZVJ1bi5sZW5ndGg7KXRhLnVuc2hpZnQody5wcmVSdW4uc2hpZnQoKSk7UGEodGEpOzA8UXx8KHcuc2V0U3RhdHVzPyh3LnNldFN0YXR1cyhcIlJ1bm5pbmcuLi5cIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3LnNldFN0YXR1cyhcIlwiKX0sXG4xKTthKCl9LDEpKTphKCkpfX1pZih3LnByZUluaXQpZm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIHcucHJlSW5pdCYmKHcucHJlSW5pdD1bdy5wcmVJbml0XSk7MDx3LnByZUluaXQubGVuZ3RoOyl3LnByZUluaXQucG9wKCkoKTthYygpO1xuXG5cbiAgcmV0dXJuIG1vZHVsZUFyZy5yZWFkeVxufVxuXG4pO1xufSkoKTtcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG4gIG1vZHVsZS5leHBvcnRzID0gb3J0V2FzbVRocmVhZGVkO1xuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxuICBkZWZpbmUoW10sICgpID0+IG9ydFdhc21UaHJlYWRlZCk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7dmFyIE1vZHVsZT17fTt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PVwib2JqZWN0XCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PVwic3RyaW5nXCI7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7dmFyIG5vZGVXb3JrZXJUaHJlYWRzPXJlcXVpcmUoXCJ3b3JrZXJfdGhyZWFkc1wiKTt2YXIgcGFyZW50UG9ydD1ub2RlV29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0O3BhcmVudFBvcnQub24oXCJtZXNzYWdlXCIsZGF0YT0+b25tZXNzYWdlKHtkYXRhOmRhdGF9KSk7dmFyIGZzPXJlcXVpcmUoXCJmc1wiKTtPYmplY3QuYXNzaWduKGdsb2JhbCx7c2VsZjpnbG9iYWwscmVxdWlyZTpyZXF1aXJlLE1vZHVsZTpNb2R1bGUsbG9jYXRpb246e2hyZWY6X19maWxlbmFtZX0sV29ya2VyOm5vZGVXb3JrZXJUaHJlYWRzLldvcmtlcixpbXBvcnRTY3JpcHRzOmY9PigwLGV2YWwpKGZzLnJlYWRGaWxlU3luYyhmLFwidXRmOFwiKStcIi8vIyBzb3VyY2VVUkw9XCIrZikscG9zdE1lc3NhZ2U6bXNnPT5wYXJlbnRQb3J0LnBvc3RNZXNzYWdlKG1zZykscGVyZm9ybWFuY2U6Z2xvYmFsLnBlcmZvcm1hbmNlfHx7bm93OkRhdGUubm93fX0pfXZhciBpbml0aWFsaXplZEpTPWZhbHNlO2Z1bmN0aW9uIHRocmVhZFByaW50RXJyKCl7dmFyIHRleHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtpZihFTlZJUk9OTUVOVF9JU19OT0RFKXtmcy53cml0ZVN5bmMoMix0ZXh0K1wiXFxuXCIpO3JldHVybn1jb25zb2xlLmVycm9yKHRleHQpfWZ1bmN0aW9uIHRocmVhZEFsZXJ0KCl7dmFyIHRleHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtwb3N0TWVzc2FnZSh7Y21kOlwiYWxlcnRcIix0ZXh0OnRleHQsdGhyZWFkSWQ6TW9kdWxlW1wiX3B0aHJlYWRfc2VsZlwiXSgpfSl9dmFyIGVycj10aHJlYWRQcmludEVycjtzZWxmLmFsZXJ0PXRocmVhZEFsZXJ0O01vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXT0oaW5mbyxyZWNlaXZlSW5zdGFuY2UpPT57dmFyIG1vZHVsZT1Nb2R1bGVbXCJ3YXNtTW9kdWxlXCJdO01vZHVsZVtcIndhc21Nb2R1bGVcIl09bnVsbDt2YXIgaW5zdGFuY2U9bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSxpbmZvKTtyZXR1cm4gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlKX07c2VsZi5vbnVuaGFuZGxlZHJlamVjdGlvbj1lPT57dGhyb3cgZS5yZWFzb24/P2V9O2Z1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZSl7dHJ5e2lmKGUuZGF0YS5jbWQ9PT1cImxvYWRcIil7bGV0IG1lc3NhZ2VRdWV1ZT1bXTtzZWxmLm9ubWVzc2FnZT1lPT5tZXNzYWdlUXVldWUucHVzaChlKTtzZWxmLnN0YXJ0V29ya2VyPWluc3RhbmNlPT57TW9kdWxlPWluc3RhbmNlO3Bvc3RNZXNzYWdlKHtcImNtZFwiOlwibG9hZGVkXCJ9KTtmb3IobGV0IG1zZyBvZiBtZXNzYWdlUXVldWUpe2hhbmRsZU1lc3NhZ2UobXNnKX1zZWxmLm9ubWVzc2FnZT1oYW5kbGVNZXNzYWdlfTtNb2R1bGVbXCJ3YXNtTW9kdWxlXCJdPWUuZGF0YS53YXNtTW9kdWxlO2Zvcihjb25zdCBoYW5kbGVyIG9mIGUuZGF0YS5oYW5kbGVycyl7TW9kdWxlW2hhbmRsZXJdPSguLi5hcmdzKT0+e3Bvc3RNZXNzYWdlKHtjbWQ6XCJjYWxsSGFuZGxlclwiLGhhbmRsZXI6aGFuZGxlcixhcmdzOmFyZ3N9KX19TW9kdWxlW1wid2FzbU1lbW9yeVwiXT1lLmRhdGEud2FzbU1lbW9yeTtNb2R1bGVbXCJidWZmZXJcIl09TW9kdWxlW1wid2FzbU1lbW9yeVwiXS5idWZmZXI7TW9kdWxlW1wiRU5WSVJPTk1FTlRfSVNfUFRIUkVBRFwiXT10cnVlO2lmKHR5cGVvZiBlLmRhdGEudXJsT3JCbG9iPT1cInN0cmluZ1wiKXtpbXBvcnRTY3JpcHRzKGUuZGF0YS51cmxPckJsb2IpfWVsc2V7dmFyIG9iamVjdFVybD1VUkwuY3JlYXRlT2JqZWN0VVJMKGUuZGF0YS51cmxPckJsb2IpO2ltcG9ydFNjcmlwdHMob2JqZWN0VXJsKTtVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCl9b3J0V2FzbVRocmVhZGVkKE1vZHVsZSl9ZWxzZSBpZihlLmRhdGEuY21kPT09XCJydW5cIil7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9pbml0XCJdKGUuZGF0YS5wdGhyZWFkX3B0ciwvKmlzTWFpbkJyb3dzZXJUaHJlYWQ9Ki8wLC8qaXNNYWluUnVudGltZVRocmVhZD0qLzAsLypjYW5CbG9jaz0qLzEpO01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfbWFpbGJveF9hd2FpdFwiXShlLmRhdGEucHRocmVhZF9wdHIpO01vZHVsZVtcImVzdGFibGlzaFN0YWNrU3BhY2VcIl0oKTtNb2R1bGVbXCJQVGhyZWFkXCJdLnJlY2VpdmVPYmplY3RUcmFuc2ZlcihlLmRhdGEpO01vZHVsZVtcIlBUaHJlYWRcIl0udGhyZWFkSW5pdFRMUygpO2lmKCFpbml0aWFsaXplZEpTKXtpbml0aWFsaXplZEpTPXRydWV9dHJ5e01vZHVsZVtcImludm9rZUVudHJ5UG9pbnRcIl0oZS5kYXRhLnN0YXJ0X3JvdXRpbmUsZS5kYXRhLmFyZyl9Y2F0Y2goZXgpe2lmKGV4IT1cInVud2luZFwiKXt0aHJvdyBleH19fWVsc2UgaWYoZS5kYXRhLmNtZD09PVwiY2FuY2VsXCIpe2lmKE1vZHVsZVtcIl9wdGhyZWFkX3NlbGZcIl0oKSl7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9leGl0XCJdKC0xKX19ZWxzZSBpZihlLmRhdGEudGFyZ2V0PT09XCJzZXRpbW1lZGlhdGVcIil7fWVsc2UgaWYoZS5kYXRhLmNtZD09PVwiY2hlY2tNYWlsYm94XCIpe2lmKGluaXRpYWxpemVkSlMpe01vZHVsZVtcImNoZWNrTWFpbGJveFwiXSgpfX1lbHNlIGlmKGUuZGF0YS5jbWQpe2VycihcIndvcmtlci5qcyByZWNlaXZlZCB1bmtub3duIGNvbW1hbmQgXCIrZS5kYXRhLmNtZCk7ZXJyKGUuZGF0YSl9fWNhdGNoKGV4KXtpZihNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWRcIl0pe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZFwiXSgpfXRocm93IGV4fX1zZWxmLm9ubWVzc2FnZT1oYW5kbGVNZXNzYWdlO1xuIiwgImV4cG9ydCBjb25zdCBqb2luID0gdW5kZWZpbmVkOyIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtFbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7T3J0V2FzbU1vZHVsZX0gZnJvbSAnLi9iaW5kaW5nL29ydC13YXNtJztcbmltcG9ydCB7T3J0V2FzbVRocmVhZGVkTW9kdWxlfSBmcm9tICcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5sZXQgb3J0V2FzbUZhY3Rvcnk6IEVtc2NyaXB0ZW5Nb2R1bGVGYWN0b3J5PE9ydFdhc21Nb2R1bGU+O1xuXG5pZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORykge1xuICBvcnRXYXNtRmFjdG9yeSA9IHJlcXVpcmUoJy4vYmluZGluZy9vcnQtdHJhaW5pbmctd2FzbS1zaW1kLmpzJyk7XG59IGVsc2Uge1xuICBvcnRXYXNtRmFjdG9yeSA9XG4gICAgICBCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVID8gcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLmpzJykgOiByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tc2ltZC5qc2VwLmpzJyk7XG59XG5cbmNvbnN0IG9ydFdhc21GYWN0b3J5VGhyZWFkZWQ6IEVtc2NyaXB0ZW5Nb2R1bGVGYWN0b3J5PE9ydFdhc21Nb2R1bGU+ID0gIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCA/XG4gICAgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPyByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQuanMnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tc2ltZC10aHJlYWRlZC5qc2VwLmpzJykpIDpcbiAgICBvcnRXYXNtRmFjdG9yeTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG5sZXQgd2FzbTogT3J0V2FzbU1vZHVsZXx1bmRlZmluZWQ7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmxldCBpbml0aWFsaXppbmcgPSBmYWxzZTtcbmxldCBhYm9ydGVkID0gZmFsc2U7XG5cbmNvbnN0IGlzTXVsdGlUaHJlYWRTdXBwb3J0ZWQgPSAobnVtVGhyZWFkczogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIC8vIFdlYkFzc2VtYmx5IHRocmVhZHMgYXJlIHNldCB0byAxIChzaW5nbGUgdGhyZWFkKS5cbiAgaWYgKG51bVRocmVhZHMgPT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiAnU2hhcmVkQXJyYXlCdWZmZXInIGlzIG5vdCBhdmFpbGFibGUsIFdlYkFzc2VtYmx5IHRocmVhZHMgd2lsbCBub3Qgd29yay5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmICFzZWxmLmNyb3NzT3JpZ2luSXNvbGF0ZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2Vudi53YXNtLm51bVRocmVhZHMgaXMgc2V0IHRvICcgKyBudW1UaHJlYWRzICtcbiAgICAgICAgICAnLCBidXQgdGhpcyB3aWxsIG5vdCB3b3JrIHVubGVzcyB5b3UgZW5hYmxlIGNyb3NzT3JpZ2luSXNvbGF0ZWQgbW9kZS4gJyArXG4gICAgICAgICAgJ1NlZSBodHRwczovL3dlYi5kZXYvY3Jvc3Mtb3JpZ2luLWlzb2xhdGlvbi1ndWlkZS8gZm9yIG1vcmUgaW5mby4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb25ueHJ1bnRpbWUtd2ViIGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdGhyZWFkcyBpbiBOb2RlLmpzLlxuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdlbnYud2FzbS5udW1UaHJlYWRzIGlzIHNldCB0byAnICsgbnVtVGhyZWFkcyArXG4gICAgICAgICcsIGhvd2V2ZXIsIGN1cnJlbnRseSBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuICcgK1xuICAgICAgICAnUGxlYXNlIGNvbnNpZGVyIHVzaW5nIG9ubnhydW50aW1lLW5vZGUgZm9yIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHNjZW5hcmlvcy4nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGVzdCBmb3IgdHJhbnNmZXJhYmlsaXR5IG9mIFNBQnMgKGZvciBicm93c2Vycy4gbmVlZGVkIGZvciBGaXJlZm94KVxuICAgIC8vIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFtc2cvbW96aWxsYS5kZXYucGxhdGZvcm0vSUhrQlpsSEVUcEEvZHdzTU5jaFdFUUFKXG4gICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5ldyBNZXNzYWdlQ2hhbm5lbCgpLnBvcnQxLnBvc3RNZXNzYWdlKG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxKSk7XG4gICAgfVxuXG4gICAgLy8gVGVzdCBmb3IgV2ViQXNzZW1ibHkgdGhyZWFkcyBjYXBhYmlsaXR5IChmb3IgYm90aCBicm93c2VycyBhbmQgTm9kZS5qcylcbiAgICAvLyBUaGlzIHR5cGVkIGFycmF5IGlzIGEgV2ViQXNzZW1ibHkgcHJvZ3JhbSBjb250YWluaW5nIHRocmVhZGVkIGluc3RydWN0aW9ucy5cbiAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAgMCwgIDAsIDEsIDQsIDEsICA5NiwgMCwgICAwLCAgMywgMiwgMSwgIDAsIDUsXG4gICAgICA0LCAxLCAgMywgICAxLCAgIDEsIDEwLCAxMSwgMSwgOSwgMCwgNjUsIDAsICAyNTQsIDE2LCAyLCAwLCAyNiwgMTFcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGlzU2ltZFN1cHBvcnRlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBUZXN0IGZvciBXZWJBc3NlbWJseSBTSU1EIGNhcGFiaWxpdHkgKGZvciBib3RoIGJyb3dzZXJzIGFuZCBOb2RlLmpzKVxuICAgIC8vIFRoaXMgdHlwZWQgYXJyYXkgaXMgYSBXZWJBc3NlbWJseSBwcm9ncmFtIGNvbnRhaW5pbmcgU0lNRCBpbnN0cnVjdGlvbnMuXG5cbiAgICAvLyBUaGUgYmluYXJ5IGRhdGEgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBjb2RlIGJ5IHdhdDJ3YXNtOlxuICAgIC8vXG4gICAgLy8gKG1vZHVsZVxuICAgIC8vICAgKHR5cGUgJHQwIChmdW5jKSlcbiAgICAvLyAgIChmdW5jICRmMCAodHlwZSAkdDApXG4gICAgLy8gICAgIChkcm9wXG4gICAgLy8gICAgICAgKGkzMng0LmRvdF9pMTZ4OF9zXG4gICAgLy8gICAgICAgICAoaTh4MTYuc3BsYXRcbiAgICAvLyAgICAgICAgICAgKGkzMi5jb25zdCAwKSlcbiAgICAvLyAgICAgICAgICh2MTI4LmNvbnN0IGkzMng0IDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDApKSkpKVxuXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDAsICAgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCA0LCAxLCA5NiwgMCwgMCwgMywgMiwgMSwgMCwgMTAsIDMwLCAxLCAgIDI4LCAgMCwgNjUsIDAsXG4gICAgICAyNTMsIDE1LCAyNTMsIDEyLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAwLCAgMjUzLCAxODYsIDEsIDI2LCAxMVxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgZ2V0V2FzbUZpbGVOYW1lID0gKHVzZVNpbWQ6IGJvb2xlYW4sIHVzZVRocmVhZHM6IGJvb2xlYW4pID0+IHtcbiAgaWYgKHVzZVNpbWQpIHtcbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORykge1xuICAgICAgcmV0dXJuICdvcnQtdHJhaW5pbmctd2FzbS1zaW1kLndhc20nO1xuICAgIH1cbiAgICByZXR1cm4gdXNlVGhyZWFkcyA/ICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc20nIDogJ29ydC13YXNtLXNpbWQud2FzbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVzZVRocmVhZHMgPyAnb3J0LXdhc20tdGhyZWFkZWQud2FzbScgOiAnb3J0LXdhc20ud2FzbSc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplV2ViQXNzZW1ibHkgPSBhc3luYyhmbGFnczogRW52LldlYkFzc2VtYmx5RmxhZ3MpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGlmIChpbml0aWFsaXppbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGxlIGNhbGxzIHRvIFxcJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpXFwnIGRldGVjdGVkLicpO1xuICB9XG4gIGlmIChhYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcmV2aW91cyBjYWxsIHRvIFxcJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpXFwnIGZhaWxlZC4nKTtcbiAgfVxuXG4gIGluaXRpYWxpemluZyA9IHRydWU7XG5cbiAgLy8gd2FzbSBmbGFncyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZFxuICBjb25zdCB0aW1lb3V0ID0gZmxhZ3MuaW5pdFRpbWVvdXQhO1xuICBjb25zdCBudW1UaHJlYWRzID0gZmxhZ3MubnVtVGhyZWFkcyE7XG4gIGNvbnN0IHNpbWQgPSBmbGFncy5zaW1kITtcblxuICBjb25zdCB1c2VUaHJlYWRzID0gaXNNdWx0aVRocmVhZFN1cHBvcnRlZChudW1UaHJlYWRzKTtcbiAgY29uc3QgdXNlU2ltZCA9IHNpbWQgJiYgaXNTaW1kU3VwcG9ydGVkKCk7XG5cbiAgY29uc3Qgd2FzbVBhdGhzID0gZmxhZ3Mud2FzbVBhdGhzO1xuICBjb25zdCB3YXNtUHJlZml4T3ZlcnJpZGUgPSB0eXBlb2Ygd2FzbVBhdGhzID09PSAnc3RyaW5nJyA/IHdhc21QYXRocyA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgd2FzbUZpbGVOYW1lID0gZ2V0V2FzbUZpbGVOYW1lKHVzZVNpbWQsIHVzZVRocmVhZHMpO1xuICBjb25zdCB3YXNtUGF0aE92ZXJyaWRlID0gdHlwZW9mIHdhc21QYXRocyA9PT0gJ29iamVjdCcgPyB3YXNtUGF0aHNbd2FzbUZpbGVOYW1lXSA6IHVuZGVmaW5lZDtcblxuICBsZXQgaXNUaW1lb3V0ID0gZmFsc2U7XG5cbiAgY29uc3QgdGFza3M6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgLy8gcHJvbWlzZSBmb3IgdGltZW91dFxuICBpZiAodGltZW91dCA+IDApIHtcbiAgICB0YXNrcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgLy8gcHJvbWlzZSBmb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uXG4gIHRhc2tzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB1c2VUaHJlYWRzID8gb3J0V2FzbUZhY3RvcnlUaHJlYWRlZCA6IG9ydFdhc21GYWN0b3J5O1xuICAgIGNvbnN0IGNvbmZpZzogUGFydGlhbDxPcnRXYXNtTW9kdWxlPiA9IHtcbiAgICAgIGxvY2F0ZUZpbGU6IChmaWxlTmFtZTogc3RyaW5nLCBzY3JpcHREaXJlY3Rvcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCAmJiB1c2VUaHJlYWRzICYmIGZpbGVOYW1lLmVuZHNXaXRoKCcud29ya2VyLmpzJykgJiZcbiAgICAgICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLy8gVGhpcyByZXF1aXJlKCkgZnVuY3Rpb24gaXMgaGFuZGxlZCBieSBlc2J1aWxkIHBsdWdpbiB0byBsb2FkIGZpbGUgY29udGVudCBhcyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQud29ya2VyLmpzJylcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKCcud2FzbScpKSB7XG4gICAgICAgICAgaWYgKHdhc21QYXRoT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB3YXNtUGF0aE92ZXJyaWRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhc21QcmVmaXhPdmVycmlkZSA/PyBzY3JpcHREaXJlY3Rvcnk7XG5cbiAgICAgICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUpIHtcbiAgICAgICAgICAgIGlmICh3YXNtRmlsZU5hbWUgPT09ICdvcnQtd2FzbS1zaW1kLndhc20nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnb3J0LXdhc20tc2ltZC5qc2VwLndhc20nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNtRmlsZU5hbWUgPT09ICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc20nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC5qc2VwLndhc20nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcmVmaXggKyB3YXNtRmlsZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgZmlsZU5hbWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fVEhSRUFEICYmIHVzZVRocmVhZHMpIHtcbiAgICAgIGNvbmZpZy5udW1UaHJlYWRzID0gbnVtVGhyZWFkcztcbiAgICAgIGlmICh0eXBlb2YgQmxvYiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uZmlnLm1haW5TY3JpcHRVcmxPckJsb2IgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnb3J0LXdhc20tdGhyZWFkZWQuanMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdFNvdXJjZUNvZGUgPSBgdmFyIG9ydFdhc21UaHJlYWRlZD0ke2ZhY3RvcnkudG9TdHJpbmcoKX07YDtcbiAgICAgICAgY29uZmlnLm1haW5TY3JpcHRVcmxPckJsb2IgPSBuZXcgQmxvYihbc2NyaXB0U291cmNlQ29kZV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZhY3RvcnkoY29uZmlnKS50aGVuKFxuICAgICAgICAvLyB3YXNtIG1vZHVsZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgbW9kdWxlID0+IHtcbiAgICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgd2FzbSA9IG1vZHVsZTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHdhc20gbW9kdWxlIGZhaWxlZCB0byBpbml0aWFsaXplXG4gICAgICAgICh3aGF0KSA9PiB7XG4gICAgICAgICAgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgcmVqZWN0KHdoYXQpO1xuICAgICAgICB9KTtcbiAgfSkpO1xuXG4gIGF3YWl0IFByb21pc2UucmFjZSh0YXNrcyk7XG5cbiAgaWYgKGlzVGltZW91dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2ViQXNzZW1ibHkgYmFja2VuZCBpbml0aWFsaXppbmcgZmFpbGVkIGR1ZSB0byB0aW1lb3V0OiAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEluc3RhbmNlID0gKCk6IE9ydFdhc21Nb2R1bGUgPT4ge1xuICBpZiAoaW5pdGlhbGl6ZWQgJiYgd2FzbSkge1xuICAgIHJldHVybiB3YXNtO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdXZWJBc3NlbWJseSBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3Bvc2UgPSAoKTogdm9pZCA9PiB7XG4gIGlmIChpbml0aWFsaXplZCAmJiAhaW5pdGlhbGl6aW5nICYmICFhYm9ydGVkKSB7XG4gICAgaW5pdGlhbGl6aW5nID0gdHJ1ZTtcblxuICAgICh3YXNtIGFzIE9ydFdhc21UaHJlYWRlZE1vZHVsZSkuUFRocmVhZD8udGVybWluYXRlQWxsVGhyZWFkcygpO1xuICAgIHdhc20gPSB1bmRlZmluZWQ7XG5cbiAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSB0cnVlO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5cbmV4cG9ydCBjb25zdCBhbGxvY1dhc21TdHJpbmcgPSAoZGF0YTogc3RyaW5nLCBhbGxvY3M6IG51bWJlcltdKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3QgZGF0YUxlbmd0aCA9IHdhc20ubGVuZ3RoQnl0ZXNVVEY4KGRhdGEpICsgMTtcbiAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20uX21hbGxvYyhkYXRhTGVuZ3RoKTtcbiAgd2FzbS5zdHJpbmdUb1VURjgoZGF0YSwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCk7XG4gIGFsbG9jcy5wdXNoKGRhdGFPZmZzZXQpO1xuXG4gIHJldHVybiBkYXRhT2Zmc2V0O1xufTtcblxuaW50ZXJmYWNlIEV4dHJhT3B0aW9uc0hhbmRsZXIge1xuICAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdGVFeHRyYU9wdGlvbnMgPVxuICAgIChvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJlZml4OiBzdHJpbmcsIHNlZW46IFdlYWtTZXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICAgICBoYW5kbGVyOiBFeHRyYU9wdGlvbnNIYW5kbGVyKTogdm9pZCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2Vlbi5oYXMob3B0aW9ucykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBpbiBvcHRpb25zJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vlbi5hZGQob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAocHJlZml4KSA/IHByZWZpeCArIGtleSA6IGtleTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lICsgJy4nLCBzZWVuLCBoYW5kbGVyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoYW5kbGVyKG5hbWUsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaGFuZGxlcihuYW1lLCAodmFsdWUpID8gJzEnIDogJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGhhbmRsZSBleHRyYSBjb25maWcgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbi8qKlxuICogY2hlY2sgd2ViIGFzc2VtYmx5IEFQSSdzIGxhc3QgZXJyb3IgYW5kIHRocm93IGVycm9yIGlmIGFueSBlcnJvciBvY2N1cnJlZC5cbiAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0xhc3RFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcmFtc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg4KTtcbiAgICB3YXNtLl9PcnRHZXRMYXN0RXJyb3IocGFyYW1zT2Zmc2V0LCBwYXJhbXNPZmZzZXQgKyA0KTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLkhFQVAzMltwYXJhbXNPZmZzZXQgLyA0XTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VQb2ludGVyID0gd2FzbS5IRUFQVTMyW3BhcmFtc09mZnNldCAvIDQgKyAxXTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2VQb2ludGVyID8gd2FzbS5VVEY4VG9TdHJpbmcoZXJyb3JNZXNzYWdlUG9pbnRlcikgOiAnJztcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gRVJST1JfQ09ERTogJHtlcnJvckNvZGV9LCBFUlJPUl9NRVNTQUdFOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yLCBpdGVyYXRlRXh0cmFPcHRpb25zfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgc2V0UnVuT3B0aW9ucyA9IChvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBbbnVtYmVyLCBudW1iZXJbXV0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICBjb25zdCBhbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgcnVuT3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zPy5sb2dTZXZlcml0eUxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA9IDI7ICAvLyBEZWZhdWx0IHRvIHdhcm5pbmdcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwpIHx8XG4gICAgICAgIG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA8IDAgfHwgb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmxvZ1ZlcmJvc2l0eUxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgPSAwOyAgLy8gRGVmYXVsdCB0byAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHZlcmJvc2l0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7b3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbH1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8udGVybWluYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMudGVybWluYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IHRhZ0RhdGFPZmZzZXQgPSAwO1xuICAgIGlmIChvcHRpb25zPy50YWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFnRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhvcHRpb25zLnRhZywgYWxsb2NzKTtcbiAgICB9XG5cbiAgICBydW5PcHRpb25zSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlUnVuT3B0aW9ucyhcbiAgICAgICAgcnVuT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsISwgcnVuT3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCEsICEhcnVuT3B0aW9ucy50ZXJtaW5hdGUhLCB0YWdEYXRhT2Zmc2V0KTtcbiAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIHJ1biBvcHRpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5leHRyYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKG9wdGlvbnMuZXh0cmEsICcnLCBuZXcgV2Vha1NldDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhrZXksIGFsbG9jcyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh2YWx1ZSwgYWxsb2NzKTtcblxuICAgICAgICBpZiAod2FzbS5fT3J0QWRkUnVuQ29uZmlnRW50cnkocnVuT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBydW4gY29uZmlnIGVudHJ5OiAke2tleX0gLSAke3ZhbHVlfS5gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtydW5PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5pbXBvcnQge2FsbG9jV2FzbVN0cmluZywgY2hlY2tMYXN0RXJyb3IsIGl0ZXJhdGVFeHRyYU9wdGlvbnN9IGZyb20gJy4vd2FzbS11dGlscyc7XG5cbmNvbnN0IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbCA9IChncmFwaE9wdGltaXphdGlvbkxldmVsOiBzdHJpbmd8dW5rbm93bik6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkge1xuICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2V4dGVuZGVkJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2FsbCc6XG4gICAgICByZXR1cm4gOTk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZ3JhcGggb3B0aW1pemF0aW9uIGxldmVsOiAke2dyYXBoT3B0aW1pemF0aW9uTGV2ZWx9YCk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEV4ZWN1dGlvbk1vZGUgPSAoZXhlY3V0aW9uTW9kZTogJ3NlcXVlbnRpYWwnfCdwYXJhbGxlbCcpOiBudW1iZXIgPT4ge1xuICBzd2l0Y2ggKGV4ZWN1dGlvbk1vZGUpIHtcbiAgICBjYXNlICdzZXF1ZW50aWFsJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ3BhcmFsbGVsJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGV4ZWN1dGlvbiBtb2RlOiAke2V4ZWN1dGlvbk1vZGV9YCk7XG4gIH1cbn07XG5cbmNvbnN0IGFwcGVuZERlZmF1bHRPcHRpb25zID0gKG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKCFvcHRpb25zLmV4dHJhKSB7XG4gICAgb3B0aW9ucy5leHRyYSA9IHt9O1xuICB9XG4gIGlmICghb3B0aW9ucy5leHRyYS5zZXNzaW9uKSB7XG4gICAgb3B0aW9ucy5leHRyYS5zZXNzaW9uID0ge307XG4gIH1cbiAgY29uc3Qgc2Vzc2lvbiA9IG9wdGlvbnMuZXh0cmEuc2Vzc2lvbiBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZiAoIXNlc3Npb24udXNlX29ydF9tb2RlbF9ieXRlc19kaXJlY3RseSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgICBzZXNzaW9uLnVzZV9vcnRfbW9kZWxfYnl0ZXNfZGlyZWN0bHkgPSAnMSc7XG4gIH1cblxuICAvLyBpZiB1c2luZyBKU0VQIHdpdGggV2ViR1BVLCBhbHdheXMgZGlzYWJsZSBtZW1vcnkgcGF0dGVyblxuICBpZiAob3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMgJiZcbiAgICAgIG9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzLnNvbWUoZXAgPT4gKHR5cGVvZiBlcCA9PT0gJ3N0cmluZycgPyBlcCA6IGVwLm5hbWUpID09PSAnd2ViZ3B1JykpIHtcbiAgICBvcHRpb25zLmVuYWJsZU1lbVBhdHRlcm4gPSBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2V0RXhlY3V0aW9uUHJvdmlkZXJzID1cbiAgICAoc2Vzc2lvbk9wdGlvbnNIYW5kbGU6IG51bWJlciwgZXhlY3V0aW9uUHJvdmlkZXJzOiByZWFkb25seSBJbmZlcmVuY2VTZXNzaW9uLkV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnW10sXG4gICAgIGFsbG9jczogbnVtYmVyW10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgZXAgb2YgZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICAgIGxldCBlcE5hbWUgPSB0eXBlb2YgZXAgPT09ICdzdHJpbmcnID8gZXAgOiBlcC5uYW1lO1xuXG4gICAgICAgIC8vIGNoZWNrIEVQIG5hbWVcbiAgICAgICAgc3dpdGNoIChlcE5hbWUpIHtcbiAgICAgICAgICBjYXNlICd3ZWJubic6XG4gICAgICAgICAgICBlcE5hbWUgPSAnV0VCTk4nO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd2Vibm5PcHRpb25zID0gZXAgYXMgSW5mZXJlbmNlU2Vzc2lvbi5XZWJOTkV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5kZXZpY2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnZGV2aWNlVHlwZScsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYm5uT3B0aW9ucy5kZXZpY2VUeXBlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ2RldmljZVR5cGUnIC0gJHt3ZWJubk9wdGlvbnMuZGV2aWNlVHlwZX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/Lm51bVRocmVhZHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbnVtVGhyZWFkcyA9IHdlYm5uT3B0aW9ucy5udW1UaHJlYWRzO1xuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGludmFsaWQgd2Vibm5PcHRpb25zLm51bVRocmVhZHMuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBudW1UaHJlYWRzICE9ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG51bVRocmVhZHMpIHx8IG51bVRocmVhZHMgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBudW1UaHJlYWRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnbnVtVGhyZWFkcycsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG51bVRocmVhZHMudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PVxuICAgICAgICAgICAgICAgICAgICAwKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdudW1UaHJlYWRzJyAtICR7d2Vibm5PcHRpb25zLm51bVRocmVhZHN9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5wb3dlclByZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKCdwb3dlclByZWZlcmVuY2UnLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ3Bvd2VyUHJlZmVyZW5jZScgLSAke3dlYm5uT3B0aW9ucy5wb3dlclByZWZlcmVuY2V9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2ViZ3B1JzpcbiAgICAgICAgICAgIGVwTmFtZSA9ICdKUyc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVwICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBjb25zdCB3ZWJncHVPcHRpb25zID0gZXAgYXMgSW5mZXJlbmNlU2Vzc2lvbi5XZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICAgICAgICAgICAgaWYgKHdlYmdwdU9wdGlvbnM/LnByZWZlcnJlZExheW91dCkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCAhPT0gJ05DSFcnICYmIHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0ICE9PSAnTkhXQycpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJlZmVycmVkTGF5b3V0IG11c3QgYmUgZWl0aGVyICdOQ0hXJyBvciAnTkhXQyc6ICR7d2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXR9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ3ByZWZlcnJlZExheW91dCcsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0LCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ3ByZWZlcnJlZExheW91dCcgLSAke3dlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0fS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3dhc20nOlxuICAgICAgICAgIGNhc2UgJ2NwdSc6XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGV4ZWN1dGlvbiBwcm92aWRlcjogJHtlcE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcE5hbWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGVwTmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyKHNlc3Npb25PcHRpb25zSGFuZGxlLCBlcE5hbWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBhcHBlbmQgZXhlY3V0aW9uIHByb3ZpZGVyOiAke2VwTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbk9wdGlvbnMgPSAob3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBbbnVtYmVyLCBudW1iZXJbXV0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgY29uc3QgYWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IHNlc3Npb25PcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgYXBwZW5kRGVmYXVsdE9wdGlvbnMoc2Vzc2lvbk9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCA9IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbChzZXNzaW9uT3B0aW9ucy5ncmFwaE9wdGltaXphdGlvbkxldmVsID8/ICdhbGwnKTtcbiAgICBjb25zdCBleGVjdXRpb25Nb2RlID0gZ2V0RXhlY3V0aW9uTW9kZShzZXNzaW9uT3B0aW9ucy5leGVjdXRpb25Nb2RlID8/ICdzZXF1ZW50aWFsJyk7XG4gICAgY29uc3QgbG9nSWREYXRhT2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIHNlc3Npb25PcHRpb25zLmxvZ0lkID09PSAnc3RyaW5nJyA/IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5sb2dJZCwgYWxsb2NzKSA6IDA7XG5cbiAgICBjb25zdCBsb2dTZXZlcml0eUxldmVsID0gc2Vzc2lvbk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA/PyAyOyAgLy8gRGVmYXVsdCB0byAyIC0gd2FybmluZ1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsb2dTZXZlcml0eUxldmVsKSB8fCBsb2dTZXZlcml0eUxldmVsIDwgMCB8fCBsb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtsb2dTZXZlcml0eUxldmVsfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ1ZlcmJvc2l0eUxldmVsID0gc2Vzc2lvbk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgPz8gMDsgIC8vIERlZmF1bHQgdG8gMCAtIHZlcmJvc2VcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobG9nVmVyYm9zaXR5TGV2ZWwpIHx8IGxvZ1ZlcmJvc2l0eUxldmVsIDwgMCB8fCBsb2dWZXJib3NpdHlMZXZlbCA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHZlcmJvc2l0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7bG9nVmVyYm9zaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW1pemVkTW9kZWxGaWxlUGF0aE9mZnNldCA9IHR5cGVvZiBzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoID09PSAnc3RyaW5nJyA/XG4gICAgICAgIGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoLCBhbGxvY3MpIDpcbiAgICAgICAgMDtcblxuICAgIHNlc3Npb25PcHRpb25zSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnMoXG4gICAgICAgIGdyYXBoT3B0aW1pemF0aW9uTGV2ZWwsICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlQ3B1TWVtQXJlbmEsICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlTWVtUGF0dGVybiwgZXhlY3V0aW9uTW9kZSxcbiAgICAgICAgISFzZXNzaW9uT3B0aW9ucy5lbmFibGVQcm9maWxpbmcsIDAsIGxvZ0lkRGF0YU9mZnNldCwgbG9nU2V2ZXJpdHlMZXZlbCwgbG9nVmVyYm9zaXR5TGV2ZWwsXG4gICAgICAgIG9wdGltaXplZE1vZGVsRmlsZVBhdGhPZmZzZXQpO1xuICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIHNlc3Npb24gb3B0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICBzZXRFeGVjdXRpb25Qcm92aWRlcnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIHNlc3Npb25PcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycywgYWxsb2NzKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbmFibGVHcmFwaENhcHR1cmUgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWU6ICR7c2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlfWApO1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnZW5hYmxlR3JhcGhDYXB0dXJlJywgYWxsb2NzKTtcbiAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmUudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdlbmFibGVHcmFwaENhcHR1cmUnIC0gJHtzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmV9LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2Vzc2lvbk9wdGlvbnMuZnJlZURpbWVuc2lvbk92ZXJyaWRlcykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nOiAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgdmFsdWUgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcobmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKHdhc20uX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZShzZXNzaW9uT3B0aW9uc0hhbmRsZSwgbmFtZU9mZnNldCwgdmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlOiAke25hbWV9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXh0cmEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhzZXNzaW9uT3B0aW9ucy5leHRyYSwgJycsIG5ldyBXZWFrU2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuXG4gICAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbi8vIGEgZHVtbXkgdHlwZSBkZWNsYXJhdGlvbiBmb3IgRmxvYXQxNkFycmF5IGluIGNhc2UgYW55IHBvbHlmaWxsIGlzIGF2YWlsYWJsZS5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBGbG9hdDE2QXJyYXk6IGFueTtcbn1cblxuLy8gVGhpcyBmaWxlIGluY2x1ZGVzIGNvbW1vbiBkZWZpbml0aW9ucy4gVGhleSBkbyBOT1QgaGF2ZSBkZXBlbmRlbmN5IG9uIHRoZSBXZWJBc3NlbWJseSBpbnN0YW5jZS5cblxuLyoqXG4gKiBDb3BpZWQgZnJvbSBPTk5YIGRlZmluaXRpb24uIFVzZSB0aGlzIHRvIGRyb3AgZGVwZW5kZW5jeSAnb25ueF9wcm90bycgdG8gZGVjcmVhc2UgY29tcGlsZWQgLmpzIGZpbGUgc2l6ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGF0YVR5cGUge1xuICB1bmRlZmluZWQgPSAwLFxuICBmbG9hdCA9IDEsXG4gIHVpbnQ4ID0gMixcbiAgaW50OCA9IDMsXG4gIHVpbnQxNiA9IDQsXG4gIGludDE2ID0gNSxcbiAgaW50MzIgPSA2LFxuICBpbnQ2NCA9IDcsXG4gIHN0cmluZyA9IDgsXG4gIGJvb2wgPSA5LFxuICBmbG9hdDE2ID0gMTAsXG4gIGRvdWJsZSA9IDExLFxuICB1aW50MzIgPSAxMixcbiAgdWludDY0ID0gMTMsXG4gIGNvbXBsZXg2NCA9IDE0LFxuICBjb21wbGV4MTI4ID0gMTUsXG4gIGJmbG9hdDE2ID0gMTZcbn1cblxuLyoqXG4gKiBNYXAgc3RyaW5nIHRlbnNvciBkYXRhIHRvIGVudW0gdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtID0gKHR5cGU6IHN0cmluZyk6IERhdGFUeXBlID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW50OCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50ODtcbiAgICBjYXNlICd1aW50OCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDg7XG4gICAgY2FzZSAnYm9vbCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuYm9vbDtcbiAgICBjYXNlICdpbnQxNic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50MTY7XG4gICAgY2FzZSAndWludDE2JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS51aW50MTY7XG4gICAgY2FzZSAnaW50MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDMyO1xuICAgIGNhc2UgJ3VpbnQzMic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDMyO1xuICAgIGNhc2UgJ2Zsb2F0MTYnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmZsb2F0MTY7XG4gICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuZmxvYXQ7XG4gICAgY2FzZSAnZmxvYXQ2NCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuZG91YmxlO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuc3RyaW5nO1xuICAgIGNhc2UgJ2ludDY0JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5pbnQ2NDtcbiAgICBjYXNlICd1aW50NjQnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQ2NDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIE1hcCBlbnVtIHZhbHVlIHRvIHN0cmluZyB0ZW5zb3IgZGF0YVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcgPSAodHlwZVByb3RvOiBEYXRhVHlwZSk6IFRlbnNvci5UeXBlID0+IHtcbiAgc3dpdGNoICh0eXBlUHJvdG8pIHtcbiAgICBjYXNlIERhdGFUeXBlLmludDg6XG4gICAgICByZXR1cm4gJ2ludDgnO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDg6XG4gICAgICByZXR1cm4gJ3VpbnQ4JztcbiAgICBjYXNlIERhdGFUeXBlLmJvb2w6XG4gICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50MTY6XG4gICAgICByZXR1cm4gJ2ludDE2JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQxNjpcbiAgICAgIHJldHVybiAndWludDE2JztcbiAgICBjYXNlIERhdGFUeXBlLmludDMyOlxuICAgICAgcmV0dXJuICdpbnQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MzI6XG4gICAgICByZXR1cm4gJ3VpbnQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS5mbG9hdDE2OlxuICAgICAgcmV0dXJuICdmbG9hdDE2JztcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0OlxuICAgICAgcmV0dXJuICdmbG9hdDMyJztcbiAgICBjYXNlIERhdGFUeXBlLmRvdWJsZTpcbiAgICAgIHJldHVybiAnZmxvYXQ2NCc7XG4gICAgY2FzZSBEYXRhVHlwZS5zdHJpbmc6XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQ2NDpcbiAgICAgIHJldHVybiAnaW50NjQnO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDY0OlxuICAgICAgcmV0dXJuICd1aW50NjQnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGVQcm90b31gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBnZXQgdGVuc29yIGVsZW1lbnQgc2l6ZSBpbiBieXRlcyBieSB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gKiBAcmV0dXJucyBzaXplIGluIGludGVnZXIgb3IgdW5kZWZpbmVkIGlmIHRoZSBkYXRhIHR5cGUgaXMgbm90IHN1cHBvcnRlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0VGVuc29yRWxlbWVudFNpemUgPSAoZGF0ZVR5cGU6IG51bWJlcik6IG51bWJlcnxcbiAgICB1bmRlZmluZWQgPT4gW3VuZGVmaW5lZCwgNCwgMSwgMSwgMiwgMiwgNCwgOCwgdW5kZWZpbmVkLCAxLCAyLCA4LCA0LCA4LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVtkYXRlVHlwZV07XG5cbi8qKlxuICogZ2V0IHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIGJ5IHRoZSBnaXZlbiB0ZW5zb3IgdHlwZVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yVHlwZVRvVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gKHR5cGU6IFRlbnNvci5UeXBlKTogRmxvYXQzMkFycmF5Q29uc3RydWN0b3J8VWludDhBcnJheUNvbnN0cnVjdG9yfFxuICAgIEludDhBcnJheUNvbnN0cnVjdG9yfFVpbnQxNkFycmF5Q29uc3RydWN0b3J8SW50MTZBcnJheUNvbnN0cnVjdG9yfEludDMyQXJyYXlDb25zdHJ1Y3RvcnxCaWdJbnQ2NEFycmF5Q29uc3RydWN0b3J8XG4gICAgVWludDhBcnJheUNvbnN0cnVjdG9yfEZsb2F0NjRBcnJheUNvbnN0cnVjdG9yfFVpbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnVWludDY0QXJyYXlDb25zdHJ1Y3RvciA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnZmxvYXQxNic6XG4gICAgICAgICAgLy8gYWxsb3cgRmxvYXQxNkFycmF5IHBvbHlmaWxsLlxuICAgICAgICAgIHJldHVybiB0eXBlb2YgRmxvYXQxNkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBGbG9hdDE2QXJyYXkuZnJvbSA/IEZsb2F0MTZBcnJheSA6IFVpbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdmbG9hdDMyJzpcbiAgICAgICAgICByZXR1cm4gRmxvYXQzMkFycmF5O1xuICAgICAgICBjYXNlICd1aW50OCc6XG4gICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICAgIGNhc2UgJ2ludDgnOlxuICAgICAgICAgIHJldHVybiBJbnQ4QXJyYXk7XG4gICAgICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICAgICAgcmV0dXJuIFVpbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdpbnQxNic6XG4gICAgICAgICAgcmV0dXJuIEludDE2QXJyYXk7XG4gICAgICAgIGNhc2UgJ2ludDMyJzpcbiAgICAgICAgICByZXR1cm4gSW50MzJBcnJheTtcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICAgIGNhc2UgJ2Zsb2F0NjQnOlxuICAgICAgICAgIHJldHVybiBGbG9hdDY0QXJyYXk7XG4gICAgICAgIGNhc2UgJ3VpbnQzMic6XG4gICAgICAgICAgcmV0dXJuIFVpbnQzMkFycmF5O1xuICAgICAgICBjYXNlICdpbnQ2NCc6XG4gICAgICAgICAgcmV0dXJuIEJpZ0ludDY0QXJyYXk7XG4gICAgICAgIGNhc2UgJ3VpbnQ2NCc6XG4gICAgICAgICAgcmV0dXJuIEJpZ1VpbnQ2NEFycmF5O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlfWApO1xuICAgICAgfVxuICAgIH07XG5cbi8qKlxuICogTWFwIHN0cmluZyBsb2cgbGV2ZWwgdG8gaW50ZWdlciB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgbG9nTGV2ZWxTdHJpbmdUb0VudW0gPSAobG9nTGV2ZWw/OiAndmVyYm9zZSd8J2luZm8nfCd3YXJuaW5nJ3wnZXJyb3InfCdmYXRhbCcpOiBudW1iZXIgPT4ge1xuICBzd2l0Y2ggKGxvZ0xldmVsKSB7XG4gICAgY2FzZSAndmVyYm9zZSc6XG4gICAgICByZXR1cm4gMDtcbiAgICBjYXNlICdpbmZvJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIDM7XG4gICAgY2FzZSAnZmF0YWwnOlxuICAgICAgcmV0dXJuIDQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9nZ2luZyBsZXZlbDogJHtsb2dMZXZlbH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB0ZW5zb3IgdHlwZSBpcyBzdXBwb3J0ZWQgYnkgR1BVIGJ1ZmZlclxuICovXG5leHBvcnQgY29uc3QgaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlID0gKHR5cGU6IFRlbnNvci5UeXBlKTogdHlwZSBpcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzID0+IHR5cGUgPT09ICdmbG9hdDMyJyB8fFxuICAgIHR5cGUgPT09ICdmbG9hdDE2JyB8fCB0eXBlID09PSAnaW50MzInIHx8IHR5cGUgPT09ICdpbnQ2NCcgfHwgdHlwZSA9PT0gJ3VpbnQzMicgfHwgdHlwZSA9PT0gJ3VpbnQ4JyB8fFxuICAgIHR5cGUgPT09ICdib29sJztcblxuLyoqXG4gKiBNYXAgc3RyaW5nIGRhdGEgbG9jYXRpb24gdG8gaW50ZWdlciB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtID0gKGxvY2F0aW9uOiBUZW5zb3IuRGF0YUxvY2F0aW9uKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChsb2NhdGlvbikge1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnY3B1JzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAndGV4dHVyZSc6XG4gICAgICByZXR1cm4gMztcbiAgICBjYXNlICdncHUtYnVmZmVyJzpcbiAgICAgIHJldHVybiA0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgbG9jYXRpb246ICR7bG9jYXRpb259YCk7XG4gIH1cbn07XG5cbi8qKlxuICogTWFwIGludGVnZXIgZGF0YSBsb2NhdGlvbiB0byBzdHJpbmcgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFMb2NhdGlvbkVudW1Ub1N0cmluZyA9IChsb2NhdGlvbjogbnVtYmVyKTogVGVuc29yLkRhdGFMb2NhdGlvbnx1bmRlZmluZWQgPT5cbiAgICAoWydub25lJywgJ2NwdScsICdjcHUtcGlubmVkJywgJ3RleHR1cmUnLCAnZ3B1LWJ1ZmZlciddIGFzIGNvbnN0KVtsb2NhdGlvbl07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7cmVhZEZpbGV9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIExvYWQgYSBmaWxlIGludG8gYSBVaW50OEFycmF5LlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gdGhlIGZpbGUgdG8gbG9hZC4gQ2FuIGJlIGEgVVJML3BhdGgsIGEgQmxvYiwgYW4gQXJyYXlCdWZmZXIsIG9yIGEgVWludDhBcnJheS5cbiAqIEByZXR1cm5zIGEgVWludDhBcnJheSBjb250YWluaW5nIHRoZSBmaWxlIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZSA9IGFzeW5jKGZpbGU6IHN0cmluZ3xCbG9ifEFycmF5QnVmZmVyTGlrZXxVaW50OEFycmF5KTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAvLyBsb2FkIGZpbGUgaW50byBBcnJheUJ1ZmZlciBpbiBOb2RlLmpzXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVhZEZpbGUoZmlsZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5jb2RlID09PSAnRVJSX0ZTX0ZJTEVfVE9PX0xBUkdFJykge1xuICAgICAgICAgIC8vIGZpbGUgaXMgdG9vIGxhcmdlLCB1c2UgZnMuY3JlYXRlUmVhZFN0cmVhbSBpbnN0ZWFkXG4gICAgICAgICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKTtcbiAgICAgICAgICBjb25zdCBjaHVua3M6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvYWQgZmlsZSBpbnRvIEFycmF5QnVmZmVyIGluIGJyb3dzZXJzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRhdGEgZmlsZTogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudExlbmd0aEhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgY29uc3QgZmlsZVNpemUgPSBjb250ZW50TGVuZ3RoSGVhZGVyID8gcGFyc2VJbnQoY29udGVudExlbmd0aEhlYWRlciwgMTApIDogMDtcbiAgICAgIGlmIChmaWxlU2l6ZSA8IDEwNzM3NDE4MjQgLyogMUdCICovKSB7XG4gICAgICAgIC8vIHdoZW4gQ29udGVudC1MZW5ndGggaGVhZGVyIGlzIG5vdCBzZXQsIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZS4gV2UgYXNzdW1lIGl0IGlzIHNtYWxsIGVub3VnaCB0b1xuICAgICAgICAvLyBsb2FkIGludG8gbWVtb3J5LlxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmaWxlIGlzIHRvbyBsYXJnZSwgdXNlIHN0cmVhbSBpbnN0ZWFkXG4gICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGF0YSBmaWxlOiAke2ZpbGV9LCBubyByZXNwb25zZSBib2R5LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gY3JlYXRlIEFycmF5QnVmZmVyIGRpcmVjdGx5XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGZpbGVTaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgICAgICAgLy8gdXNlIFdlYkFzc2VtYmx5IE1lbW9yeSB0byBhbGxvY2F0ZSBsYXJnZXIgQXJyYXlCdWZmZXJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKGZpbGVTaXplIC8gNjU1MzYpO1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogcGFnZXMsIG1heGltdW06IHBhZ2VzfSkuYnVmZmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjaHVua1NpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGNodW5rU2l6ZSk7XG4gICAgICAgICAgY2h1bmsuc2V0KHZhbHVlKTtcbiAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIsIDAsIGZpbGVTaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfSBlbHNlIGlmIChmaWxlIGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpO1xuICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGZpbGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGZpbGUpO1xuICB9XG59O1xuIiwgImV4cG9ydCBjb25zdCByZWFkRmlsZSA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgcmVhZEZpbGVTeW5jID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCBjcmVhdGVSZWFkU3RyZWFtID0gdW5kZWZpbmVkOyIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtFbnYsIEluZmVyZW5jZVNlc3Npb24sIFRlbnNvcn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlciwgU2VyaWFsaXphYmxlU2Vzc2lvbk1ldGFkYXRhLCBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YSwgVGVuc29yTWV0YWRhdGF9IGZyb20gJy4vcHJveHktbWVzc2FnZXMnO1xuaW1wb3J0IHtzZXRSdW5PcHRpb25zfSBmcm9tICcuL3J1bi1vcHRpb25zJztcbmltcG9ydCB7c2V0U2Vzc2lvbk9wdGlvbnN9IGZyb20gJy4vc2Vzc2lvbi1vcHRpb25zJztcbmltcG9ydCB7ZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtLCBnZXRUZW5zb3JFbGVtZW50U2l6ZSwgaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlLCBsb2dMZXZlbFN0cmluZ1RvRW51bSwgdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcsIHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtLCB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3J9IGZyb20gJy4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuaW1wb3J0IHtsb2FkRmlsZX0gZnJvbSAnLi93YXNtLXV0aWxzLWxvYWQtZmlsZSc7XG5cbi8vICNyZWdpb24gSW5pdGlhbGl6YXRpb25zXG5cbi8qKlxuICogVGhlcmUgYXJlIDQgZGlmZmVyZW50IFwiaW5pdGlhbGl6YXRpb25cIiBzdGVwcyBmb3IgT1JULiBUaGV5IGhhcHBlbiBpbiBkaWZmZXJlbnQgcGxhY2VzIGFuZCBkaWZmZXJlbnQgdGltZS5cbiAqXG4gKiAxLiBKYXZhU2NyaXB0IGluaXRpYWxpemF0aW9uIGZvciBvbm54cnVudGltZS1jb21tb24gYW5kIG9ubnhydW50aW1lLXdlYi5cbiAqICAgIFRoaXMgaXMgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHN0ZXAuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIGNhbGxzIG9ubnhydW50aW1lLWNvbW1vbidzIHJlZ2lzdGVyQmFja2VuZCgpXG4gKiBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBhbGwgdGhlIGF2YWlsYWJsZSBiYWNrZW5kcy4gVGhlIGJhY2tlbmQgcmVnaXN0cmF0aW9uIGlzIHZlcnkgZmFzdC4gSXQgb25seVxuICogcmVnaXN0ZXJzIHRoZSBiYWNrZW5kIG5hbWUgd2l0aCB0aGUgdW5pbml0aWFsaXplZCBiYWNrZW5kIG9iamVjdC4gTm8gaGVhdnkgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiB0aGlzIHN0ZXAuXG4gKiAgICBSZWZlciB0byB3ZWIvbGliL2luZGV4LnRzIGZvciB0aGUgYmFja2VuZCByZWdpc3RyYXRpb24uXG4gKlxuICogMi4gV2ViQXNzZW1ibHkgYXJ0aWZhY3QgaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgd2hlbiBhbnkgcmVnaXN0ZXJlZCB3YXNtIGJhY2tlbmQgaXMgdXNlZCBmb3IgdGhlIGZpcnN0IHRpbWUgKGllLiBgb3J0LkluZmVyZW5jZVNlc3Npb24uY3JlYXRlKClgIG9yXG4gKiBgb3J0LlRyYWluaW5nU2Vzc2lvbi5jcmVhdGUoKWAgaXMgY2FsbGVkKS4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgZG9lcyB0aGUgZm9sbG93aW5nczpcbiAqICAgICAtIGNyZWF0ZSBhIHByb3h5IHdvcmtlciBhbmQgbWFrZSBzdXJlIHRoZSBwcm94eSB3b3JrZXIgaXMgcmVhZHkgdG8gcmVjZWl2ZSBtZXNzYWdlcywgaWYgcHJveHkgaXMgZW5hYmxlZC5cbiAqICAgICAtIHBlcmZvcm0gZmVhdHVyZSBkZXRlY3Rpb24sIGxvY2F0ZSBjb3JyZWN0IFdlYkFzc2VtYmx5IGFydGlmYWN0IHBhdGggYW5kIGNhbGwgdGhlIEVtc2NyaXB0ZW4gZ2VuZXJhdGVkXG4gKiBKYXZhU2NyaXB0IGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgV2ViQXNzZW1ibHkgcnVudGltZS5cbiAqICAgICAgICAgLSBpZiBwcm94eSBpcyBlbmFibGVkLCB0aGlzIHN0ZXAgaGFwcGVucyBpbiB0aGUgcHJveHkgd29ya2VyIHVzaW5nIG1lc3NhZ2UgJ2luaXQtd2FzbScuXG4gKiAgICAgICAgIC0gZG93bmxvYWRpbmcgdGhlICdvcnQtd2FzbXsuLi59Lndhc20nIGZpbGUgaXMgZG9uZSBpbiB0aGlzIHN0ZXAuXG4gKiAgICAgICAgIC0gaWYgbXVsdGktdGhyZWFkIGlzIGVuYWJsZWQsIG9uZSBvciBtb3JlIHdlYndvcmtlciB3aWxsIGJlIGNyZWF0ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUFRocmVhZCB0aHJlYWRwb29sLlxuICpcbiAqIDMuIE9SVCBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbi5cbiAqICAgIFRoaXMgaGFwcGVucyBhZnRlciBzdGVwIDIuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIHBlcmZvcm1zIE9OTlggUnVudGltZSBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbi5cbiAqIEZ1bmN0aW9uIGBfT3J0SW5pdCgpYCBpcyBjYWxsZWQgaW4gdGhpcyBzdGVwLlxuICogICAgIC0gaWYgcHJveHkgaXMgZW5hYmxlZCwgdGhpcyBzdGVwIGhhcHBlbnMgaW4gdGhlIHByb3h5IHdvcmtlciB1c2luZyBtZXNzYWdlICdpbml0LW9ydCcuXG4gKiAgICAgLSBsb2dnaW5nIGxldmVsIChvcnQuZW52LmxvZ0xldmVsKSBhbmQgdGhyZWFkIG51bWJlciAob3J0LmVudi53YXNtLm51bVRocmVhZHMpIGFyZSBzZXQgaW4gdGhpcyBzdGVwLlxuICpcbiAqIDQuIFNlc3Npb24gaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgd2hlbiBgb3J0LkluZmVyZW5jZVNlc3Npb24uY3JlYXRlKClgIG9yIGBvcnQuVHJhaW5pbmdTZXNzaW9uLmNyZWF0ZSgpYCBpcyBjYWxsZWQuIFVubGlrZSB0aGUgZmlyc3QgM1xuICogc3RlcHMgKHRoZXkgb25seSBjYWxsZWQgb25jZSksIHRoaXMgc3RlcCB3aWxsIGJlIGRvbmUgZm9yIGVhY2ggc2Vzc2lvbi4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgZG9lcyB0aGVcbiAqIGZvbGxvd2luZ3M6XG4gKiAgICBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgVVJMOlxuICogICAgLSBkb3dubG9hZCB0aGUgbW9kZWwgZGF0YSBmcm9tIHRoZSBVUkwuXG4gKiAgICAtIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC4gKHByb3h5OiAnY29weS1mcm9tJylcbiAqICAgIC0gZGVyZWZlcmVuY2UgdGhlIG1vZGVsIGJ1ZmZlci4gVGhpcyBzdGVwIGFsbG93cyB0aGUgb3JpZ2luYWwgQXJyYXlCdWZmZXIgdG8gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gKiAgICAtIGNhbGwgYF9PcnRDcmVhdGVTZXNzaW9uKClgIHRvIGNyZWF0ZSB0aGUgc2Vzc2lvbi4gKHByb3h5OiAnY3JlYXRlJylcbiAqXG4gKiAgICBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgVWludDhBcnJheSBvYmplY3Q6XG4gKiAgICAtIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC4gKHByb3h5OiAnY29weS1mcm9tJylcbiAqICAgIC0gY2FsbCBgX09ydENyZWF0ZVNlc3Npb24oKWAgdG8gY3JlYXRlIHRoZSBzZXNzaW9uLiAocHJveHk6ICdjcmVhdGUnKVxuICpcbiAqXG4gKi9cblxuLyoqXG4gKiBpbml0aWFsaXplIE9SVCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcGFyYW0gbnVtVGhyZWFkcyBTZXRHbG9iYWxJbnRyYU9wTnVtVGhyZWFkcyhudW1UaHJlYWRzKVxuICogQHBhcmFtIGxvZ2dpbmdMZXZlbCBDcmVhdGVFbnYoc3RhdGljX2Nhc3Q8T3J0TG9nZ2luZ0xldmVsPihsb2dnaW5nX2xldmVsKSlcbiAqL1xuY29uc3QgaW5pdE9ydCA9IChudW1UaHJlYWRzOiBudW1iZXIsIGxvZ2dpbmdMZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IGVycm9yQ29kZSA9IGdldEluc3RhbmNlKCkuX09ydEluaXQobnVtVGhyZWFkcywgbG9nZ2luZ0xldmVsKTtcbiAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGluaXRpYWxpemUgb25ueHJ1bnRpbWUuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogaW50aWFsaXplIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gZW52IHBhc3NlZCBpbiB0aGUgZW52aXJvbm1lbnQgY29uZmlnIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXRSdW50aW1lID0gYXN5bmMoZW52OiBFbnYpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgLy8gaW5pdCBPUlRcbiAgaW5pdE9ydChlbnYud2FzbS5udW1UaHJlYWRzISwgbG9nTGV2ZWxTdHJpbmdUb0VudW0oZW52LmxvZ0xldmVsKSk7XG59O1xuXG4vKipcbiAqIHBlcmZvcm0gRVAgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uXG4gKlxuICogQHBhcmFtIGVudlxuICogQHBhcmFtIGVwTmFtZVxuICovXG5leHBvcnQgY29uc3QgaW5pdEVwID0gYXN5bmMoZW52OiBFbnYsIGVwTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgaW5pdEpzZXAgPSByZXF1aXJlKCcuL2pzZXAvaW5pdCcpLmluaXQ7XG5cbiAgICBpZiAoZXBOYW1lID09PSAnd2ViZ3B1Jykge1xuICAgICAgLy8gcGVyZm9ybSBXZWJHUFUgYXZhaWxhYmlsaXR5IGNoZWNrXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5hdmlnYXRvci5ncHUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJHUFUgaXMgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IGVudmlyb25tZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBhZGFwdGVyID0gZW52LndlYmdwdS5hZGFwdGVyIGFzIEdQVUFkYXB0ZXIgfCBudWxsO1xuICAgICAgaWYgKCFhZGFwdGVyKSB7XG4gICAgICAgIC8vIGlmIGFkYXB0ZXIgaXMgbm90IHNldCwgcmVxdWVzdCBhIG5ldyBhZGFwdGVyLlxuICAgICAgICBjb25zdCBwb3dlclByZWZlcmVuY2UgPSBlbnYud2ViZ3B1LnBvd2VyUHJlZmVyZW5jZTtcbiAgICAgICAgaWYgKHBvd2VyUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBvd2VyUHJlZmVyZW5jZSAhPT0gJ2xvdy1wb3dlcicgJiZcbiAgICAgICAgICAgIHBvd2VyUHJlZmVyZW5jZSAhPT0gJ2hpZ2gtcGVyZm9ybWFuY2UnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvd2VyUHJlZmVyZW5jZSBzZXR0aW5nOiBcIiR7cG93ZXJQcmVmZXJlbmNlfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9yY2VGYWxsYmFja0FkYXB0ZXIgPSBlbnYud2ViZ3B1LmZvcmNlRmFsbGJhY2tBZGFwdGVyO1xuICAgICAgICBpZiAoZm9yY2VGYWxsYmFja0FkYXB0ZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZm9yY2VGYWxsYmFja0FkYXB0ZXIgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JjZUZhbGxiYWNrQWRhcHRlciBzZXR0aW5nOiBcIiR7Zm9yY2VGYWxsYmFja0FkYXB0ZXJ9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcih7cG93ZXJQcmVmZXJlbmNlLCBmb3JjZUZhbGxiYWNrQWRhcHRlcn0pO1xuICAgICAgICBpZiAoIWFkYXB0ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdGYWlsZWQgdG8gZ2V0IEdQVSBhZGFwdGVyLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgbmVlZCB0byBlbmFibGUgZmxhZyBcIi0tZW5hYmxlLXVuc2FmZS13ZWJncHVcIiBpZiB5b3UgYXJlIHVzaW5nIENocm9tZS4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYWRhcHRlciBpcyBzZXQsIHZhbGlkYXRlIGl0LlxuICAgICAgICBpZiAodHlwZW9mIGFkYXB0ZXIubGltaXRzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgYWRhcHRlci5mZWF0dXJlcyAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIHR5cGVvZiBhZGFwdGVyLnJlcXVlc3REZXZpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgR1BVIGFkYXB0ZXIgc2V0IGluIGBlbnYud2ViZ3B1LmFkYXB0ZXJgLiBJdCBtdXN0IGJlIGEgR1BVQWRhcHRlciBvYmplY3QuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbnYud2FzbS5zaW1kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdOb3Qgc3VwcG9ydGVkIGZvciBXZWJHUFU9T04gYW5kIFNJTUQ9T0ZGLiBQbGVhc2Ugc2V0IGBlbnYud2FzbS5zaW1kYCB0byB0cnVlIHdoZW4gdXNpbmcgYHdlYmdwdWAgRVAnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgaW5pdEpzZXAoJ3dlYmdwdScsIGdldEluc3RhbmNlKCksIGVudiwgYWRhcHRlcik7XG4gICAgfVxuICAgIGlmIChlcE5hbWUgPT09ICd3ZWJubicpIHtcbiAgICAgIC8vIHBlcmZvcm0gV2ViTk4gYXZhaWxhYmlsaXR5IGNoZWNrXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIShuYXZpZ2F0b3IgYXMgdW5rbm93biBhcyB7bWw6IHVua25vd259KS5tbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYk5OIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBlbnZpcm9ubWVudCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBpbml0SnNlcCgnd2Vibm4nLCBnZXRJbnN0YW5jZSgpLCBlbnYpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gI2VuZHJlZ2lvbiBJbml0aWFsaXphdGlvbnNcblxuLyoqXG4gKiB2YWxpZCBkYXRhIGxvY2F0aW9ucyBmb3IgaW5wdXQvb3V0cHV0IHRlbnNvcnMuXG4gKi9cbnR5cGUgU3VwcG9ydGVkVGVuc29yRGF0YUxvY2F0aW9uRm9ySW5wdXRPdXRwdXQgPSAnY3B1J3wnY3B1LXBpbm5lZCd8J2dwdS1idWZmZXInO1xuXG50eXBlIElPQmluZGluZ1N0YXRlID0ge1xuICAvKipcbiAgICogdGhlIGhhbmRsZSBvZiBJTyBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gZm9yIGVhY2ggb3V0cHV0IHRlbnNvci5cbiAgICpcbiAgICogdmFsdWUgaXMgb25lIG9mICdjcHUnLCAnY3B1LXBpbm5lZCcsICdncHUtYnVmZmVyJy5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dFByZWZlcnJlZExvY2F0aW9uczogcmVhZG9ubHkgU3VwcG9ydGVkVGVuc29yRGF0YUxvY2F0aW9uRm9ySW5wdXRPdXRwdXRbXTtcblxuICAvKipcbiAgICogZW51bSB2YWx1ZSBvZiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGZvciBlYWNoIG91dHB1dCB0ZW5zb3IuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkOiByZWFkb25seSBudW1iZXJbXTtcbn07XG5cbi8qKlxuICogIHR1cGxlIGVsZW1lbnRzIGFyZTogSW5mZXJlbmNlU2Vzc2lvbiBJRDsgaW5wdXROYW1lc1VURjhFbmNvZGVkOyBvdXRwdXROYW1lc1VURjhFbmNvZGVkOyBiaW5kaW5nU3RhdGVcbiAqL1xudHlwZSBTZXNzaW9uTWV0YWRhdGEgPSBbXG4gIGluZmVyZW5jZVNlc3Npb25JZDogbnVtYmVyLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQ6IG51bWJlcltdLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkOiBudW1iZXJbXSxcbiAgYmluZGluZ1N0YXRlOiBJT0JpbmRpbmdTdGF0ZXxudWxsLCBlbmFibGVHcmFwaENhcHR1cmU6IGJvb2xlYW4sIGlucHV0T3V0cHV0Qm91bmQ6IGJvb2xlYW5cbl07XG5cbmNvbnN0IGFjdGl2ZVNlc3Npb25zID0gbmV3IE1hcDxudW1iZXIsIFNlc3Npb25NZXRhZGF0YT4oKTtcblxuLyoqXG4gKiBnZXQgdGhlIGlucHV0L291dHB1dCBjb3VudCBvZiB0aGUgc2Vzc2lvbi5cbiAqIEBwYXJhbSBzZXNzaW9uSGFuZGxlIHRoZSBoYW5kbGUgcmVwcmVzZW50aW5nIHRoZSBzZXNzaW9uLiBzaG91bGQgYmUgbm9uLXplcm8uXG4gKiBAcmV0dXJucyBhIHR1cGxlIGluY2x1ZGluZyAyIG51bWJlcnMsIHJlcHJlc2VudGluZyB0aGUgaW5wdXQgY291bnQgYW5kIG91dHB1dCBjb3VudC5cbiAqL1xuY29uc3QgZ2V0U2Vzc2lvbklucHV0T3V0cHV0Q291bnQgPSAoc2Vzc2lvbkhhbmRsZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg4KTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLl9PcnRHZXRJbnB1dE91dHB1dENvdW50KHNlc3Npb25IYW5kbGUsIGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyA0KTtcbiAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBnZXQgc2Vzc2lvbiBpbnB1dC9vdXRwdXQgY291bnQuJyk7XG4gICAgfVxuICAgIHJldHVybiBbd2FzbS5IRUFQMzJbZGF0YU9mZnNldCAvIDRdLCB3YXNtLkhFQVAzMltkYXRhT2Zmc2V0IC8gNCArIDFdXTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gIH1cbn07XG5cbi8qKlxuICogYWxsb2NhdGUgdGhlIG1lbW9yeSBhbmQgbWVtY3B5IHRoZSBleHRlcm5hbCBidWZmZXIuXG4gKlxuICogQHBhcmFtIG1vZGVsIC0gdGhlIGV4dGVybmFsIGJ1ZmZlciBjb250YWluaW5nIHRoZSBtb2RlbCBkYXRhLiBNdXN0IG5vdCBiZSB0aGUgc2FtZSBidWZmZXIgYXMgdGhlIFdBU00gaGVhcC5cbiAqIEByZXR1cm5zIGEgMi1lbGVtZW50cyB0dXBsZSAtIHRoZSBwb2ludGVyIGFuZCBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyXG4gKi9cbmV4cG9ydCBjb25zdCBjb3B5RnJvbUV4dGVybmFsQnVmZmVyID0gKG1vZGVsOiBVaW50OEFycmF5KTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBtb2RlbERhdGFPZmZzZXQgPSB3YXNtLl9tYWxsb2MobW9kZWwuYnl0ZUxlbmd0aCk7XG4gIGlmIChtb2RlbERhdGFPZmZzZXQgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBhIHNlc3Npb24uIGZhaWxlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBzaXplICR7bW9kZWwuYnl0ZUxlbmd0aH0uYCk7XG4gIH1cbiAgd2FzbS5IRUFQVTguc2V0KG1vZGVsLCBtb2RlbERhdGFPZmZzZXQpO1xuICByZXR1cm4gW21vZGVsRGF0YU9mZnNldCwgbW9kZWwuYnl0ZUxlbmd0aF07XG59O1xuXG4vKipcbiAqIGNyZWF0ZSBhbiBpbmZlcmVuY2Ugc2Vzc2lvbiBmcm9tIGEgbW9kZWwgZGF0YSBidWZmZXIuXG4gKlxuICogQHBhcmFtIG1vZGVsRGF0YSAtIGVpdGhlciBhIFVpbnQ4QXJyYXkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbW9kZWwgZGF0YSwgb3IgYSAyLWVsZW1lbnRzIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG4gKiAgICAgcG9pbnRlciBhbmQgc2l6ZSBvZiB0aGUgbW9kZWwgZGF0YSBidWZmZXIuXG4gKiBAcGFyYW0gb3B0aW9ucyBhbiBvcHRpb25hbCBzZXNzaW9uIG9wdGlvbnMgb2JqZWN0LlxuICogQHJldHVybnMgYSAzLWVsZW1lbnRzIHR1cGxlIGNvbnRhaW5pbmcgW3Nlc3Npb24gaGFuZGxlLCBpbnB1dCBuYW1lcywgb3V0cHV0IG5hbWVzXVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2Vzc2lvbiA9IGFzeW5jKFxuICAgIG1vZGVsRGF0YTogVWludDhBcnJheXxTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlcixcbiAgICBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8U2VyaWFsaXphYmxlU2Vzc2lvbk1ldGFkYXRhPiA9PiB7XG4gIGxldCBtb2RlbERhdGFPZmZzZXQ6IG51bWJlciwgbW9kZWxEYXRhTGVuZ3RoOiBudW1iZXI7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZGVsRGF0YSkpIHtcbiAgICAvLyBpZiBtb2RlbCBkYXRhIGlzIGFuIGFycmF5LCBpdCBtdXN0IGJlIGEgMi1lbGVtZW50cyB0dXBsZSBjb250YWluaW5nIHRoZSBwb2ludGVyIGFuZCBzaXplIG9mIHRoZSBtb2RlbCBkYXRhXG4gICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IG1vZGVsRGF0YTtcbiAgfSBlbHNlIGlmIChtb2RlbERhdGEuYnVmZmVyID09PSB3YXNtLkhFQVBVOC5idWZmZXIpIHtcbiAgICAvLyBpZiBtb2RlbCBkYXRhIHVzZXMgdGhlIHNhbWUgYnVmZmVyIGFzIHRoZSBXQVNNIGhlYXAsIHdlIGRvbid0IG5lZWQgdG8gY29weSBpdC5cbiAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gW21vZGVsRGF0YS5ieXRlT2Zmc2V0LCBtb2RlbERhdGEuYnl0ZUxlbmd0aF07XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlLCBjb3B5IHRoZSBtb2RlbCBkYXRhIHRvIHRoZSBXQVNNIGhlYXAuXG4gICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIobW9kZWxEYXRhKTtcbiAgfVxuXG4gIGxldCBzZXNzaW9uSGFuZGxlID0gMDtcbiAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgbGV0IGlvQmluZGluZ0hhbmRsZSA9IDA7XG4gIGxldCBhbGxvY3M6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGlucHV0TmFtZXNVVEY4RW5jb2RlZCA9IFtdO1xuICBjb25zdCBvdXRwdXROYW1lc1VURjhFbmNvZGVkID0gW107XG5cbiAgdHJ5IHtcbiAgICBbc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGFsbG9jc10gPSBzZXRTZXNzaW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zPy5leHRlcm5hbERhdGEgJiYgd2FzbS5tb3VudEV4dGVybmFsRGF0YSkge1xuICAgICAgY29uc3QgbG9hZGluZ1Byb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0aW9ucy5leHRlcm5hbERhdGEpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJyA/IGZpbGUgOiBmaWxlLnBhdGg7XG4gICAgICAgIGxvYWRpbmdQcm9taXNlcy5wdXNoKGxvYWRGaWxlKHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJyA/IGZpbGUgOiBmaWxlLmRhdGEpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgd2FzbS5tb3VudEV4dGVybmFsRGF0YSEocGF0aCwgZGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gd2FpdCBmb3IgYWxsIGV4dGVybmFsIGRhdGEgZmlsZXMgdG8gYmUgbG9hZGVkXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChsb2FkaW5nUHJvbWlzZXMpO1xuICAgIH1cblxuICAgIHNlc3Npb25IYW5kbGUgPSBhd2FpdCB3YXNtLl9PcnRDcmVhdGVTZXNzaW9uKG1vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoLCBzZXNzaW9uT3B0aW9uc0hhbmRsZSk7XG4gICAgaWYgKHNlc3Npb25IYW5kbGUgPT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGNyZWF0ZSBhIHNlc3Npb24uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgW2lucHV0Q291bnQsIG91dHB1dENvdW50XSA9IGdldFNlc3Npb25JbnB1dE91dHB1dENvdW50KHNlc3Npb25IYW5kbGUpO1xuXG4gICAgY29uc3QgZW5hYmxlR3JhcGhDYXB0dXJlID0gISFvcHRpb25zPy5lbmFibGVHcmFwaENhcHR1cmU7XG5cbiAgICBjb25zdCBpbnB1dE5hbWVzID0gW107XG4gICAgY29uc3Qgb3V0cHV0TmFtZXMgPSBbXTtcbiAgICBjb25zdCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnM6IFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbmFtZSA9IHdhc20uX09ydEdldElucHV0TmFtZShzZXNzaW9uSGFuZGxlLCBpKTtcbiAgICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBhbiBpbnB1dCBuYW1lLicpO1xuICAgICAgfVxuICAgICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLnB1c2gobmFtZSk7XG4gICAgICBpbnB1dE5hbWVzLnB1c2god2FzbS5VVEY4VG9TdHJpbmcobmFtZSkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB3YXNtLl9PcnRHZXRPdXRwdXROYW1lKHNlc3Npb25IYW5kbGUsIGkpO1xuICAgICAgaWYgKG5hbWUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IGFuIG91dHB1dCBuYW1lLicpO1xuICAgICAgfVxuICAgICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5wdXNoKG5hbWUpO1xuICAgICAgY29uc3QgbmFtZVN0cmluZyA9IHdhc20uVVRGOFRvU3RyaW5nKG5hbWUpO1xuICAgICAgb3V0cHV0TmFtZXMucHVzaChuYW1lU3RyaW5nKTtcblxuICAgICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVKSB7XG4gICAgICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUgJiYgb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5wdXNoKCdncHUtYnVmZmVyJyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0eXBlb2Ygb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIG9wdGlvbnMucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gOlxuICAgICAgICAgICAgb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24/LltuYW1lU3RyaW5nXSA/PyAnY3B1JztcbiAgICAgICAgaWYgKGxvY2F0aW9uICE9PSAnY3B1JyAmJiBsb2NhdGlvbiAhPT0gJ2NwdS1waW5uZWQnICYmIGxvY2F0aW9uICE9PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBzdXBwb3J0ZWQgcHJlZmVycmVkIG91dHB1dCBsb2NhdGlvbjogJHtsb2NhdGlvbn0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBsb2NhdGlvbiAhPT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9ydGVkIHByZWZlcnJlZCBvdXRwdXQgbG9jYXRpb246ICR7XG4gICAgICAgICAgICAgIGxvY2F0aW9ufS4gT25seSAnZ3B1LWJ1ZmZlcicgbG9jYXRpb24gaXMgc3VwcG9ydGVkIHdoZW4gZW5hYmxlR3JhcGhDYXB0dXJlIGlzIHRydWUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLnB1c2gobG9jYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVzZSBJTyBiaW5kaW5nIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgb3V0cHV0IGlzIHByZWZmZXJlZCB0byBiZSBvbiBHUFUuXG4gICAgbGV0IGJpbmRpbmdTdGF0ZTogSU9CaW5kaW5nU3RhdGV8bnVsbCA9IG51bGw7XG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVICYmIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5zb21lKGwgPT4gbCA9PT0gJ2dwdS1idWZmZXInKSkge1xuICAgICAgaW9CaW5kaW5nSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlQmluZGluZyhzZXNzaW9uSGFuZGxlKTtcbiAgICAgIGlmIChpb0JpbmRpbmdIYW5kbGUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIElPIGJpbmRpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGJpbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgaGFuZGxlOiBpb0JpbmRpbmdIYW5kbGUsXG4gICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucyxcbiAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZDogb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLm1hcChsID0+IGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bShsKSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgc2Vzc2lvbkhhbmRsZSxcbiAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgYmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIGZhbHNlXSk7XG4gICAgcmV0dXJuIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzLCBvdXRwdXROYW1lc107XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpbnB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcbiAgICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG5cbiAgICBpZiAoaW9CaW5kaW5nSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlQmluZGluZyhpb0JpbmRpbmdIYW5kbGUpO1xuICAgIH1cblxuICAgIGlmIChzZXNzaW9uSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbihzZXNzaW9uSGFuZGxlKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLl9mcmVlKG1vZGVsRGF0YU9mZnNldCk7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG5cbiAgICAvLyB1bm1vdW50IGV4dGVybmFsIGRhdGEgaWYgbmVjZXNzYXJ5XG4gICAgd2FzbS51bm1vdW50RXh0ZXJuYWxEYXRhPy4oKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlbGVhc2VTZXNzaW9uID0gKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlbGVhc2Ugc2Vzc2lvbi4gaW52YWxpZCBzZXNzaW9uIGlkOiAke3Nlc3Npb25JZH1gKTtcbiAgfVxuICBjb25zdCBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlXSA9IHNlc3Npb247XG5cbiAgaWYgKGlvQmluZGluZ1N0YXRlKSB7XG4gICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSkge1xuICAgICAgd2FzbS5fT3J0Q2xlYXJCb3VuZE91dHB1dHMoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgICB9XG4gICAgd2FzbS5fT3J0UmVsZWFzZUJpbmRpbmcoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgfVxuXG4gIHdhc20uanNlcE9uUmVsZWFzZVNlc3Npb24/LihzZXNzaW9uSWQpO1xuXG4gIGlucHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKGJ1ZiA9PiB3YXNtLl9PcnRGcmVlKGJ1ZikpO1xuICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG4gIHdhc20uX09ydFJlbGVhc2VTZXNzaW9uKHNlc3Npb25IYW5kbGUpO1xuICBhY3RpdmVTZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IgPVxuICAgICh0ZW5zb3I6IFRlbnNvck1ldGFkYXRhfG51bGwsIHRlbnNvckhhbmRsZXM6IG51bWJlcltdLCBhbGxvY3M6IG51bWJlcltdLCBzZXNzaW9uSWQ6IG51bWJlciwgaW5kZXg6IG51bWJlcixcbiAgICAgZW5hYmxlR3JhcGhDYXB0dXJlID0gZmFsc2UpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGVuc29yKSB7XG4gICAgICAgIHRlbnNvckhhbmRsZXMucHVzaCgwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JbMF07XG4gICAgICBjb25zdCBkaW1zID0gdGVuc29yWzFdO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSB0ZW5zb3JbM107XG5cbiAgICAgIGxldCByYXdEYXRhOiBudW1iZXI7XG4gICAgICBsZXQgZGF0YUJ5dGVMZW5ndGg6IG51bWJlcjtcblxuICAgICAgaWYgKGRhdGFUeXBlID09PSAnc3RyaW5nJyAmJiBsb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5nIHRlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIEdQVS4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBsb2NhdGlvbiAhPT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBFeHRlcm5hbCBidWZmZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgaW5wdXQvb3V0cHV0IGluZGV4ICR7aW5kZXh9IHdoZW4gZW5hYmxlR3JhcGhDYXB0dXJlIGlzIHRydWUuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgIGNvbnN0IGdwdUJ1ZmZlciA9IHRlbnNvclsyXS5ncHVCdWZmZXIgYXMgR1BVQnVmZmVyO1xuICAgICAgICBjb25zdCBlbGVtZW50U2l6ZUluQnl0ZXMgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZSh0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bShkYXRhVHlwZSkpITtcbiAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSBkaW1zLnJlZHVjZSgoYSwgYikgPT4gYSAqIGIsIDEpICogZWxlbWVudFNpemVJbkJ5dGVzO1xuXG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyQnVmZmVyID0gd2FzbS5qc2VwUmVnaXN0ZXJCdWZmZXI7XG4gICAgICAgIGlmICghcmVnaXN0ZXJCdWZmZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RlbnNvciBsb2NhdGlvbiBcImdwdS1idWZmZXJcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgdXNpbmcgV2ViR1BVLicpO1xuICAgICAgICB9XG4gICAgICAgIHJhd0RhdGEgPSByZWdpc3RlckJ1ZmZlcihzZXNzaW9uSWQsIGluZGV4LCBncHVCdWZmZXIsIGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0ZW5zb3JbMl07XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAvLyBzdHJpbmcgdGVuc29yXG4gICAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSA0ICogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgcmF3RGF0YSA9IHdhc20uX21hbGxvYyhkYXRhQnl0ZUxlbmd0aCk7XG4gICAgICAgICAgYWxsb2NzLnB1c2gocmF3RGF0YSk7XG4gICAgICAgICAgbGV0IGRhdGFJbmRleCA9IHJhd0RhdGEgLyA0O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB0ZW5zb3IgZGF0YSBhdCBpbmRleCAke2l9IGlzIG5vdCBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FzbS5IRUFQVTMyW2RhdGFJbmRleCsrXSA9IGFsbG9jV2FzbVN0cmluZyhkYXRhW2ldLCBhbGxvY3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhQnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICByYXdEYXRhID0gd2FzbS5fbWFsbG9jKGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgICAgICBhbGxvY3MucHVzaChyYXdEYXRhKTtcbiAgICAgICAgICB3YXNtLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpLCByYXdEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDQgKiBkaW1zLmxlbmd0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgZGltSW5kZXggPSBkaW1zT2Zmc2V0IC8gNDtcbiAgICAgICAgZGltcy5mb3JFYWNoKGQgPT4gd2FzbS5IRUFQMzJbZGltSW5kZXgrK10gPSBkKTtcbiAgICAgICAgY29uc3QgdGVuc29yID0gd2FzbS5fT3J0Q3JlYXRlVGVuc29yKFxuICAgICAgICAgICAgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0oZGF0YVR5cGUpLCByYXdEYXRhLCBkYXRhQnl0ZUxlbmd0aCwgZGltc09mZnNldCwgZGltcy5sZW5ndGgsXG4gICAgICAgICAgICBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obG9jYXRpb24pKTtcbiAgICAgICAgaWYgKHRlbnNvciA9PT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBjcmVhdGUgdGVuc29yIGZvciBpbnB1dC9vdXRwdXQuIHNlc3Npb249JHtzZXNzaW9uSWR9LCBpbmRleD0ke2luZGV4fS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW5zb3JIYW5kbGVzLnB1c2godGVuc29yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICAgIH1cbiAgICB9O1xuXG4vKipcbiAqIHBlcmZvcm0gaW5mZXJlbmNlIHJ1blxuICovXG5leHBvcnQgY29uc3QgcnVuID0gYXN5bmMoXG4gICAgc2Vzc2lvbklkOiBudW1iZXIsIGlucHV0SW5kaWNlczogbnVtYmVyW10sIGlucHV0VGVuc29yczogVGVuc29yTWV0YWRhdGFbXSwgb3V0cHV0SW5kaWNlczogbnVtYmVyW10sXG4gICAgb3V0cHV0VGVuc29yczogQXJyYXk8VGVuc29yTWV0YWRhdGF8bnVsbD4sIG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8VGVuc29yTWV0YWRhdGFbXT4gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBydW4gaW5mZXJlbmNlLiBpbnZhbGlkIHNlc3Npb24gaWQ6ICR7c2Vzc2lvbklkfWApO1xuICB9XG4gIGNvbnN0IHNlc3Npb25IYW5kbGUgPSBzZXNzaW9uWzBdO1xuICBjb25zdCBpbnB1dE5hbWVzVVRGOEVuY29kZWQgPSBzZXNzaW9uWzFdO1xuICBjb25zdCBvdXRwdXROYW1lc1VURjhFbmNvZGVkID0gc2Vzc2lvblsyXTtcbiAgY29uc3QgaW9CaW5kaW5nU3RhdGUgPSBzZXNzaW9uWzNdO1xuICBjb25zdCBlbmFibGVHcmFwaENhcHR1cmUgPSBzZXNzaW9uWzRdO1xuICBjb25zdCBpbnB1dE91dHB1dEJvdW5kID0gc2Vzc2lvbls1XTtcblxuICBjb25zdCBpbnB1dENvdW50ID0gaW5wdXRJbmRpY2VzLmxlbmd0aDtcbiAgY29uc3Qgb3V0cHV0Q291bnQgPSBvdXRwdXRJbmRpY2VzLmxlbmd0aDtcblxuICBsZXQgcnVuT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGxldCBydW5PcHRpb25zQWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGlucHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5wdXRPdXRwdXRBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgYmVmb3JlUnVuU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICBjb25zdCBpbnB1dFZhbHVlc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyhpbnB1dENvdW50ICogNCk7XG4gIGNvbnN0IGlucHV0TmFtZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoaW5wdXRDb3VudCAqIDQpO1xuICBjb25zdCBvdXRwdXRWYWx1ZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2Mob3V0cHV0Q291bnQgKiA0KTtcbiAgY29uc3Qgb3V0cHV0TmFtZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2Mob3V0cHV0Q291bnQgKiA0KTtcblxuICB0cnkge1xuICAgIFtydW5PcHRpb25zSGFuZGxlLCBydW5PcHRpb25zQWxsb2NzXSA9IHNldFJ1bk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjcmVhdGUgaW5wdXQgdGVuc29yc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgaW5wdXRUZW5zb3JzW2ldLCBpbnB1dFRlbnNvckhhbmRsZXMsIGlucHV0T3V0cHV0QWxsb2NzLCBzZXNzaW9uSWQsIGlucHV0SW5kaWNlc1tpXSwgZW5hYmxlR3JhcGhDYXB0dXJlKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0IHRlbnNvcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvcihcbiAgICAgICAgICBvdXRwdXRUZW5zb3JzW2ldLCBvdXRwdXRUZW5zb3JIYW5kbGVzLCBpbnB1dE91dHB1dEFsbG9jcywgc2Vzc2lvbklkLCBpbnB1dENvdW50ICsgb3V0cHV0SW5kaWNlc1tpXSxcbiAgICAgICAgICBlbmFibGVHcmFwaENhcHR1cmUpO1xuICAgIH1cblxuICAgIGxldCBpbnB1dFZhbHVlc0luZGV4ID0gaW5wdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgIGxldCBpbnB1dE5hbWVzSW5kZXggPSBpbnB1dE5hbWVzT2Zmc2V0IC8gNDtcbiAgICBsZXQgb3V0cHV0VmFsdWVzSW5kZXggPSBvdXRwdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgIGxldCBvdXRwdXROYW1lc0luZGV4ID0gb3V0cHV0TmFtZXNPZmZzZXQgLyA0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICB3YXNtLkhFQVBVMzJbaW5wdXRWYWx1ZXNJbmRleCsrXSA9IGlucHV0VGVuc29ySGFuZGxlc1tpXTtcbiAgICAgIHdhc20uSEVBUFUzMltpbnB1dE5hbWVzSW5kZXgrK10gPSBpbnB1dE5hbWVzVVRGOEVuY29kZWRbaW5wdXRJbmRpY2VzW2ldXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICB3YXNtLkhFQVBVMzJbb3V0cHV0VmFsdWVzSW5kZXgrK10gPSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldO1xuICAgICAgd2FzbS5IRUFQVTMyW291dHB1dE5hbWVzSW5kZXgrK10gPSBvdXRwdXROYW1lc1VURjhFbmNvZGVkW291dHB1dEluZGljZXNbaV1dO1xuICAgIH1cblxuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBpb0JpbmRpbmdTdGF0ZSAmJiAhaW5wdXRPdXRwdXRCb3VuZCkge1xuICAgICAgY29uc3Qge2hhbmRsZSwgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkfSA9IGlvQmluZGluZ1N0YXRlO1xuXG4gICAgICBpZiAoaW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aCAhPT0gaW5wdXRDb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGNvdW50IGZyb20gZmVlZHMgKCR7XG4gICAgICAgICAgICBpbnB1dENvdW50fSkgaXMgZXhwZWN0ZWQgdG8gYmUgYWx3YXlzIGVxdWFsIHRvIG1vZGVsJ3MgaW5wdXQgY291bnQgKCR7aW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aH0pLmApO1xuICAgICAgfVxuXG4gICAgICAvLyBwcm9jZXNzIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbnB1dEluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydEJpbmRJbnB1dChoYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIGlucHV0VGVuc29ySGFuZGxlc1tpXSk7XG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBpbnB1dFske2l9XSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcHJvY2VzcyBwcmUtYWxsb2NhdGVkIG91dHB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IG91dHB1dEluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gb3V0cHV0VGVuc29yc1tpXT8uWzNdOyAgLy8gdW5kZWZpbmVkIG1lYW5zIG91dHB1dCBpcyBub3QgcHJlLWFsbG9jYXRlZC5cblxuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAvLyBvdXRwdXQgaXMgcHJlLWFsbG9jYXRlZC4gYmluZCB0aGUgdGVuc29yLlxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEJpbmRPdXRwdXQoaGFuZGxlLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkW2luZGV4XSwgb3V0cHV0VGVuc29ySGFuZGxlc1tpXSwgMCk7XG4gICAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgcHJlLWFsbG9jYXRlZCBvdXRwdXRbJHtpfV0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdXRwdXQgaXMgbm90IHByZS1hbGxvY2F0ZWQuIHJlc2V0IHByZWZlcnJlZCBsb2NhdGlvbi5cbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPVxuICAgICAgICAgICAgICB3YXNtLl9PcnRCaW5kT3V0cHV0KGhhbmRsZSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIDAsIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWRbaW5kZXhdKTtcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBvdXRwdXRbJHtpfV0gdG8gJHtvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNbaV19IGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZSwgdHJ1ZV0pO1xuICAgIH1cblxuICAgIHdhc20uanNlcE9uUnVuU3RhcnQ/LihzZXNzaW9uSGFuZGxlKTtcbiAgICBsZXQgZXJyb3JDb2RlOiBudW1iZXI7XG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVICYmIGlvQmluZGluZ1N0YXRlKSB7XG4gICAgICBlcnJvckNvZGUgPSBhd2FpdCB3YXNtLl9PcnRSdW5XaXRoQmluZGluZyhcbiAgICAgICAgICBzZXNzaW9uSGFuZGxlLCBpb0JpbmRpbmdTdGF0ZS5oYW5kbGUsIG91dHB1dENvdW50LCBvdXRwdXRWYWx1ZXNPZmZzZXQsIHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvckNvZGUgPSBhd2FpdCB3YXNtLl9PcnRSdW4oXG4gICAgICAgICAgc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc09mZnNldCwgaW5wdXRWYWx1ZXNPZmZzZXQsIGlucHV0Q291bnQsIG91dHB1dE5hbWVzT2Zmc2V0LCBvdXRwdXRDb3VudCxcbiAgICAgICAgICBvdXRwdXRWYWx1ZXNPZmZzZXQsIHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cblxuICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdmYWlsZWQgdG8gY2FsbCBPcnRSdW4oKS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQ6IFRlbnNvck1ldGFkYXRhW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdGVuc29yID0gd2FzbS5IRUFQVTMyW291dHB1dFZhbHVlc09mZnNldCAvIDQgKyBpXTtcbiAgICAgIGlmICh0ZW5zb3IgPT09IG91dHB1dFRlbnNvckhhbmRsZXNbaV0pIHtcbiAgICAgICAgLy8gb3V0cHV0IHRlbnNvciBpcyBwcmUtYWxsb2NhdGVkLiBubyBuZWVkIHRvIGNvcHkgZGF0YS5cbiAgICAgICAgb3V0cHV0LnB1c2gob3V0cHV0VGVuc29yc1tpXSEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmVmb3JlR2V0VGVuc29yRGF0YVN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgICAgIC8vIHN0YWNrIGFsbG9jYXRlIDQgcG9pbnRlciB2YWx1ZVxuICAgICAgY29uc3QgdGVuc29yRGF0YU9mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0ICogNCk7XG5cbiAgICAgIGxldCBrZWVwT3V0cHV0VGVuc29yID0gZmFsc2U7XG4gICAgICBsZXQgdHlwZTogVGVuc29yLlR5cGV8dW5kZWZpbmVkLCBkYXRhT2Zmc2V0ID0gMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEdldFRlbnNvckRhdGEoXG4gICAgICAgICAgICB0ZW5zb3IsIHRlbnNvckRhdGFPZmZzZXQsIHRlbnNvckRhdGFPZmZzZXQgKyA0LCB0ZW5zb3JEYXRhT2Zmc2V0ICsgOCwgdGVuc29yRGF0YU9mZnNldCArIDEyKTtcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBhY2Nlc3Mgb3V0cHV0IHRlbnNvciBkYXRhIG9uIGluZGV4ICR7aX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlbnNvckRhdGFJbmRleCA9IHRlbnNvckRhdGFPZmZzZXQgLyA0O1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGRhdGFPZmZzZXQgPSB3YXNtLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgY29uc3QgZGltc0xlbmd0aCA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGNvbnN0IGRpbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBkaW1zLnB1c2god2FzbS5IRUFQVTMyW2RpbXNPZmZzZXQgLyA0ICsgaV0pO1xuICAgICAgICB9XG4gICAgICAgIHdhc20uX09ydEZyZWUoZGltc09mZnNldCk7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IGRpbXMucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMSk7XG4gICAgICAgIHR5cGUgPSB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyhkYXRhVHlwZSk7XG5cbiAgICAgICAgY29uc3QgcHJlZmVycmVkTG9jYXRpb24gPSBpb0JpbmRpbmdTdGF0ZT8ub3V0cHV0UHJlZmVycmVkTG9jYXRpb25zW291dHB1dEluZGljZXNbaV1dO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmIChwcmVmZXJyZWRMb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiBHUFUuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0cmluZ0RhdGE6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IGRhdGFJbmRleCA9IGRhdGFPZmZzZXQgLyA0O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB3YXNtLkhFQVBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgICAgICAgY29uc3QgbWF4Qnl0ZXNUb1JlYWQgPSBpID09PSBzaXplIC0gMSA/IHVuZGVmaW5lZCA6IHdhc20uSEVBUFUzMltkYXRhSW5kZXhdIC0gb2Zmc2V0O1xuICAgICAgICAgICAgc3RyaW5nRGF0YS5wdXNoKHdhc20uVVRGOFRvU3RyaW5nKG9mZnNldCwgbWF4Qnl0ZXNUb1JlYWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0cHV0LnB1c2goW3R5cGUsIGRpbXMsIHN0cmluZ0RhdGEsICdjcHUnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgYSBjZXJ0YWluIG91dHB1dCdzIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBHUFUgYnV0IHRoZSB0ZW5zb3IgaXMgZW1wdHksIHdlIHN0aWxsIG5lZWQgdG8gY3JlYXRlIGEgQ1BVXG4gICAgICAgICAgLy8gdGVuc29yIGZvciBpdC4gVGhlcmUgaXMgbm8gbWFwcGluZyBHUFUgYnVmZmVyIGZvciBhbiBlbXB0eSB0ZW5zb3IuXG4gICAgICAgICAgaWYgKHByZWZlcnJlZExvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicgJiYgc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGdldEJ1ZmZlciA9IHdhc20uanNlcEdldEJ1ZmZlcjtcbiAgICAgICAgICAgIGlmICghZ2V0QnVmZmVyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJlZmVycmVkTG9jYXRpb24gXCJncHUtYnVmZmVyXCIgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IHVzaW5nIFdlYkdQVS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdwdUJ1ZmZlciA9IGdldEJ1ZmZlcihkYXRhT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gZ2V0VGVuc29yRWxlbWVudFNpemUoZGF0YVR5cGUpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplID09PSB1bmRlZmluZWQgfHwgIWlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkbyBub3QgcmVsZWFzZSB0aGUgdGVuc29yIHJpZ2h0IG5vdy4gaXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHVzZXIgY2FsbHMgdGVuc29yLmRpc3Bvc2UoKS5cbiAgICAgICAgICAgIGtlZXBPdXRwdXRUZW5zb3IgPSB0cnVlO1xuXG4gICAgICAgICAgICBvdXRwdXQucHVzaChbXG4gICAgICAgICAgICAgIHR5cGUsIGRpbXMsIHtcbiAgICAgICAgICAgICAgICBncHVCdWZmZXIsXG4gICAgICAgICAgICAgICAgZG93bmxvYWQ6IHdhc20uanNlcENyZWF0ZURvd25sb2FkZXIhKGdwdUJ1ZmZlciwgc2l6ZSAqIGVsZW1lbnRTaXplLCB0eXBlKSxcbiAgICAgICAgICAgICAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAnZ3B1LWJ1ZmZlcidcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlZEFycmF5Q29uc3RydWN0b3IgPSB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3IodHlwZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcihzaXplKTtcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgICAgICAuc2V0KHdhc20uSEVBUFU4LnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFt0eXBlLCBkaW1zLCBkYXRhLCAnY3B1J10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgd2FzbS5zdGFja1Jlc3RvcmUoYmVmb3JlR2V0VGVuc29yRGF0YVN0YWNrKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIGRhdGFPZmZzZXQpIHtcbiAgICAgICAgICB3YXNtLl9mcmVlKGRhdGFPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2VlcE91dHB1dFRlbnNvcikge1xuICAgICAgICAgIHdhc20uX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpb0JpbmRpbmdTdGF0ZSAmJiAhZW5hYmxlR3JhcGhDYXB0dXJlKSB7XG4gICAgICB3YXNtLl9PcnRDbGVhckJvdW5kT3V0cHV0cyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICAgICAgYWN0aXZlU2Vzc2lvbnMuc2V0KFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlLCBmYWxzZV0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKGJlZm9yZVJ1blN0YWNrKTtcblxuICAgIGlucHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKHYgPT4gd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgb3V0cHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKHYgPT4gd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgaW5wdXRPdXRwdXRBbGxvY3MuZm9yRWFjaChwID0+IHdhc20uX2ZyZWUocCkpO1xuXG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBydW5PcHRpb25zQWxsb2NzLmZvckVhY2gocCA9PiB3YXNtLl9mcmVlKHApKTtcbiAgfVxufTtcblxuLyoqXG4gKiBlbmQgcHJvZmlsaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBlbmRQcm9maWxpbmcgPSAoc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IHNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNlc3Npb24gaWQnKTtcbiAgfVxuICBjb25zdCBzZXNzaW9uSGFuZGxlID0gc2Vzc2lvblswXTtcblxuICAvLyBwcm9maWxlIGZpbGUgbmFtZSBpcyBub3QgdXNlZCB5ZXQsIGJ1dCBpdCBtdXN0IGJlIGZyZWVkLlxuICBjb25zdCBwcm9maWxlRmlsZU5hbWUgPSB3YXNtLl9PcnRFbmRQcm9maWxpbmcoc2Vzc2lvbkhhbmRsZSk7XG4gIGlmIChwcm9maWxlRmlsZU5hbWUgPT09IDApIHtcbiAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBnZXQgYW4gcHJvZmlsZSBmaWxlIG5hbWUuJyk7XG4gIH1cbiAgd2FzbS5fT3J0RnJlZShwcm9maWxlRmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUcmFuc2ZlcmFibGVCdWZmZXJzID0gKHRlbnNvcnM6IHJlYWRvbmx5IFNlcmlhbGl6YWJsZVRlbnNvck1ldGFkYXRhW10pOiBBcnJheUJ1ZmZlckxpa2VbXSA9PiB7XG4gIGNvbnN0IGJ1ZmZlcnM6IEFycmF5QnVmZmVyTGlrZVtdID0gW107XG4gIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvcnMpIHtcbiAgICBjb25zdCBkYXRhID0gdGVuc29yWzJdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSAmJiAnYnVmZmVyJyBpbiBkYXRhKSB7XG4gICAgICBidWZmZXJzLnB1c2goZGF0YS5idWZmZXIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnVmZmVycztcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8vLyA8cmVmZXJlbmNlIGxpYj1cIndlYndvcmtlclwiIC8+XG5cbi8vXG4vLyAqIHR5cGUgaGFjayBmb3IgXCJIVE1MSW1hZ2VFbGVtZW50XCJcbi8vXG4vLyBpbiB0eXBlc2NyaXB0LCB0aGUgdHlwZSBvZiBcIkhUTUxJbWFnZUVsZW1lbnRcIiBpcyBkZWZpbmVkIGluIGxpYi5kb20uZC50cywgd2hpY2ggaXMgY29uZmxpY3Qgd2l0aCBsaWIud2Vid29ya2VyLmQudHMuXG4vLyB3aGVuIHdlIHVzZSB3ZWJ3b3JrZXIsIHRoZSBsaWIud2Vid29ya2VyLmQudHMgd2lsbCBiZSB1c2VkLCB3aGljaCBkb2VzIG5vdCBoYXZlIEhUTUxJbWFnZUVsZW1lbnQgZGVmaW5lZC5cbi8vXG4vLyB3ZSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIGVycm9ycyBjb21wbGFpbmluZyB0aGF0IEhUTUxJbWFnZUVsZW1lbnQgaXMgbm90IGRlZmluZWQ6XG4vL1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vXG4vLyAuLi9jb21tb24vZGlzdC9janMvdGVuc29yLWZhY3RvcnkuZC50czoxODc6MjkgLSBlcnJvciBUUzI1NTI6IENhbm5vdCBmaW5kIG5hbWUgJ0hUTUxJbWFnZUVsZW1lbnQnLiBEaWQgeW91IG1lYW5cbi8vICdIVE1MTElFbGVtZW50Jz9cbi8vXG4vLyAxODcgICAgIGZyb21JbWFnZShpbWFnZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQsIG9wdGlvbnM/OiBUZW5zb3JGcm9tSW1hZ2VFbGVtZW50T3B0aW9ucyk6XG4vLyBQcm9taXNlPFR5cGVkVGVuc29yPCdmbG9hdDMyJz4gfCBUeXBlZFRlbnNvcjwndWludDgnPj47XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5+fn5+fn5+fn5+fn5+fn5cbi8vXG4vLyBub2RlX21vZHVsZXMvQHdlYmdwdS90eXBlcy9kaXN0L2luZGV4LmQudHM6ODM6NyAtIGVycm9yIFRTMjU1MjogQ2Fubm90IGZpbmQgbmFtZSAnSFRNTEltYWdlRWxlbWVudCcuIERpZCB5b3UgbWVhblxuLy8gJ0hUTUxMSUVsZW1lbnQnP1xuLy9cbi8vIDgzICAgICB8IEhUTUxJbWFnZUVsZW1lbnRcbi8vICAgICAgICAgIH5+fn5+fn5+fn5+fn5+fn5cbi8vXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy9cbi8vIGBIVE1MSW1hZ2VFbGVtZW50YCBpcyBvbmx5IHVzZWQgaW4gdHlwZSBkZWNsYXJhdGlvbiBhbmQgbm90IGluIHJlYWwgY29kZS4gU28gd2UgZGVmaW5lIGl0IGFzIGB1bmtub3duYCBoZXJlIHRvXG4vLyBieXBhc3MgdGhlIHR5cGUgY2hlY2suXG4vL1xuZGVjbGFyZSBnbG9iYWwge1xuICB0eXBlIEhUTUxJbWFnZUVsZW1lbnQgPSB1bmtub3duO1xufVxuXG5pbXBvcnQge09ydFdhc21NZXNzYWdlLCBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YX0gZnJvbSAnLi4vcHJveHktbWVzc2FnZXMnO1xuaW1wb3J0IHtjcmVhdGVTZXNzaW9uLCBjb3B5RnJvbUV4dGVybmFsQnVmZmVyLCBlbmRQcm9maWxpbmcsIGV4dHJhY3RUcmFuc2ZlcmFibGVCdWZmZXJzLCBpbml0RXAsIGluaXRSdW50aW1lLCByZWxlYXNlU2Vzc2lvbiwgcnVufSBmcm9tICcuLi93YXNtLWNvcmUtaW1wbCc7XG5pbXBvcnQge2luaXRpYWxpemVXZWJBc3NlbWJseX0gZnJvbSAnLi4vd2FzbS1mYWN0b3J5Jztcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZXY6IE1lc3NhZ2VFdmVudDxPcnRXYXNtTWVzc2FnZT4pOiB2b2lkID0+IHtcbiAgY29uc3Qge3R5cGUsIGluIDogbWVzc2FnZX0gPSBldi5kYXRhO1xuICB0cnkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaW5pdC13YXNtJzpcbiAgICAgICAgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5KG1lc3NhZ2UhLndhc20pXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpbml0UnVudGltZShtZXNzYWdlISkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZX0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBlcnJ9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5pdC1lcCc6IHtcbiAgICAgICAgY29uc3Qge2VwTmFtZSwgZW52fSA9IG1lc3NhZ2UhO1xuICAgICAgICBpbml0RXAoZW52LCBlcE5hbWUpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZX0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBlcnJ9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjb3B5LWZyb20nOiB7XG4gICAgICAgIGNvbnN0IHtidWZmZXJ9ID0gbWVzc2FnZSE7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckRhdGEgPSBjb3B5RnJvbUV4dGVybmFsQnVmZmVyKGJ1ZmZlcik7XG4gICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBvdXQ6IGJ1ZmZlckRhdGF9IGFzIE9ydFdhc21NZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjcmVhdGUnOiB7XG4gICAgICAgIGNvbnN0IHttb2RlbCwgb3B0aW9uc30gPSBtZXNzYWdlITtcbiAgICAgICAgY3JlYXRlU2Vzc2lvbihtb2RlbCwgb3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIHNlc3Npb25NZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgb3V0OiBzZXNzaW9uTWV0YWRhdGF9IGFzIE9ydFdhc21NZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncmVsZWFzZSc6XG4gICAgICAgIHJlbGVhc2VTZXNzaW9uKG1lc3NhZ2UhKTtcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGV9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdydW4nOiB7XG4gICAgICAgIGNvbnN0IHtzZXNzaW9uSWQsIGlucHV0SW5kaWNlcywgaW5wdXRzLCBvdXRwdXRJbmRpY2VzLCBvcHRpb25zfSA9IG1lc3NhZ2UhO1xuICAgICAgICBydW4oc2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0cywgb3V0cHV0SW5kaWNlcywgbmV3IEFycmF5KG91dHB1dEluZGljZXMubGVuZ3RoKS5maWxsKG51bGwpLCBvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgb3V0cHV0cyA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAob3V0cHV0cy5zb21lKG8gPT4gb1szXSAhPT0gJ2NwdScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBlcnI6ICdQcm94eSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1jcHUgdGVuc29yIGxvY2F0aW9uLid9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGUsIG91dDogb3V0cHV0c30gYXMgT3J0V2FzbU1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0VHJhbnNmZXJhYmxlQnVmZmVycyhbLi4uaW5wdXRzLCAuLi5vdXRwdXRzXSBhcyBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YVtdKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycn0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VuZC1wcm9maWxpbmcnOlxuICAgICAgICBlbmRQcm9maWxpbmcobWVzc2FnZSEpO1xuICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZX0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSBhcyBPcnRXYXNtTWVzc2FnZSk7XG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQWEsVUFBa0MsY0FBc0M7QUFBckY7QUFBQTtBQUFPLE1BQU0sV0FBVztBQUFpQixNQUFNLGVBQWU7QUFBaUIsTUFBTSxtQkFBbUI7QUFBQTtBQUFBOzs7QUNBeEc7QUFBQTtBQUFBLGdCQUFBQTtBQUFBO0FBQUEsTUFBYUE7QUFBYjtBQUFBO0FBQU8s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S0FBSztBQUFFLGtCQUFFLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtBQUFFLGtCQUFFO0FBQUEsWUFBQztBQUFDLG1CQUFPO0FBQUEsVUFBQyxHQUFFLEdBQUUsS0FBRyxDQUFDLE1BQUssQ0FBQyxHQUFFLENBQUMsQ0FBQyxHQUFFLEtBQUcsQ0FBQyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRSxHQUFFLEtBQUcsQ0FBQyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRTtBQUFFLG1CQUFTLEdBQUcsR0FBRTtBQUFDLGdCQUFJLElBQUUsTUFBTSxFQUFFLENBQUMsSUFBRSxDQUFDO0FBQUUsY0FBRSxHQUFFLEdBQUUsR0FBRSxFQUFFLE1BQU07QUFBRSxtQkFBTztBQUFBLFVBQUM7QUFDaFQsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMscUJBQVMsRUFBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFJLElBQUUsWUFBVSxPQUFPLElBQUUsRUFBRSxTQUFTLElBQUUsS0FBRyxJQUFHLEVBQUUsU0FBTztBQUFHLG9CQUFFLEVBQUUsQ0FBQyxJQUFFO0FBQUUscUJBQU87QUFBQSxZQUFDO0FBQUMscUJBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxxQkFBTyxFQUFFLEdBQUUsR0FBRSxHQUFHO0FBQUEsWUFBQztBQUFDLHFCQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMsdUJBQVMsRUFBRSxJQUFHO0FBQUMsdUJBQU8sSUFBRSxLQUFHLEtBQUcsSUFBRSxLQUFHLElBQUU7QUFBQSxjQUFDO0FBQUMsa0JBQUk7QUFBRSxxQkFBSyxJQUFFLEVBQUUsRUFBRSxZQUFZLElBQUUsRUFBRSxZQUFZLENBQUMsTUFBSSxPQUFLLElBQUUsRUFBRSxFQUFFLFNBQVMsSUFBRSxFQUFFLFNBQVMsQ0FBQyxPQUFLLElBQUUsRUFBRSxFQUFFLFFBQVEsSUFBRSxF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SyxPQUFHLEVBQUUsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDLEdBQUUsTUFBSyxPQUFHO0FBQUMsa0JBQUUsRUFBRTtBQUFHLG1CQUFHLElBQUUsSUFBRSxLQUFHLEtBQUcsTUFBSSxLQUFHO0FBQUkscUJBQU8sRUFBRSxHQUFFLENBQUM7QUFBQSxZQUFDLEdBQUUsTUFBSyxPQUFHO0FBQUMsdUJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFHLEVBQUUsS0FBRyxHQUFFLE1BQUksRUFBRSxFQUFFLEtBQUcsSUFBSSxJQUFFLEtBQUcsSUFBSSxHQUFHO0FBQUU7QUFBQyxxQkFBTyxFQUFFLEVBQUUsS0FBRyxHQUFFLENBQUM7QUFBQSxZQUFDLEdBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxLQUFHLEdBQUUsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDLEdBQUUsTUFBSyxNQUFJLE1BQUssTUFBSyxPQUFHLEtBQUcsRUFBRSxNQUFJLEtBQUcsRUFBRSxLQUFHLE9BQUssTUFBSyxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQyxHQUFFLE1BQUssTUFBSSxLQUFLLE1BQUssT0FBRyxFQUFFLE1BQUksR0FBRSxNQUFLLE9BQUcsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFHLElBQUUsRUFBRSxNQUFJLENBQUMsR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUNyZjtBQUFDLGtCQUFJLElBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxLQUFHLEVBQUUsS0FBRyxLQUFHLEtBQUcsQ0FBQztBQUFFLG9CQUFJLEVBQUUsS0FBRyxNQUFJLEVBQUUsS0FBRyxLQUFHLEtBQUc7QUFBSSxrQkFBRztBQUFFLHNCQUFJLE1BQUksS0FBRyxFQUFFLEtBQUcsTUFBSSxFQUFFLE1BQUksR0FBRSxLQUFHLEtBQUcsS0FBRyxLQUFHLEVBQUUsRUFBRSxFQUFFLE1BQUksSUFBRTtBQUFBLG1CQUFRO0FBQUMsb0JBQUU7QUFBRyxvQkFBSSxLQUFHLEVBQUUsS0FBRyxJQUFFLEVBQUUsS0FBRyxLQUFHO0FBQUUsaUJBQUMsS0FBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsTUFBSTtBQUFBLGNBQUc7QUFBQyxxQkFBTyxFQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxJQUFHLE1BQUssT0FBRyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUcsS0FBRyxFQUFFLEtBQUcsS0FBRyxLQUFHLENBQUMsR0FBRSxDQUFDLEdBQUUsTUFBSyxRQUFJLEVBQUUsS0FBRyxNQUFNLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxLQUFHLE1BQUssTUFBSyxPQUFHO0FBQUMsa0JBQUUsRUFBRTtBQUFHLGtCQUFJLElBQUUsS0FBRztBQUFFLGtCQUFFLEtBQUssSUFBSSxDQUFDLElBQUU7QUFBRyxzQkFBTyxJQUFFLE1BQUksT0FBSyxPQUFPLFVBQVEsSUFBRSxLQUFHLE1BQUksSUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQUEsWUFBQyxHQUFFLE1BQUssT0FBRyxFQUFFLElBQUcsTUFBSyxNQUFJLElBQUc7QUFBRSxnQkFBRSxFQUFFLFFBQVEsT0FBTSxNQUFVO0FBQUUsaUJBQUksS0FBSztBQUFFLGdCQUFFLFNBQVMsQ0FBQyxNQUNyZ0IsSUFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLEdBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUFHLGdCQUFFLEVBQUUsUUFBUSxTQUFRLEdBQUc7QUFBRSxnQkFBRSxHQUFHLENBQUM7QUFBRSxnQkFBRyxFQUFFLFNBQU87QUFBRSxxQkFBTztBQUFFLGNBQUUsSUFBSSxHQUFFLE1BQUksQ0FBQztBQUFFLG1CQUFPLEVBQUUsU0FBTztBQUFBLFVBQUM7QUFDakksY0FBSSxLQUFHO0FBQUEsWUFBQyxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxxQkFBSztBQUFFLGNBQUMsSUFBSSxHQUFHLENBQUMsRUFBRyxHQUFHLE1BQUksR0FBRSxNQUFJLENB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LEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDO0FBQUUsZ0JBQUUsRUFBQyxJQUFHLEVBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsSUFBRSxHQUFHLENBQUMsSUFBRSxHQUFFO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUU7QUFBQSxjQUFDLE1BQUs7QUFBQSxjQUF1QixNQUFLO0FBQUEsY0FBVyxNQUFLO0FBQUEsY0FBVyxNQUFLO0FBQUEsY0FBSyxNQUFLO0FBQUEsY0FBYyxNQUFLO0FBQUEsY0FBUSxNQUFLO0FBQUEsY0FBVyxNQUFLO0FBQUEsY0FDMWUsTUFBSztBQUFBLGNBQVcsT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQVcsT0FBTTtBQUFBLGNBQVcsT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLGNBQUssT0FBTTtBQUFBLFlBQUk7QUFBRSxxQkFBUSxLQUFLO0FBQUUsa0JBQUUsRUFBRSxRQUFRLElBQUksT0FBTyxHQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLGdCQUFJLEtBQUcsMkRBQTJELE1BQU0sR0FBRyxHQUFFLEtBQUcsd0ZBQXdGLE1BQU0sR0FBRztBQUFFLGdCQUFFO0FBQUEsY0FBQyxNQUFLLE9BQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLEdBQUUsQ0FBQztBQUFBLGNBQ3JmLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRTtBQUFBLGNBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRTtBQUFBLGNBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxLQUFHLFFBQU0sTUFBSSxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsR0FBRSxHQUFHO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsQ0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRztBQUFDLG9CQUFFLEVBQUU7QUFBRyxxQkFBRyxJQUFFLElBQUUsS0FBRyxLQUFHLE1BQUksS0FBRztBQUFJLHVCQUFPLEVBQUUsR0FBRSxDQUFDO0FBQUEsY0FBQztBQUFBLGNBQUUsTUFBSyxPQUFHO0FBQUMseUJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFHLEVBQUUsS0FBRyxHQUFFLE1BQUksRUFBRSxFQUFFLEtBQUcsSUFBSSxJQUFFLEtBQUcsSUFBSSxHQUFHO0FBQUU7QUFBQyx1QkFBTyxFQUFFLEVBQUUsS0FBRyxHQUFFLENBQUM7QUFBQSxjQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLEtBQUcsR0FBRSxDQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQztBQUFBLGNBQUUsTUFBSyxNQUFJO0FBQUEsY0FBSyxNQUFLLE9BQUcsS0FBRyxFQUFFLE1BQUksS0FBRyxFQUFFLEtBQUcsT0FBSztBQUFBLGNBQUssTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUM7QUFBQSxjQUFFLE1BQUssTUFBSTtBQUFBLGNBQUssTUFBSyxPQUFHLEVBQUUsTUFBSTtBQUFBLGNBQUUsTUFBSyxPQUFHLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FDeGYsSUFBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssT0FBRztBQUFDLG9CQUFJLElBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxLQUFHLEVBQUUsS0FBRyxLQUFHLEtBQUcsQ0FBQztBQUFFLHNCQUFJLEVBQUUsS0FBRyxNQUFJLEVBQUUsS0FBRyxLQUFHLEtBQUc7QUFBSSxvQkFBRztBQUFFLHdCQUFJLE1BQUksS0FBRyxFQUFFLEtBQUcsTUFBSSxFQUFFLE1BQUksR0FBRSxLQUFHLEtBQUcsS0FBRyxLQUFHLEVBQUUsRUFBRSxFQUFFLE1BQUksSUFBRTtBQUFBLHFCQUFRO0FBQUMsc0JBQUU7QUFBRyxzQkFBSSxLQUFHLEVBQUUsS0FBRyxJQUFFLEVBQUUsS0FBRyxLQUFHO0FBQUUsbUJBQUMsS0FBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsTUFBSTtBQUFBLGdCQUFHO0FBQUMsdUJBQU8sRUFBRSxHQUFFLENBQUM7QUFBQSxjQUFDO0FBQUEsY0FBRSxNQUFLLE9BQUcsRUFBRTtBQUFBLGNBQUcsTUFBSyxPQUFHLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxLQUFHLEVBQUUsS0FBRyxLQUFHLEtBQUcsQ0FBQyxHQUFFLENBQUM7QUFBQSxjQUFFLE1BQUssUUFBSSxFQUFFLEtBQUcsTUFBTSxTQUFT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QUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLGNBQWM7QUFBRSxnQkFBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLGNBQWM7QUFBRSxnQkFBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVk7QUFBRSxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVk7QUFBRSxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLGVBQWUsSUFBRTtBQUFLLGdCQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsVUFBVTtBQUFFLG1CQUFHLEVBQUUsUUFBUSxJQUFFLEtBQUssSUFBSSxFQUFFLGVBQWUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxLQUFHLFFBQU07QUFBRSxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRTtBQUFBLFlBQUM7QUFBQSxZQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGtCQUFFLElBQ3BmLFlBQVUsSUFBRSxVQUFRLENBQUMsQ0FBQyxLQUFHLE1BQUksS0FBRyxhQUFXLElBQUU7QUFBSSxxQkFBSztBQUFFLGtCQUFFLElBQUksS0FBSyxNQUFJLENBQUM7QUFBRSxnQkFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxRQUFRO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsZ0JBQUUsRUFB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QU07QUFDSiwwQkFBWSxFQUFDLEtBQUksQ0FBQztBQUFBLFlBQ3BCO0FBQUEsWUFDQSxTQUFPO0FBQ0wsMEJBQVksRUFBQyxNQUFNLElBQUcsQ0FBQztBQUFBLFlBQ3pCO0FBQUEsVUFBQztBQUNUO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSyxhQUFhO0FBQ2hCLGdCQUFNLEVBQUMsT0FBTSxJQUFJO0FBQ2pCLGdCQUFNLGFBQWEsdUJBQXVCLE1BQU07QUFDaEQsc0JBQVksRUFBQyxNQUFNLEtBQUssV0FBVSxDQUFtQjtBQUNyRDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUssVUFBVTtBQUNiLGdCQUFNLEVBQUMsT0FBTyxRQUFPLElBQUk7QUFDekIsd0JBQWMsT0FBTyxPQUFPLEVBQ3ZCO0FBQUEsWUFDRyxxQkFBbUI7QUFDakIsMEJBQVksRUFBQyxNQUFNLEtBQUssZ0JBQWUsQ0FBbUI7QUFBQSxZQUM1RDtBQUFBLFlBQ0EsU0FBTztBQUNMLDBCQUFZLEVBQUMsTUFBTSxJQUFHLENBQUM7QUFBQSxZQUN6QjtBQUFBLFVBQUM7QUFDVDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUs7QUFDSCx5QkFBZSxPQUFRO0FBQ3ZCLHNCQUFZLEVBQUMsS0FBSSxDQUFDO0FBQ2xCO0FBQUEsUUFDRixLQUFLLE9BQU87QUFDVixnQkFBTSxFQUFDLFdBQVcsY0FBYyxRQUFRLGVBQWUsUUFBTyxJQUFJO0FBQ2xFLGNBQUksV0FBVyxjQUFjLFFBQVEsZUFBZSxJQUFJLE1BQU0sY0FBYyxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsT0FBTyxFQUNsRztBQUFBLFlBQ0csYUFBVztBQUNULGtCQUFJLFFBQVEsS0FBSyxPQUFLLEVBQUUsQ0FBQyxNQUFNLEtBQUssR0FBRztBQUNyQyw0QkFBWSxFQUFDLE1BQU0sS0FBSyxrREFBaUQsQ0FBQztBQUFBLGNBQzVFLE9BQU87QUFDTDtBQUFBLGtCQUNJLEVBQUMsTUFBTSxLQUFLLFFBQU87QUFBQSxrQkFDbkIsMkJBQTJCLENBQUMsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFpQztBQUFBLGdCQUFDO0FBQUEsY0FDekY7QUFBQSxZQUNGO0FBQUEsWUFDQSxTQUFPO0FBQ0wsMEJBQVksRUFBQyxNQUFNLElBQUcsQ0FBQztBQUFBLFlBQ3pCO0FBQUEsVUFBQztBQUNUO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSztBQUNILHVCQUFhLE9BQVE7QUFDckIsc0JBQVksRUFBQyxLQUFJLENBQUM7QUFDbEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBUyxLQUFLO0FBQ1osa0JBQVksRUFBQyxNQUFNLElBQUcsQ0FBbUI7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7IiwKICAibmFtZXMiOiBbImpvaW4iLCAid2FzbSIsICJ3YXNtIiwgIndhc20iLCAicmVhZEZpbGUiLCAicmVhZEZpbGUiLCAid2FzbSIsICJ0ZW5zb3IiLCAiZXJyb3JDb2RlIiwgImkiXQp9Cg==\n'; + } +}); + +// web/lib/wasm/proxy-wrapper.ts +var isProxy, proxyWorker, initializing2, initialized2, aborted2, initWasmCallbacks, queuedCallbacks, enqueueCallbacks, ensureWorker, onProxyWorkerMessage, scriptSrc, initializeWebAssemblyAndOrtRuntime, initializeOrtEp, copyFromExternalBuffer2, createSession2, releaseSession2, run2, endProfiling2; +var init_proxy_wrapper = __esm({ + "web/lib/wasm/proxy-wrapper.ts"() { + "use strict"; + init_esm(); + init_wasm_core_impl(); + init_wasm_factory(); + isProxy = () => !!env2.wasm.proxy && typeof document !== "undefined"; + initializing2 = false; + initialized2 = false; + aborted2 = false; + queuedCallbacks = /* @__PURE__ */ new Map(); + enqueueCallbacks = (type, callbacks) => { + const queue = queuedCallbacks.get(type); + if (queue) { + queue.push(callbacks); + } else { + queuedCallbacks.set(type, [callbacks]); + } + }; + ensureWorker = () => { + if (initializing2 || !initialized2 || aborted2 || !proxyWorker) { + throw new Error("worker not ready"); + } + }; + onProxyWorkerMessage = (ev) => { + switch (ev.data.type) { + case "init-wasm": + initializing2 = false; + if (ev.data.err) { + aborted2 = true; + initWasmCallbacks[1](ev.data.err); + } else { + initialized2 = true; + initWasmCallbacks[0](); + } + break; + case "init-ep": + case "copy-from": + case "create": + case "release": + case "run": + case "end-profiling": { + const callbacks = queuedCallbacks.get(ev.data.type); + if (ev.data.err) { + callbacks.shift()[1](ev.data.err); + } else { + callbacks.shift()[0](ev.data.out); + } + break; + } + default: + } + }; + scriptSrc = typeof document !== "undefined" ? document?.currentScript?.src : void 0; + initializeWebAssemblyAndOrtRuntime = async () => { + if (initialized2) { + return; + } + if (initializing2) { + throw new Error("multiple calls to 'initWasm()' detected."); + } + if (aborted2) { + throw new Error("previous call to 'initWasm()' failed."); + } + initializing2 = true; + if (isProxy()) { + if (env2.wasm.wasmPaths === void 0) { + if (scriptSrc && scriptSrc.indexOf("blob:") !== 0) { + env2.wasm.wasmPaths = scriptSrc.substr(0, +scriptSrc.lastIndexOf("/") + 1); + } + } + return new Promise((resolve, reject) => { + proxyWorker?.terminate(); + const workerUrl = URL.createObjectURL(new Blob( + [ + // This require() function is handled by esbuild plugin to load file content as string. + // eslint-disable-next-line @typescript-eslint/no-require-imports + require_main() + ], + { type: "text/javascript" } + )); + proxyWorker = new Worker(workerUrl, { name: "ort-wasm-proxy-worker" }); + proxyWorker.onerror = (ev) => reject(ev); + proxyWorker.onmessage = onProxyWorkerMessage; + URL.revokeObjectURL(workerUrl); + initWasmCallbacks = [resolve, reject]; + const message = { type: "init-wasm", in: env2 }; + proxyWorker.postMessage(message); + }); + } else { + try { + await initializeWebAssembly(env2.wasm); + await initRuntime(env2); + initialized2 = true; + } catch (e) { + aborted2 = true; + throw e; + } finally { + initializing2 = false; + } + } + }; + initializeOrtEp = async (epName) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("init-ep", [resolve, reject]); + const message = { type: "init-ep", in: { epName, env: env2 } }; + proxyWorker.postMessage(message); + }); + } else { + await initEp(env2, epName); + } + }; + copyFromExternalBuffer2 = async (buffer) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("copy-from", [resolve, reject]); + const message = { type: "copy-from", in: { buffer } }; + proxyWorker.postMessage(message, [buffer.buffer]); + }); + } else { + return copyFromExternalBuffer(buffer); + } + }; + createSession2 = async (model, options) => { + if (isProxy()) { + if (options?.preferredOutputLocation) { + throw new Error('session option "preferredOutputLocation" is not supported for proxy.'); + } + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("create", [resolve, reject]); + const message = { type: "create", in: { model, options: { ...options } } }; + const transferable = []; + if (model instanceof Uint8Array) { + transferable.push(model.buffer); + } + proxyWorker.postMessage(message, transferable); + }); + } else { + return createSession(model, options); + } + }; + releaseSession2 = async (sessionId) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("release", [resolve, reject]); + const message = { type: "release", in: sessionId }; + proxyWorker.postMessage(message); + }); + } else { + releaseSession(sessionId); + } + }; + run2 = async (sessionId, inputIndices, inputs, outputIndices, outputs, options) => { + if (isProxy()) { + if (inputs.some((t) => t[3] !== "cpu")) { + throw new Error("input tensor on GPU is not supported for proxy."); + } + if (outputs.some((t) => t)) { + throw new Error("pre-allocated output tensor is not supported for proxy."); + } + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("run", [resolve, reject]); + const serializableInputs = inputs; + const message = { type: "run", in: { sessionId, inputIndices, inputs: serializableInputs, outputIndices, options } }; + proxyWorker.postMessage(message, extractTransferableBuffers(serializableInputs)); + }); + } else { + return run(sessionId, inputIndices, inputs, outputIndices, outputs, options); + } + }; + endProfiling2 = async (sessionId) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("end-profiling", [resolve, reject]); + const message = { type: "end-profiling", in: sessionId }; + proxyWorker.postMessage(message); + }); + } else { + endProfiling(sessionId); + } + }; + } +}); + +// web/lib/wasm/session-handler-inference.ts +var encodeTensorMetadata, decodeTensorMetadata, OnnxruntimeWebAssemblySessionHandler; +var init_session_handler_inference = __esm({ + "web/lib/wasm/session-handler-inference.ts"() { + "use strict"; + init_esm(); + init_proxy_wrapper(); + init_wasm_common(); + init_wasm_utils_load_file(); + encodeTensorMetadata = (tensor, getName) => { + switch (tensor.location) { + case "cpu": + return [tensor.type, tensor.dims, tensor.data, "cpu"]; + case "gpu-buffer": + return [tensor.type, tensor.dims, { gpuBuffer: tensor.gpuBuffer }, "gpu-buffer"]; + default: + throw new Error(`invalid data location: ${tensor.location} for ${getName()}`); + } + }; + decodeTensorMetadata = (tensor) => { + switch (tensor[3]) { + case "cpu": + return new Tensor2(tensor[0], tensor[2], tensor[1]); + case "gpu-buffer": { + const dataType = tensor[0]; + if (!isGpuBufferSupportedType(dataType)) { + throw new Error(`not supported data type: ${dataType} for deserializing GPU tensor`); + } + const { gpuBuffer, download, dispose } = tensor[2]; + return Tensor2.fromGpuBuffer(gpuBuffer, { dataType, dims: tensor[1], download, dispose }); + } + default: + throw new Error(`invalid data location: ${tensor[3]}`); + } + }; + OnnxruntimeWebAssemblySessionHandler = class { + async fetchModelAndCopyToWasmMemory(path) { + return copyFromExternalBuffer2(await loadFile(path)); + } + async loadModel(pathOrBuffer, options) { + TRACE_FUNC_BEGIN(); + let model; + if (typeof pathOrBuffer === "string") { + if (typeof process !== "undefined" && process.versions && process.versions.node) { + model = await loadFile(pathOrBuffer); + } else { + model = await this.fetchModelAndCopyToWasmMemory(pathOrBuffer); + } + } else { + model = pathOrBuffer; + } + [this.sessionId, this.inputNames, this.outputNames] = await createSession2(model, options); + TRACE_FUNC_END(); + } + async dispose() { + return releaseSession2(this.sessionId); + } + async run(feeds, fetches, options) { + TRACE_FUNC_BEGIN(); + const inputArray = []; + const inputIndices = []; + Object.entries(feeds).forEach((kvp) => { + const name = kvp[0]; + const tensor = kvp[1]; + const index = this.inputNames.indexOf(name); + if (index === -1) { + throw new Error(`invalid input '${name}'`); + } + inputArray.push(tensor); + inputIndices.push(index); + }); + const outputArray = []; + const outputIndices = []; + Object.entries(fetches).forEach((kvp) => { + const name = kvp[0]; + const tensor = kvp[1]; + const index = this.outputNames.indexOf(name); + if (index === -1) { + throw new Error(`invalid output '${name}'`); + } + outputArray.push(tensor); + outputIndices.push(index); + }); + const inputs = inputArray.map((t, i) => encodeTensorMetadata(t, () => `input "${this.inputNames[inputIndices[i]]}"`)); + const outputs = outputArray.map( + (t, i) => t ? encodeTensorMetadata(t, () => `output "${this.outputNames[outputIndices[i]]}"`) : null + ); + const results = await run2(this.sessionId, inputIndices, inputs, outputIndices, outputs, options); + const resultMap = {}; + for (let i = 0; i < results.length; i++) { + resultMap[this.outputNames[outputIndices[i]]] = outputArray[i] ?? decodeTensorMetadata(results[i]); + } + TRACE_FUNC_END(); + return resultMap; + } + startProfiling() { + } + endProfiling() { + void endProfiling2(this.sessionId); + } + }; + } +}); + +// web/lib/backend-wasm.ts +var initializeFlags, OnnxruntimeWebAssemblyBackend; +var init_backend_wasm = __esm({ + "web/lib/backend-wasm.ts"() { + "use strict"; + init_node_os(); + init_esm(); + init_proxy_wrapper(); + init_session_handler_inference(); + initializeFlags = () => { + if (typeof env2.wasm.initTimeout !== "number" || env2.wasm.initTimeout < 0) { + env2.wasm.initTimeout = 0; + } + if (typeof env2.wasm.simd !== "boolean") { + env2.wasm.simd = true; + } + if (typeof env2.wasm.proxy !== "boolean") { + env2.wasm.proxy = false; + } + if (typeof env2.wasm.trace !== "boolean") { + env2.wasm.trace = false; + } + if (typeof env2.wasm.numThreads !== "number" || !Number.isInteger(env2.wasm.numThreads) || env2.wasm.numThreads <= 0) { + if (typeof self !== "undefined" && !self.crossOriginIsolated || typeof process !== "undefined" && process.versions && process.versions.node) { + env2.wasm.numThreads = 1; + } + const numCpuLogicalCores = typeof navigator === "undefined" ? cpus().length : navigator.hardwareConcurrency; + env2.wasm.numThreads = Math.min(4, Math.ceil((numCpuLogicalCores || 1) / 2)); + } + }; + OnnxruntimeWebAssemblyBackend = class { + /** + * This function initializes the WebAssembly backend. + * + * This function will be called only once for each backend name. It will be called the first time when + * `ort.InferenceSession.create()` is called with a registered backend name. + * + * @param backendName - the registered backend name. + */ + async init(backendName) { + initializeFlags(); + await initializeWebAssemblyAndOrtRuntime(); + await initializeOrtEp(backendName); + } + async createInferenceSessionHandler(pathOrBuffer, options) { + const handler = new OnnxruntimeWebAssemblySessionHandler(); + await handler.loadModel(pathOrBuffer, options); + return Promise.resolve(handler); + } + }; + } +}); + +// web/lib/wasm/wasm-training-core-impl.ts +var NO_TRAIN_FUNCS_MSG, ifErrCodeCheckLastError, createCheckpointHandle, getModelInputOutputCount, getModelInputOutputNamesLoop, getModelInputOutputNames, createTrainingSessionHandle, createAndAllocateTensors, moveOutputToTensorMetadataArr, lazyResetGrad, runTrainStep, runOptimizerStep, runEvalStep, getParametersSize, getContiguousParameters, loadParametersBuffer, releaseTrainingSessionAndCheckpoint; +var init_wasm_training_core_impl = __esm({ + "web/lib/wasm/wasm-training-core-impl.ts"() { + "use strict"; + init_run_options(); + init_session_options(); + init_wasm_common(); + init_wasm_core_impl(); + init_wasm_factory(); + init_wasm_utils(); + NO_TRAIN_FUNCS_MSG = "Built without training API's enabled. Use the onnxruntime-web/training import for training functionality, and make sure that all the correct artifacts are built & moved to the correct folder if using a custom build. Check https://onnxruntime.ai/docs/build/web.html for more information."; + ifErrCodeCheckLastError = (errCode, message, checkNeqZero = true) => { + if (checkNeqZero && errCode !== 0) { + checkLastError(message); + } else if (!checkNeqZero && errCode === 0) { + checkLastError(message); + } + }; + createCheckpointHandle = (checkpointData) => { + const wasm2 = getInstance(); + const [checkpointDataOffset, checkpointDataLength] = checkpointData; + let checkpointHandle = 0; + try { + if (wasm2._OrtTrainingLoadCheckpoint) { + checkpointHandle = wasm2._OrtTrainingLoadCheckpoint(checkpointDataOffset, checkpointDataLength); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + ifErrCodeCheckLastError(checkpointHandle, "Error occurred when trying to create a CheckpointState", false); + return checkpointHandle; + } catch (e) { + if (wasm2._OrtTrainingReleaseCheckpoint && checkpointHandle !== 0) { + wasm2._OrtTrainingReleaseCheckpoint(checkpointHandle); + } + throw e; + } finally { + wasm2._OrtFree(checkpointData[0]); + } + }; + getModelInputOutputCount = (trainingSessionId, isEvalModel) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + try { + const dataOffset = wasm2.stackAlloc(8); + if (wasm2._OrtTrainingGetModelInputOutputCount) { + const errorCode = wasm2._OrtTrainingGetModelInputOutputCount(trainingSessionId, dataOffset, dataOffset + 4, isEvalModel); + ifErrCodeCheckLastError(errorCode, "Can't get session input/output count."); + return [wasm2.HEAP32[dataOffset / 4], wasm2.HEAP32[dataOffset / 4 + 1]]; + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + } finally { + wasm2.stackRestore(stack); + } + }; + getModelInputOutputNamesLoop = (trainingSessionId, count, isInput, isEvalModel) => { + const names = []; + const wasm2 = getInstance(); + for (let i = 0; i < count; i++) { + if (wasm2._OrtTrainingGetModelInputOutputName) { + const name = wasm2._OrtTrainingGetModelInputOutputName(trainingSessionId, i, isInput, isEvalModel); + ifErrCodeCheckLastError(name, `Can't get input or output name -- is input: ${isInput}, index ${i}`, false); + names.push(wasm2.UTF8ToString(name)); + wasm2._free(name); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + } + return names; + }; + getModelInputOutputNames = (trainingSessionId, isEvalModel) => { + let inputNames = []; + let outputNames = []; + const [inputCount, outputCount] = getModelInputOutputCount(trainingSessionId, isEvalModel); + inputNames = getModelInputOutputNamesLoop(trainingSessionId, inputCount, true, isEvalModel); + outputNames = getModelInputOutputNamesLoop(trainingSessionId, outputCount, false, isEvalModel); + return [inputNames, outputNames]; + }; + createTrainingSessionHandle = (checkpointHandle, trainModelData, evalModelData, optimizerModelData, options) => { + const wasm2 = getInstance(); + let trainingSessionHandle = 0; + let sessionOptionsHandle = 0; + let allocs = []; + try { + [sessionOptionsHandle, allocs] = setSessionOptions(options); + if (wasm2._OrtTrainingCreateSession) { + trainingSessionHandle = wasm2._OrtTrainingCreateSession( + sessionOptionsHandle, + checkpointHandle, + trainModelData[0], + trainModelData[1], + evalModelData[0], + evalModelData[1], + optimizerModelData[0], + optimizerModelData[1] + ); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + ifErrCodeCheckLastError(trainingSessionHandle, "Error occurred when trying to create a TrainingSession", false); + return trainingSessionHandle; + } catch (e) { + if (wasm2._OrtTrainingReleaseSession && trainingSessionHandle !== 0) { + wasm2._OrtTrainingReleaseSession(trainingSessionHandle); + } + throw e; + } finally { + wasm2._free(trainModelData[0]); + wasm2._free(evalModelData[0]); + wasm2._free(optimizerModelData[0]); + if (sessionOptionsHandle !== 0) { + wasm2._OrtReleaseSessionOptions(sessionOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + } + }; + createAndAllocateTensors = (trainingSessionId, indices, tensors, tensorHandles, inputOutputAllocs, indexAdd) => { + const count = indices.length; + for (let i = 0; i < count; i++) { + prepareInputOutputTensor( + tensors[i], + tensorHandles, + inputOutputAllocs, + trainingSessionId, + indexAdd + indices[i] + ); + } + const wasm2 = getInstance(); + const valuesOffset = wasm2.stackAlloc(count * 4); + let valuesIndex = valuesOffset / 4; + for (let i = 0; i < count; i++) { + wasm2.HEAPU32[valuesIndex++] = tensorHandles[i]; + } + return valuesOffset; + }; + moveOutputToTensorMetadataArr = (outputValuesOffset, outputCount, outputTensorHandles, outputTensors) => { + const wasm2 = getInstance(); + const output = []; + for (let i = 0; i < outputCount; i++) { + const tensor = wasm2.HEAPU32[outputValuesOffset / 4 + i]; + if (tensor === outputTensorHandles[i]) { + output.push(outputTensors[i]); + continue; + } + const beforeGetTensorDataStack = wasm2.stackSave(); + const tensorDataOffset = wasm2.stackAlloc(4 * 4); + let type, dataOffset = 0; + try { + const errorCode = wasm2._OrtGetTensorData( + tensor, + tensorDataOffset, + tensorDataOffset + 4, + tensorDataOffset + 8, + tensorDataOffset + 12 + ); + ifErrCodeCheckLastError(errorCode, `Can't access output tensor data on index ${i}.`); + let tensorDataIndex = tensorDataOffset / 4; + const dataType = wasm2.HEAPU32[tensorDataIndex++]; + dataOffset = wasm2.HEAPU32[tensorDataIndex++]; + const dimsOffset = wasm2.HEAPU32[tensorDataIndex++]; + const dimsLength = wasm2.HEAPU32[tensorDataIndex++]; + const dims = []; + for (let i2 = 0; i2 < dimsLength; i2++) { + dims.push(wasm2.HEAPU32[dimsOffset / 4 + i2]); + } + wasm2._OrtFree(dimsOffset); + const size = dims.reduce((a, b) => a * b, 1); + type = tensorDataTypeEnumToString(dataType); + if (type === "string") { + const stringData = []; + let dataIndex = dataOffset / 4; + for (let i2 = 0; i2 < size; i2++) { + const offset = wasm2.HEAPU32[dataIndex++]; + const maxBytesToRead = i2 === size - 1 ? void 0 : wasm2.HEAPU32[dataIndex] - offset; + stringData.push(wasm2.UTF8ToString(offset, maxBytesToRead)); + } + output.push([type, dims, stringData, "cpu"]); + } else { + const typedArrayConstructor = tensorTypeToTypedArrayConstructor(type); + const data = new typedArrayConstructor(size); + new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength)); + output.push([type, dims, data, "cpu"]); + } + } finally { + wasm2.stackRestore(beforeGetTensorDataStack); + if (type === "string" && dataOffset) { + wasm2._free(dataOffset); + } + wasm2._OrtReleaseTensor(tensor); + } + } + return output; + }; + lazyResetGrad = async (trainingSessionId) => { + const wasm2 = getInstance(); + if (wasm2._OrtTrainingLazyResetGrad) { + const errorCode = wasm2._OrtTrainingLazyResetGrad(trainingSessionId); + ifErrCodeCheckLastError(errorCode, "Can't call lazyResetGrad."); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + }; + runTrainStep = async (trainingSessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => { + const wasm2 = getInstance(); + const inputCount = inputIndices.length; + const outputCount = outputIndices.length; + let runOptionsHandle = 0; + let runOptionsAllocs = []; + const inputTensorHandles = []; + const outputTensorHandles = []; + const inputOutputAllocs = []; + const beforeRunStack = wasm2.stackSave(); + try { + [runOptionsHandle, runOptionsAllocs] = setRunOptions(options); + const inputValuesOffset = createAndAllocateTensors( + trainingSessionId, + inputIndices, + inputTensors, + inputTensorHandles, + inputOutputAllocs, + 0 + ); + const outputValuesOffset = createAndAllocateTensors( + trainingSessionId, + outputIndices, + outputTensors, + outputTensorHandles, + inputOutputAllocs, + inputCount + ); + if (wasm2._OrtTrainingRunTrainStep) { + const errorCode = wasm2._OrtTrainingRunTrainStep( + trainingSessionId, + inputValuesOffset, + inputCount, + outputValuesOffset, + outputCount, + runOptionsHandle + ); + ifErrCodeCheckLastError(errorCode, "failed to call OrtTrainingRunTrainStep in the WebAssembly layer"); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + return moveOutputToTensorMetadataArr(outputValuesOffset, outputCount, outputTensorHandles, outputTensors); + } finally { + wasm2.stackRestore(beforeRunStack); + inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + inputOutputAllocs.forEach((p) => wasm2._free(p)); + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + runOptionsAllocs.forEach((p) => wasm2._free(p)); + } + }; + runOptimizerStep = async (trainingSessionId, options) => { + const wasm2 = getInstance(); + let runOptionsHandle = 0; + let runOptionsAllocs = []; + try { + [runOptionsHandle, runOptionsAllocs] = setRunOptions(options); + if (wasm2._OrtTrainingOptimizerStep) { + const errCode = wasm2._OrtTrainingOptimizerStep(trainingSessionId, runOptionsHandle); + ifErrCodeCheckLastError(errCode, "Failed to call OrtTrainingOptimizerStep in the WebAssembly layer"); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + } finally { + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + runOptionsAllocs.forEach((p) => wasm2._free(p)); + } + }; + runEvalStep = async (trainingSessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => { + const wasm2 = getInstance(); + const inputCount = inputIndices.length; + const outputCount = outputIndices.length; + let runOptionsHandle = 0; + let runOptionsAllocs = []; + const inputTensorHandles = []; + const outputTensorHandles = []; + const inputOutputAllocs = []; + const beforeRunStack = wasm2.stackSave(); + try { + [runOptionsHandle, runOptionsAllocs] = setRunOptions(options); + const inputValuesOffset = createAndAllocateTensors( + trainingSessionId, + inputIndices, + inputTensors, + inputTensorHandles, + inputOutputAllocs, + 0 + ); + const outputValuesOffset = createAndAllocateTensors( + trainingSessionId, + outputIndices, + outputTensors, + outputTensorHandles, + inputOutputAllocs, + inputCount + ); + if (wasm2._OrtTrainingEvalStep) { + const errorCode = wasm2._OrtTrainingEvalStep( + trainingSessionId, + inputValuesOffset, + inputCount, + outputValuesOffset, + outputCount, + runOptionsHandle + ); + ifErrCodeCheckLastError(errorCode, "failed to call OrtTrainingEvalStep in the WebAssembly layer"); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + return moveOutputToTensorMetadataArr(outputValuesOffset, outputCount, outputTensorHandles, outputTensors); + } finally { + wasm2.stackRestore(beforeRunStack); + inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + inputOutputAllocs.forEach((p) => wasm2._free(p)); + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + runOptionsAllocs.forEach((p) => wasm2._free(p)); + } + }; + getParametersSize = (trainingSessionId, trainableOnly) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + try { + const sizeOffset = wasm2.stackAlloc(4); + if (wasm2._OrtTrainingGetParametersSize) { + const errorCode = wasm2._OrtTrainingGetParametersSize(trainingSessionId, sizeOffset, trainableOnly); + ifErrCodeCheckLastError(errorCode, "Can't get parameters size"); + return wasm2.HEAP32[sizeOffset / 4]; + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + } finally { + wasm2.stackRestore(stack); + } + }; + getContiguousParameters = async (trainingSessionId, trainableOnly) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + const tensorTypeAsString = "float32"; + const locationAsString = "cpu"; + const parametersSize = getParametersSize(trainingSessionId, trainableOnly); + let tensor = 0; + const paramsByteLength = 4 * parametersSize; + const paramsOffset = wasm2._malloc(paramsByteLength); + const dims = [parametersSize]; + const dimsOffset = wasm2.stackAlloc(4); + const dimsIndex = dimsOffset / 4; + wasm2.HEAP32[dimsIndex] = parametersSize; + try { + tensor = wasm2._OrtCreateTensor( + tensorDataTypeStringToEnum(tensorTypeAsString), + paramsOffset, + paramsByteLength, + dimsOffset, + dims.length, + dataLocationStringToEnum(locationAsString) + ); + ifErrCodeCheckLastError( + tensor, + `Can't create tensor for getContiguousParameters. session=${trainingSessionId}.`, + false + ); + if (wasm2._OrtTrainingCopyParametersToBuffer) { + const errCode = wasm2._OrtTrainingCopyParametersToBuffer(trainingSessionId, tensor, parametersSize, trainableOnly); + ifErrCodeCheckLastError(errCode, "Can't get contiguous parameters."); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + const typedArrayConstructor = tensorTypeToTypedArrayConstructor(tensorTypeAsString); + const data = new typedArrayConstructor(parametersSize); + const output = []; + new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(paramsOffset, paramsOffset + paramsByteLength)); + output.push([tensorTypeAsString, dims, data, locationAsString]); + if (output.length !== 1) { + throw new Error(`something unexpected happened in the getContiguousParameters function. Expected output length of + one, got ${output.length}`); + } else { + return output[0]; + } + } finally { + if (tensor !== 0) { + wasm2._OrtReleaseTensor(tensor); + } + wasm2._free(paramsOffset); + wasm2._free(dimsOffset); + wasm2.stackRestore(stack); + } + }; + loadParametersBuffer = async (trainingSessionId, buffer, trainableOnly) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + const tensorTypeAsString = "float32"; + const locationAsString = "cpu"; + const bufferByteLength = buffer.length; + const bufferCount = bufferByteLength / 4; + const bufferOffset = wasm2._malloc(bufferByteLength); + wasm2.HEAPU8.set(buffer, bufferOffset); + const dimsOffset = wasm2.stackAlloc(4); + wasm2.HEAP32[dimsOffset / 4] = bufferCount; + const dimsLength = 1; + let tensor = 0; + try { + tensor = wasm2._OrtCreateTensor( + tensorDataTypeStringToEnum(tensorTypeAsString), + bufferOffset, + bufferByteLength, + dimsOffset, + dimsLength, + dataLocationStringToEnum(locationAsString) + ); + ifErrCodeCheckLastError(tensor, `Can't create tensor for input/output. session=${trainingSessionId}`, false); + if (wasm2._OrtTrainingCopyParametersFromBuffer) { + const errCode = wasm2._OrtTrainingCopyParametersFromBuffer(trainingSessionId, tensor, bufferCount, trainableOnly); + ifErrCodeCheckLastError(errCode, "Can't copy buffer to parameters."); + } else { + throw new Error(NO_TRAIN_FUNCS_MSG); + } + } finally { + if (tensor !== 0) { + wasm2._OrtReleaseTensor(tensor); + } + wasm2.stackRestore(stack); + wasm2._free(bufferOffset); + wasm2._free(dimsOffset); + } + }; + releaseTrainingSessionAndCheckpoint = (checkpointId, sessionId) => { + const wasm2 = getInstance(); + if (wasm2._OrtTrainingReleaseSession) { + wasm2._OrtTrainingReleaseSession(sessionId); + } + if (wasm2._OrtTrainingReleaseCheckpoint) { + wasm2._OrtTrainingReleaseCheckpoint(checkpointId); + } + }; + } +}); + +// web/lib/wasm/session-handler-training.ts +var OnnxruntimeWebAssemblyTrainingSessionHandler; +var init_session_handler_training = __esm({ + "web/lib/wasm/session-handler-training.ts"() { + "use strict"; + init_session_handler_inference(); + init_wasm_core_impl(); + init_wasm_training_core_impl(); + OnnxruntimeWebAssemblyTrainingSessionHandler = class { + constructor() { + this.evalInputNames = []; + this.evalOutputNames = []; + } + async uriOrBufferToHeap(uriOrBuffer) { + let buffer; + if (typeof uriOrBuffer === "string") { + const response = await fetch(uriOrBuffer); + const arrayBuffer = await response.arrayBuffer(); + buffer = new Uint8Array(arrayBuffer); + } else { + buffer = uriOrBuffer; + } + return copyFromExternalBuffer(buffer); + } + async createTrainingSession(checkpointStateUriOrBuffer, trainModelUriOrBuffer, evalModelUriOrBuffer, optimizerModelUriOrBuffer, options) { + const checkpointData = await this.uriOrBufferToHeap(checkpointStateUriOrBuffer); + const trainModelData = await this.uriOrBufferToHeap(trainModelUriOrBuffer); + let evalModelData = [0, 0]; + let optimizerModelData = [0, 0]; + if (evalModelUriOrBuffer !== "") { + evalModelData = await this.uriOrBufferToHeap(evalModelUriOrBuffer); + } + if (optimizerModelUriOrBuffer !== "") { + optimizerModelData = await this.uriOrBufferToHeap(optimizerModelUriOrBuffer); + } + this.checkpointId = createCheckpointHandle(checkpointData); + this.sessionId = createTrainingSessionHandle(this.checkpointId, trainModelData, evalModelData, optimizerModelData, options); + [this.inputNames, this.outputNames] = getModelInputOutputNames(this.sessionId, false); + if (evalModelUriOrBuffer !== "") { + [this.evalInputNames, this.evalOutputNames] = getModelInputOutputNames(this.sessionId, true); + } + } + /** + * Helper method that converts a feeds or fetches datatype to two arrays, one of values and one that stores the + * corresponding name as a number referring to the index in the list of names provided. + * + * @param feeds meant to match either SessionHandler.FeedsType or SessionHandler.FetchesType + * @param names either inputNames or outputNames + * @returns a tuple of a list of values and a list of indices. + */ + convertMapIntoValuesArrayAndIndicesArray(feeds, names, mapFunc) { + const values = []; + const indices = []; + Object.entries(feeds).forEach((kvp) => { + const name = kvp[0]; + const tensor = kvp[1]; + const index = names.indexOf(name); + if (index === -1) { + throw new Error(`invalid input '${name}`); + } + values.push(tensor); + indices.push(index); + }); + const uList = values.map(mapFunc); + return [values, indices, uList]; + } + /** + * Helper method that converts the TensorMetadata that the wasm-core functions return to the + * SessionHandler.ReturnType. Any outputs in the provided outputArray that are falsy will be populated with the + * corresponding result. + * + * @param results used to populate the resultMap if there is no value for that outputName already + * @param outputArray used to populate the resultMap. If null or undefined, use the corresponding result from results + * @param outputIndices specifies which outputName the corresponding value for outputArray refers to. + * @returns a map of output names and OnnxValues. + */ + convertTensorMetadataToReturnType(results, outputArray, outputIndices) { + const resultMap = {}; + for (let i = 0; i < results.length; i++) { + resultMap[this.outputNames[outputIndices[i]]] = outputArray[i] ?? decodeTensorMetadata(results[i]); + } + return resultMap; + } + async lazyResetGrad() { + await lazyResetGrad(this.sessionId); + } + async runTrainStep(feeds, fetches, options) { + const [, inputIndices, inputs] = this.convertMapIntoValuesArrayAndIndicesArray( + feeds, + this.inputNames, + (t, i) => encodeTensorMetadata(t, () => `input "${this.inputNames[inputIndices[i]]}"`) + ); + const [outputArray, outputIndices, outputs] = this.convertMapIntoValuesArrayAndIndicesArray( + fetches, + this.outputNames, + (t, i) => t ? encodeTensorMetadata(t, () => `output "${this.outputNames[outputIndices[i]]}"`) : null + ); + const results = await runTrainStep(this.sessionId, inputIndices, inputs, outputIndices, outputs, options); + return this.convertTensorMetadataToReturnType(results, outputArray, outputIndices); + } + async runOptimizerStep(options) { + await runOptimizerStep(this.sessionId, options); + } + async runEvalStep(feeds, fetches, options) { + const [, inputIndices, inputs] = this.convertMapIntoValuesArrayAndIndicesArray( + feeds, + this.evalInputNames, + (t, i) => encodeTensorMetadata(t, () => `input "${this.evalInputNames[inputIndices[i]]}"`) + ); + const [outputArray, outputIndices, outputs] = this.convertMapIntoValuesArrayAndIndicesArray( + fetches, + this.evalOutputNames, + (t, i) => t ? encodeTensorMetadata(t, () => `output "${this.evalOutputNames[outputIndices[i]]}"`) : null + ); + const results = await runEvalStep(this.sessionId, inputIndices, inputs, outputIndices, outputs, options); + return this.convertTensorMetadataToReturnType(results, outputArray, outputIndices); + } + async getParametersSize(trainableOnly) { + return getParametersSize(this.sessionId, trainableOnly); + } + async loadParametersBuffer(array, trainableOnly) { + await loadParametersBuffer(this.sessionId, array, trainableOnly); + } + async getContiguousParameters(trainableOnly) { + const tensorResult = await getContiguousParameters(this.sessionId, trainableOnly); + return decodeTensorMetadata(tensorResult); + } + async dispose() { + return releaseTrainingSessionAndCheckpoint(this.checkpointId, this.sessionId); + } + }; + } +}); + +// web/lib/backend-wasm-training.ts +var backend_wasm_training_exports = {}; +__export(backend_wasm_training_exports, { + wasmBackend: () => wasmBackend +}); +var OnnxruntimeTrainingWebAssemblyBackend, wasmBackend; +var init_backend_wasm_training = __esm({ + "web/lib/backend-wasm-training.ts"() { + "use strict"; + init_backend_wasm(); + init_session_handler_training(); + OnnxruntimeTrainingWebAssemblyBackend = class extends OnnxruntimeWebAssemblyBackend { + async createTrainingSessionHandler(checkpointStateUriOrBuffer, trainModelUriOrBuffer, evalModelUriOrBuffer, optimizerModelUriOrBuffer, options) { + const handler = new OnnxruntimeWebAssemblyTrainingSessionHandler(); + await handler.createTrainingSession( + checkpointStateUriOrBuffer, + trainModelUriOrBuffer, + evalModelUriOrBuffer, + optimizerModelUriOrBuffer, + options + ); + return Promise.resolve(handler); + } + }; + wasmBackend = new OnnxruntimeTrainingWebAssemblyBackend(); + } +}); + +// web/lib/index.ts +init_esm(); +init_esm(); +init_esm(); + +// web/lib/version.ts +var version2 = "1.18.0"; + +// web/lib/index.ts +var lib_default = esm_exports; +if (false) { + const onnxjsBackend = null.onnxjsBackend; + registerBackend("webgl", onnxjsBackend, -10); +} +if (true) { + const wasmBackend2 = false ? null.wasmBackend : (init_backend_wasm_training(), __toCommonJS(backend_wasm_training_exports)).wasmBackend; + if (false) { + registerBackend("webgpu", wasmBackend2, 5); + registerBackend("webnn", wasmBackend2, 5); + } + registerBackend("cpu", wasmBackend2, 10); + registerBackend("wasm", wasmBackend2, 10); +} +Object.defineProperty(env2.versions, "web", { value: version2, enumerable: true }); +export { + InferenceSession2 as InferenceSession, + TRACE, + TRACE_FUNC_BEGIN, + TRACE_FUNC_END, + Tensor2 as Tensor, + TrainingSession2 as TrainingSession, + lib_default as default, + env2 as env, + registerBackend +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vY29tbW9uL2xpYi9iYWNrZW5kLWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9iYWNrZW5kLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdmVyc2lvbi50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL2Vudi1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvZW52LnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLWNvbnZlcnNpb24taW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1mYWN0b3J5LWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItaW1wbC10eXBlLW1hcHBpbmcudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItdXRpbHMtaW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdHJhY2UudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9pbmZlcmVuY2Utc2Vzc2lvbi1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvaW5mZXJlbmNlLXNlc3Npb24udHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItY29udmVyc2lvbi50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1mYWN0b3J5LnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvb25ueC1tb2RlbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL29ubngtdmFsdWUudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90cmFpbmluZy1zZXNzaW9uLWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90cmFpbmluZy1zZXNzaW9uLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvaW5kZXgudHMiLCAibm9kZWpzLWlnbm9yZTpub2RlOm9zIiwgIm5vZGVqcy1pZ25vcmU6bm9kZTpwYXRoIiwgIm5vZGVqcy1pZ25vcmU6ZnMiLCAibm9kZWpzLWlnbm9yZTpwYXRoIiwgIi4uLy4uL2xpYi93YXNtL2JpbmRpbmcvb3J0LXRyYWluaW5nLXdhc20tc2ltZC5qcyIsICJub2RlanMtaWdub3JlOndvcmtlcl90aHJlYWRzIiwgIm5vZGVqcy1pZ25vcmU6cGVyZl9ob29rcyIsICJub2RlanMtaWdub3JlOm9zIiwgIi4uLy4uL2xpYi93YXNtL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQuanMiLCAiLi4vLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanMiLCAiLi4vLi4vbGliL3dhc20vd2FzbS1mYWN0b3J5LnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tdXRpbHMudHMiLCAiLi4vLi4vbGliL3dhc20vcnVuLW9wdGlvbnMudHMiLCAiLi4vLi4vbGliL3dhc20vc2Vzc2lvbi1vcHRpb25zLnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tY29tbW9uLnRzIiwgIm5vZGVqcy1pZ25vcmU6bm9kZTpmcy9wcm9taXNlcyIsICIuLi8uLi9saWIvd2FzbS93YXNtLXV0aWxzLWxvYWQtZmlsZS50cyIsICIuLi8uLi9saWIvd2FzbS93YXNtLWNvcmUtaW1wbC50cyIsICJwcm94eS13b3JrZXI6Li9wcm94eS13b3JrZXIvbWFpbiIsICIuLi8uLi9saWIvd2FzbS9wcm94eS13cmFwcGVyLnRzIiwgIi4uLy4uL2xpYi93YXNtL3Nlc3Npb24taGFuZGxlci1pbmZlcmVuY2UudHMiLCAiLi4vLi4vbGliL2JhY2tlbmQtd2FzbS50cyIsICIuLi8uLi9saWIvd2FzbS93YXNtLXRyYWluaW5nLWNvcmUtaW1wbC50cyIsICIuLi8uLi9saWIvd2FzbS9zZXNzaW9uLWhhbmRsZXItdHJhaW5pbmcudHMiLCAiLi4vLi4vbGliL2JhY2tlbmQtd2FzbS10cmFpbmluZy50cyIsICIuLi8uLi9saWIvaW5kZXgudHMiLCAiLi4vLi4vbGliL3ZlcnNpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0JhY2tlbmR9IGZyb20gJy4vYmFja2VuZC5qcyc7XG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb259IGZyb20gJy4vaW5mZXJlbmNlLXNlc3Npb24uanMnO1xuXG5pbnRlcmZhY2UgQmFja2VuZEluZm8ge1xuICBiYWNrZW5kOiBCYWNrZW5kO1xuICBwcmlvcml0eTogbnVtYmVyO1xuXG4gIGluaXRQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgaW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xuICBhYm9ydGVkPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGJhY2tlbmRzOiBNYXA8c3RyaW5nLCBCYWNrZW5kSW5mbz4gPSBuZXcgTWFwKCk7XG5jb25zdCBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHk6IHN0cmluZ1tdID0gW107XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBiYWNrZW5kLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgYXMgYSBrZXkgdG8gbG9va3VwIGFzIGFuIGV4ZWN1dGlvbiBwcm92aWRlci5cbiAqIEBwYXJhbSBiYWNrZW5kIC0gdGhlIGJhY2tlbmQgb2JqZWN0LlxuICogQHBhcmFtIHByaW9yaXR5IC0gYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBwcmlvcml0eSBvZiB0aGUgYmFja2VuZC4gSGlnaGVyIG51bWJlciBtZWFucyBoaWdoZXIgcHJpb3JpdHkuIGlmIHByaW9yaXR5XG4gKiA8IDAsIGl0IHdpbGwgYmUgY29uc2lkZXJlZCBhcyBhICdiZXRhJyB2ZXJzaW9uIGFuZCB3aWxsIG5vdCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgYmFja2VuZCBieSBkZWZhdWx0LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQmFja2VuZCA9IChuYW1lOiBzdHJpbmcsIGJhY2tlbmQ6IEJhY2tlbmQsIHByaW9yaXR5OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgaWYgKGJhY2tlbmQgJiYgdHlwZW9mIGJhY2tlbmQuaW5pdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYmFja2VuZC5jcmVhdGVJbmZlcmVuY2VTZXNzaW9uSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGN1cnJlbnRCYWNrZW5kID0gYmFja2VuZHMuZ2V0KG5hbWUpO1xuICAgIGlmIChjdXJyZW50QmFja2VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBiYWNrZW5kcy5zZXQobmFtZSwge2JhY2tlbmQsIHByaW9yaXR5fSk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50QmFja2VuZC5wcmlvcml0eSA+IHByaW9yaXR5KSB7XG4gICAgICAvLyBzYW1lIG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkuIHNraXAgcmVnaXN0ZXJhdGlvbi5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRCYWNrZW5kLnByaW9yaXR5ID09PSBwcmlvcml0eSkge1xuICAgICAgaWYgKGN1cnJlbnRCYWNrZW5kLmJhY2tlbmQgIT09IGJhY2tlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVnaXN0ZXIgYmFja2VuZCBcIiR7bmFtZX1cIiB1c2luZyBwcmlvcml0eSAke3ByaW9yaXR5fWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmlvcml0eSA+PSAwKSB7XG4gICAgICBjb25zdCBpID0gYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5LmluZGV4T2YobmFtZSk7XG4gICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5LnNwbGljZShpLCAxKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGJhY2tlbmRzLmdldChiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHlbaV0pIS5wcmlvcml0eSA8PSBwcmlvcml0eSkge1xuICAgICAgICAgIGJhY2tlbmRzU29ydGVkQnlQcmlvcml0eS5zcGxpY2UoaSwgMCwgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgdmFsaWQgYmFja2VuZCcpO1xufTtcblxuLyoqXG4gKiBUcnkgdG8gcmVzb2x2ZSBhbmQgaW5pdGlhbGl6ZSBhIGJhY2tlbmQuXG4gKlxuICogQHBhcmFtIGJhY2tlbmROYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGJhY2tlbmQuXG4gKiBAcmV0dXJucyB0aGUgYmFja2VuZCBpbnN0YW5jZSBpZiByZXNvbHZlZCBhbmQgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LCBvciBhbiBlcnJvciBtZXNzYWdlIGlmIGZhaWxlZC5cbiAqL1xuY29uc3QgdHJ5UmVzb2x2ZUFuZEluaXRpYWxpemVCYWNrZW5kID0gYXN5bmMoYmFja2VuZE5hbWU6IHN0cmluZyk6IFByb21pc2U8QmFja2VuZHxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYmFja2VuZEluZm8gPSBiYWNrZW5kcy5nZXQoYmFja2VuZE5hbWUpO1xuICBpZiAoIWJhY2tlbmRJbmZvKSB7XG4gICAgcmV0dXJuICdiYWNrZW5kIG5vdCBmb3VuZC4nO1xuICB9XG5cbiAgaWYgKGJhY2tlbmRJbmZvLmluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuIGJhY2tlbmRJbmZvLmJhY2tlbmQ7XG4gIH0gZWxzZSBpZiAoYmFja2VuZEluZm8uYWJvcnRlZCkge1xuICAgIHJldHVybiBiYWNrZW5kSW5mby5lcnJvciE7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXNJbml0aWFsaXppbmcgPSAhIWJhY2tlbmRJbmZvLmluaXRQcm9taXNlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWlzSW5pdGlhbGl6aW5nKSB7XG4gICAgICAgIGJhY2tlbmRJbmZvLmluaXRQcm9taXNlID0gYmFja2VuZEluZm8uYmFja2VuZC5pbml0KGJhY2tlbmROYW1lKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGJhY2tlbmRJbmZvLmluaXRQcm9taXNlO1xuICAgICAgYmFja2VuZEluZm8uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGJhY2tlbmRJbmZvLmJhY2tlbmQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCFpc0luaXRpYWxpemluZykge1xuICAgICAgICBiYWNrZW5kSW5mby5lcnJvciA9IGAke2V9YDtcbiAgICAgICAgYmFja2VuZEluZm8uYWJvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFja2VuZEluZm8uZXJyb3IhO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgYmFja2VuZEluZm8uaW5pdFByb21pc2U7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFJlc29sdmUgZXhlY3V0aW9uIHByb3ZpZGVycyBmcm9tIHRoZSBzcGVjaWZpYyBzZXNzaW9uIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSB0aGUgc2Vzc2lvbiBvcHRpb25zIG9iamVjdC5cbiAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdHVwbGUgb2YgYW4gaW5pdGlhbGl6ZWQgYmFja2VuZCBpbnN0YW5jZSBhbmQgYSBzZXNzaW9uIG9wdGlvbnMgb2JqZWN0IHdpdGhcbiAqIGZpbHRlcmVkIEVQIGxpc3QuXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUJhY2tlbmRBbmRFeGVjdXRpb25Qcm92aWRlcnMgPSBhc3luYyhvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTpcbiAgICBQcm9taXNlPFtiYWNrZW5kOiBCYWNrZW5kLCBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zXT4gPT4ge1xuICAgICAgLy8gZXh0cmFjdCBiYWNrZW5kIGhpbnRzIGZyb20gc2Vzc2lvbiBvcHRpb25zXG4gICAgICBjb25zdCBlcHMgPSBvcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycyB8fCBbXTtcbiAgICAgIGNvbnN0IGJhY2tlbmRIaW50cyA9IGVwcy5tYXAoaSA9PiB0eXBlb2YgaSA9PT0gJ3N0cmluZycgPyBpIDogaS5uYW1lKTtcbiAgICAgIGNvbnN0IGJhY2tlbmROYW1lcyA9IGJhY2tlbmRIaW50cy5sZW5ndGggPT09IDAgPyBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkgOiBiYWNrZW5kSGludHM7XG5cbiAgICAgIC8vIHRyeSB0byByZXNvbHZlIGFuZCBpbml0aWFsaXplIGFsbCByZXF1ZXN0ZWQgYmFja2VuZHNcbiAgICAgIGxldCBiYWNrZW5kOiBCYWNrZW5kfHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgYXZhaWxhYmxlQmFja2VuZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBmb3IgKGNvbnN0IGJhY2tlbmROYW1lIG9mIGJhY2tlbmROYW1lcykge1xuICAgICAgICBjb25zdCByZXNvbHZlUmVzdWx0ID0gYXdhaXQgdHJ5UmVzb2x2ZUFuZEluaXRpYWxpemVCYWNrZW5kKGJhY2tlbmROYW1lKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlUmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGVycm9ycy5wdXNoKHtuYW1lOiBiYWNrZW5kTmFtZSwgZXJyOiByZXNvbHZlUmVzdWx0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFiYWNrZW5kKSB7XG4gICAgICAgICAgICBiYWNrZW5kID0gcmVzb2x2ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhY2tlbmQgPT09IHJlc29sdmVSZXN1bHQpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZUJhY2tlbmROYW1lcy5hZGQoYmFja2VuZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiBubyBiYWNrZW5kIGlzIGF2YWlsYWJsZSwgdGhyb3cgZXJyb3IuXG4gICAgICBpZiAoIWJhY2tlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBhdmFpbGFibGUgYmFja2VuZCBmb3VuZC4gRVJSOiAke2Vycm9ycy5tYXAoZSA9PiBgWyR7ZS5uYW1lfV0gJHtlLmVycn1gKS5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBmb3IgZWFjaCBleHBsaWNpdGx5IHJlcXVlc3RlZCBiYWNrZW5kLCBpZiBpdCdzIG5vdCBhdmFpbGFibGUsIG91dHB1dCB3YXJuaW5nIG1lc3NhZ2UuXG4gICAgICBmb3IgKGNvbnN0IHtuYW1lLCBlcnJ9IG9mIGVycm9ycykge1xuICAgICAgICBpZiAoYmFja2VuZEhpbnRzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oYHJlbW92aW5nIHJlcXVlc3RlZCBleGVjdXRpb24gcHJvdmlkZXIgXCIke1xuICAgICAgICAgICAgICBuYW1lfVwiIGZyb20gc2Vzc2lvbiBvcHRpb25zIGJlY2F1c2UgaXQgaXMgbm90IGF2YWlsYWJsZTogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRFcHMgPSBlcHMuZmlsdGVyKGkgPT4gYXZhaWxhYmxlQmFja2VuZE5hbWVzLmhhcyh0eXBlb2YgaSA9PT0gJ3N0cmluZycgPyBpIDogaS5uYW1lKSk7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGJhY2tlbmQsIG5ldyBQcm94eShvcHRpb25zLCB7XG4gICAgICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2V4ZWN1dGlvblByb3ZpZGVycycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkRXBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXTtcbiAgICB9O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb259IGZyb20gJy4vaW5mZXJlbmNlLXNlc3Npb24uanMnO1xuaW1wb3J0IHtPbm54VmFsdWV9IGZyb20gJy4vb25ueC12YWx1ZS5qcyc7XG5pbXBvcnQge1RyYWluaW5nU2Vzc2lvbn0gZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLmpzJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBTZXNzaW9uSGFuZGxlciB7XG4gIHR5cGUgRmVlZHNUeXBlID0ge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9O1xuICB0eXBlIEZldGNoZXNUeXBlID0ge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWUgfCBudWxsfTtcbiAgdHlwZSBSZXR1cm5UeXBlID0ge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgc2hhcmVkIFNlc3Npb25IYW5kbGVyIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmludGVyZmFjZSBTZXNzaW9uSGFuZGxlciB7XG4gIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPjtcblxuICByZWFkb25seSBpbnB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgb3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIGhhbmRsZXIgaW5zdGFuY2Ugb2YgYW4gaW5mZXJlbmNlIHNlc3Npb24uXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZmVyZW5jZVNlc3Npb25IYW5kbGVyIGV4dGVuZHMgU2Vzc2lvbkhhbmRsZXIge1xuICBzdGFydFByb2ZpbGluZygpOiB2b2lkO1xuICBlbmRQcm9maWxpbmcoKTogdm9pZDtcblxuICBydW4oZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIGhhbmRsZXIgaW5zdGFuY2Ugb2YgYSB0cmFpbmluZyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdTZXNzaW9uSGFuZGxlciBleHRlbmRzIFNlc3Npb25IYW5kbGVyIHtcbiAgcmVhZG9ubHkgZXZhbElucHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBldmFsT3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIGxhenlSZXNldEdyYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgcnVuVHJhaW5TdGVwKFxuICAgICAgZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+O1xuICBydW5PcHRpbWl6ZXJTdGVwKG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIHJ1bkV2YWxTdGVwKFxuICAgICAgZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+O1xuXG4gIGdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcj47XG4gIGxvYWRQYXJhbWV0ZXJzQnVmZmVyKGJ1ZmZlcjogVWludDhBcnJheSwgdHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XG4gIGdldENvbnRpZ3VvdXNQYXJhbWV0ZXJzKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPE9ubnhWYWx1ZT47XG59XG5cbi8qKlxuICogUmVwcmVzZW50IGEgYmFja2VuZCB0aGF0IHByb3ZpZGVzIGltcGxlbWVudGF0aW9uIG9mIG1vZGVsIGluZmVyZW5jaW5nLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJhY2tlbmQgYXN5bmNocm9ub3VzbHkuIFNob3VsZCB0aHJvdyB3aGVuIGZhaWxlZC5cbiAgICovXG4gIGluaXQoYmFja2VuZE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgY3JlYXRlSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIodXJpT3JCdWZmZXI6IHN0cmluZ3xVaW50OEFycmF5LCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25IYW5kbGVyPjtcblxuICBjcmVhdGVUcmFpbmluZ1Nlc3Npb25IYW5kbGVyP1xuICAgICAgKGNoZWNrcG9pbnRTdGF0ZVVyaU9yQnVmZmVyOiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXIsIHRyYWluTW9kZWxVcmlPckJ1ZmZlcjogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyLFxuICAgICAgIGV2YWxNb2RlbFVyaU9yQnVmZmVyOiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXIsIG9wdGltaXplck1vZGVsVXJpT3JCdWZmZXI6IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcixcbiAgICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxUcmFpbmluZ1Nlc3Npb25IYW5kbGVyPjtcbn1cblxuZXhwb3J0IHtyZWdpc3RlckJhY2tlbmR9IGZyb20gJy4vYmFja2VuZC1pbXBsLmpzJztcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSAvanMvc2NyaXB0cy91cGRhdGUtdmVyc2lvbi50c1xuLy8gRG8gbm90IG1vZGlmeSBmaWxlIGNvbnRlbnQgbWFudWFsbHkuXG5cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzEuMTguMCc7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RW52fSBmcm9tICcuL2Vudi5qcyc7XG5pbXBvcnQge3ZlcnNpb259IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5cbnR5cGUgTG9nTGV2ZWxUeXBlID0gRW52Wydsb2dMZXZlbCddO1xuXG5sZXQgbG9nTGV2ZWxWYWx1ZTogUmVxdWlyZWQ8TG9nTGV2ZWxUeXBlPiA9ICd3YXJuaW5nJztcblxuZXhwb3J0IGNvbnN0IGVudjogRW52ID0ge1xuICB3YXNtOiB7fSBhcyBFbnYuV2ViQXNzZW1ibHlGbGFncyxcbiAgd2ViZ2w6IHt9IGFzIEVudi5XZWJHTEZsYWdzLFxuICB3ZWJncHU6IHt9IGFzIEVudi5XZWJHcHVGbGFncyxcbiAgdmVyc2lvbnM6IHtjb21tb246IHZlcnNpb259LFxuXG4gIHNldCBsb2dMZXZlbCh2YWx1ZTogTG9nTGV2ZWxUeXBlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgWyd2ZXJib3NlJywgJ2luZm8nLCAnd2FybmluZycsICdlcnJvcicsICdmYXRhbCddLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2dnaW5nIGxldmVsOiAke3ZhbHVlfWApO1xuICAgIH1cbiAgICBsb2dMZXZlbFZhbHVlID0gdmFsdWU7XG4gIH0sXG4gIGdldCBsb2dMZXZlbCgpOiBSZXF1aXJlZDxMb2dMZXZlbFR5cGU+IHtcbiAgICByZXR1cm4gbG9nTGV2ZWxWYWx1ZTtcbiAgfSxcbn07XG5cbi8vIHNldCBwcm9wZXJ0eSAnbG9nTGV2ZWwnIHNvIHRoYXQgdGhleSBjYW4gYmUgY29ycmVjdGx5IHRyYW5zZmVycmVkIHRvIHdvcmtlciBieSBgcG9zdE1lc3NhZ2UoKWAuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZW52LCAnbG9nTGV2ZWwnLCB7ZW51bWVyYWJsZTogdHJ1ZX0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2VudiBhcyBlbnZJbXBsfSBmcm9tICcuL2Vudi1pbXBsLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIEVudiB7XG4gIGV4cG9ydCB0eXBlIFdhc21QcmVmaXhPckZpbGVQYXRocyA9IHN0cmluZ3x7XG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG4gICAgJ29ydC13YXNtLndhc20nPzogc3RyaW5nO1xuICAgICdvcnQtd2FzbS10aHJlYWRlZC53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXdhc20tc2ltZC53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXRyYWluaW5nLXdhc20tc2ltZC53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtJz86IHN0cmluZztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuICB9O1xuICBleHBvcnQgaW50ZXJmYWNlIFdlYkFzc2VtYmx5RmxhZ3Mge1xuICAgIC8qKlxuICAgICAqIHNldCBvciBnZXQgbnVtYmVyIG9mIHRocmVhZChzKS4gSWYgb21pdHRlZCBvciBzZXQgdG8gMCwgbnVtYmVyIG9mIHRocmVhZChzKSB3aWxsIGJlIGRldGVybWluZWQgYnkgc3lzdGVtLiBJZiBzZXRcbiAgICAgKiB0byAxLCBubyB3b3JrZXIgdGhyZWFkIHdpbGwgYmUgc3Bhd25lZC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSB3aGVuIFdlYkFzc2VtYmx5IG11bHRpdGhyZWFkIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGN1cnJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYDBgXG4gICAgICovXG4gICAgbnVtVGhyZWFkcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIHNldCBvciBnZXQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgU0lNRC4gSWYgc2V0IHRvIGZhbHNlLCBTSU1EIHdpbGwgYmUgZm9yY2VseSBkaXNhYmxlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSB3aGVuIFdlYkFzc2VtYmx5IFNJTUQgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gY3VycmVudCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgdHJ1ZWBcbiAgICAgKi9cbiAgICBzaW1kPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIHNldCBvciBnZXQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgdHJhY2UuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYGVudi50cmFjZWAgaW5zdGVhZC4gSWYgYGVudi50cmFjZWAgaXMgc2V0LCB0aGlzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICB0cmFjZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IGEgbnVtYmVyIHNwZWNpZnlpbmcgdGhlIHRpbWVvdXQgZm9yIGluaXRpYWxpemF0aW9uIG9mIFdlYkFzc2VtYmx5IGJhY2tlbmQsIGluIG1pbGxpc2Vjb25kcy4gQSB6ZXJvXG4gICAgICogdmFsdWUgaW5kaWNhdGVzIG5vIHRpbWVvdXQgaXMgc2V0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgMGBcbiAgICAgKi9cbiAgICBpbml0VGltZW91dD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNldCBhIGN1c3RvbSBVUkwgcHJlZml4IHRvIHRoZSAud2FzbSBmaWxlcyBvciBhIHNldCBvZiBvdmVycmlkZXMgZm9yIGVhY2ggLndhc20gZmlsZS4gVGhlIG92ZXJyaWRlIHBhdGggc2hvdWxkIGJlXG4gICAgICogYW4gYWJzb2x1dGUgcGF0aC5cbiAgICAgKi9cbiAgICB3YXNtUGF0aHM/OiBXYXNtUHJlZml4T3JGaWxlUGF0aHM7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcHJveHkgdGhlIGV4ZWN1dGlvbiBvZiBtYWluIHRocmVhZCB0byBhIHdvcmtlciB0aHJlYWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBwcm94eT86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdMRmxhZ3Mge1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIFdlYkdMIENvbnRleHQgSUQgKHdlYmdsIG9yIHdlYmdsMikuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGAnd2ViZ2wyJ2BcbiAgICAgKi9cbiAgICBjb250ZXh0SWQ/OiAnd2ViZ2wnfCd3ZWJnbDInO1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29udGV4dDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBmb3IgbWF0bXVsLiAwIG1lYW5zIHRvIGRpc2FibGUgYmF0Y2hpbmcuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIG1hdG11bE1heEJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSB0ZXh0dXJlIGNhY2hlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGAnZnVsbCdgXG4gICAgICovXG4gICAgdGV4dHVyZUNhY2hlTW9kZT86ICdpbml0aWFsaXplck9ubHknfCdmdWxsJztcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwYWNrZWQgdGV4dHVyZSBtb2RlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBwYWNrPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHdoZXRoZXIgZW5hYmxlIGFzeW5jIGRvd25sb2FkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHcHVQcm9maWxpbmdEYXRhVjFUZW5zb3JNZXRhZGF0YSB7XG4gICAgZGltczogcmVhZG9ubHkgbnVtYmVyW107XG4gICAgZGF0YVR5cGU6IHN0cmluZztcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdwdVByb2ZpbGluZ0RhdGFWMSB7XG4gICAgdmVyc2lvbjogMTtcbiAgICBpbnB1dHNNZXRhZGF0YTogcmVhZG9ubHkgV2ViR3B1UHJvZmlsaW5nRGF0YVYxVGVuc29yTWV0YWRhdGFbXTtcbiAgICBvdXRwdXRzTWV0YWRhdGE6IHJlYWRvbmx5IFdlYkdwdVByb2ZpbGluZ0RhdGFWMVRlbnNvck1ldGFkYXRhW107XG4gICAga2VybmVsSWQ6IG51bWJlcjtcbiAgICBrZXJuZWxUeXBlOiBzdHJpbmc7XG4gICAga2VybmVsTmFtZTogc3RyaW5nO1xuICAgIHByb2dyYW1OYW1lOiBzdHJpbmc7XG4gICAgc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgZW5kVGltZTogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgV2ViR3B1UHJvZmlsaW5nRGF0YSA9IFdlYkdwdVByb2ZpbGluZ0RhdGFWMTtcblxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdwdUZsYWdzIHtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwcm9maWxpbmcgbW9kZS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgZW52LndlYmdwdS5wcm9maWxpbmcubW9kZWAgaW5zdGVhZC4gSWYgYGVudi53ZWJncHUucHJvZmlsaW5nLm1vZGVgIGlzIHNldCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlXG4gICAgICogaWdub3JlZC5cbiAgICAgKi9cbiAgICBwcm9maWxpbmdNb2RlPzogJ29mZid8J2RlZmF1bHQnO1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIHByb2ZpbGluZyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHByb2ZpbGluZz86IHtcbiAgICAgIC8qKlxuICAgICAgICogU2V0IG9yIGdldCB0aGUgcHJvZmlsaW5nIG1vZGUuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHRWYWx1ZSBgJ29mZidgXG4gICAgICAgKi9cbiAgICAgIG1vZGU/OiAnb2ZmJ3wnZGVmYXVsdCc7XG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0IG9yIGdldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYSBwcm9maWxpbmcgZGF0YSBpcyByZWNlaXZlZC4gSWYgbm90IHNldCwgdGhlIHByb2ZpbGluZyBkYXRhIHdpbGwgYmVcbiAgICAgICAqIHByaW50ZWQgdG8gY29uc29sZS5cbiAgICAgICAqL1xuICAgICAgb25kYXRhPzogKGRhdGE6IFdlYkdwdVByb2ZpbGluZ0RhdGEpID0+IHZvaWQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwb3dlciBwcmVmZXJlbmNlLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IG9ubHkgaGFzIGVmZmVjdCBiZWZvcmUgdGhlIGZpcnN0IFdlYkdQVSBpbmZlcmVuY2Ugc2Vzc2lvbiBpcyBjcmVhdGVkLiBUaGUgdmFsdWUgd2lsbCBiZVxuICAgICAqIHVzZWQgYXMgb3B0aW9ucyBmb3IgYG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKWAuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RpY3RkZWYtZ3B1cmVxdWVzdGFkYXB0ZXJvcHRpb25zfSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgdW5kZWZpbmVkYFxuICAgICAqL1xuICAgIHBvd2VyUHJlZmVyZW5jZT86ICdsb3ctcG93ZXInfCdoaWdoLXBlcmZvcm1hbmNlJztcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBmb3JjZSBmYWxsYmFjayBhZGFwdGVyIGZsYWcuXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgb25seSBoYXMgZWZmZWN0IGJlZm9yZSB0aGUgZmlyc3QgV2ViR1BVIGluZmVyZW5jZSBzZXNzaW9uIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZSB3aWxsIGJlXG4gICAgICogdXNlZCBhcyBvcHRpb25zIGZvciBgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpYC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZGljdGRlZi1ncHVyZXF1ZXN0YWRhcHRlcm9wdGlvbnN9IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGB1bmRlZmluZWRgXG4gICAgICovXG4gICAgZm9yY2VGYWxsYmFja0FkYXB0ZXI/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIGFkYXB0ZXIgZm9yIFdlYkdQVS5cbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBvbmx5IGhhcyBlZmZlY3QgYmVmb3JlIHRoZSBmaXJzdCBXZWJHUFUgaW5mZXJlbmNlIHNlc3Npb24gaXMgY3JlYXRlZC4gVGhlIHZhbHVlIHdpbGwgYmVcbiAgICAgKiB1c2VkIGFzIHRoZSBHUFUgYWRhcHRlciBmb3IgdGhlIHVuZGVybHlpbmcgV2ViR1BVIGJhY2tlbmQgdG8gY3JlYXRlIEdQVSBkZXZpY2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzZXQsIGl0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIGdldCBhZnRlciB0aGUgZmlyc3QgV2ViR1BVIGluZmVyZW5jZSBzZXNzaW9uIGlzIGNyZWF0ZWQuIFRoZVxuICAgICAqIHZhbHVlIHdpbGwgYmUgdGhlIEdQVSBhZGFwdGVyIHRoYXQgY3JlYXRlZCBieSB0aGUgdW5kZXJseWluZyBXZWJHUFUgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIFdoZW4gdXNlIHdpdGggVHlwZVNjcmlwdCwgdGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBgR1BVQWRhcHRlcmAgZGVmaW5lZCBpbiBcIkB3ZWJncHUvdHlwZXNcIi5cbiAgICAgKiBVc2UgYGNvbnN0IGFkYXB0ZXIgPSBlbnYud2ViZ3B1LmFkYXB0ZXIgYXMgR1BVQWRhcHRlcjtgIGluIFR5cGVTY3JpcHQgdG8gYWNjZXNzIHRoaXMgcHJvcGVydHkgd2l0aCBjb3JyZWN0IHR5cGUuXG4gICAgICpcbiAgICAgKiBzZWUgY29tbWVudHMgb24ge0BsaW5rIFRlbnNvci5HcHVCdWZmZXJUeXBlfVxuICAgICAqL1xuICAgIGFkYXB0ZXI6IHVua25vd247XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZXZpY2UgZm9yIFdlYkdQVS5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGZpcnN0IFdlYkdQVSBpbmZlcmVuY2Ugc2Vzc2lvbiBpcyBjcmVhdGVkLlxuICAgICAqXG4gICAgICogV2hlbiB1c2Ugd2l0aCBUeXBlU2NyaXB0LCB0aGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5IGlzIGBHUFVEZXZpY2VgIGRlZmluZWQgaW4gXCJAd2ViZ3B1L3R5cGVzXCIuXG4gICAgICogVXNlIGBjb25zdCBkZXZpY2UgPSBlbnYud2ViZ3B1LmRldmljZSBhcyBHUFVEZXZpY2U7YCBpbiBUeXBlU2NyaXB0IHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IHdpdGggY29ycmVjdCB0eXBlLlxuICAgICAqXG4gICAgICogc2VlIGNvbW1lbnRzIG9uIHtAbGluayBUZW5zb3IuR3B1QnVmZmVyVHlwZX0gZm9yIG1vcmUgZGV0YWlscyBhYm91dCB3aHkgbm90IHVzZSB0eXBlcyBkZWZpbmVkIGluIFwiQHdlYmdwdS90eXBlc1wiLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRldmljZTogdW5rbm93bjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHdoZXRoZXIgdmFsaWRhdGUgaW5wdXQgY29udGVudC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgICAqL1xuICAgIHZhbGlkYXRlSW5wdXRDb250ZW50PzogYm9vbGVhbjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudiB7XG4gIC8qKlxuICAgKiBzZXQgdGhlIHNldmVyaXR5IGxldmVsIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGAnd2FybmluZydgXG4gICAqL1xuICBsb2dMZXZlbD86ICd2ZXJib3NlJ3wnaW5mbyd8J3dhcm5pbmcnfCdlcnJvcid8J2ZhdGFsJztcblxuICAvKipcbiAgICogSW5kaWNhdGUgd2hldGhlciBydW4gaW4gZGVidWcgbW9kZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHNldCBvciBnZXQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgdHJhY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKi9cbiAgdHJhY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbnM6IHtcbiAgICByZWFkb25seSBjb21tb246IHN0cmluZztcbiAgICByZWFkb25seSB3ZWI/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbm9kZT86IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgcmVhZG9ubHkgJ3JlYWN0LW5hdGl2ZSc/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudCBhIHNldCBvZiBmbGFncyBmb3IgV2ViQXNzZW1ibHlcbiAgICovXG4gIHJlYWRvbmx5IHdhc206IEVudi5XZWJBc3NlbWJseUZsYWdzO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnQgYSBzZXQgb2YgZmxhZ3MgZm9yIFdlYkdMXG4gICAqL1xuICByZWFkb25seSB3ZWJnbDogRW52LldlYkdMRmxhZ3M7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudCBhIHNldCBvZiBmbGFncyBmb3IgV2ViR1BVXG4gICAqL1xuICByZWFkb25seSB3ZWJncHU6IEVudi5XZWJHcHVGbGFncztcblxuICBbbmFtZTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYSBzZXQgb2YgZmxhZ3MgYXMgYSBnbG9iYWwgc2luZ2xldG9uLlxuICovXG5leHBvcnQgY29uc3QgZW52OiBFbnYgPSBlbnZJbXBsO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvclRvRGF0YVVybE9wdGlvbnMsIFRlbnNvclRvSW1hZ2VEYXRhT3B0aW9uc30gZnJvbSAnLi90ZW5zb3ItY29udmVyc2lvbi5qcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3IuanMnO1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci50b0RhdGFVUkwoKVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yVG9EYXRhVVJMID0gKHRlbnNvcjogVGVuc29yLCBvcHRpb25zPzogVGVuc29yVG9EYXRhVXJsT3B0aW9ucyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSA6IChuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpKTtcbiAgY2FudmFzLndpZHRoID0gdGVuc29yLmRpbXNbM107XG4gIGNhbnZhcy5oZWlnaHQgPSB0ZW5zb3IuZGltc1syXTtcbiAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID1cbiAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsKTtcblxuICBpZiAocGl4ZWxzMkRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aCAmIGZvcm1hdFxuICAgIGxldCB3aWR0aDogbnVtYmVyO1xuICAgIGxldCBoZWlnaHQ6IG51bWJlcjtcbiAgICBpZiAob3B0aW9ucz8udGVuc29yTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50ZW5zb3JMYXlvdXQgPT09ICdOSFdDJykge1xuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1syXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzNdO1xuICAgIH0gZWxzZSB7ICAvLyBEZWZhdWx0IGxheW91dCBpcyBOQ1dIXG4gICAgICB3aWR0aCA9IHRlbnNvci5kaW1zWzNdO1xuICAgICAgaGVpZ2h0ID0gdGVuc29yLmRpbXNbMl07XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRmb3JtYXQgPSBvcHRpb25zPy5mb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZm9ybWF0IDogJ1JHQic7XG5cbiAgICBjb25zdCBub3JtID0gb3B0aW9ucz8ubm9ybTtcbiAgICBsZXQgbm9ybU1lYW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBub3JtQmlhczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgaWYgKG5vcm0gPT09IHVuZGVmaW5lZCB8fCBub3JtLm1lYW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybU1lYW4gPSBbMjU1LCAyNTUsIDI1NSwgMjU1XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5tZWFuKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybU1lYW4gPSBbbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1NZWFuID0gW25vcm0ubWVhblswXSwgbm9ybS5tZWFuWzFdLCBub3JtLm1lYW5bMl0sIDBdO1xuICAgICAgICBpZiAobm9ybS5tZWFuWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtTWVhblszXSA9IG5vcm0ubWVhblszXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9ybSA9PT0gdW5kZWZpbmVkIHx8IG5vcm0uYmlhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBub3JtQmlhcyA9IFswLCAwLCAwLCAwXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5iaWFzKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1CaWFzID0gW25vcm0uYmlhc1swXSwgbm9ybS5iaWFzWzFdLCBub3JtLmJpYXNbMl0sIDBdO1xuICAgICAgICBpZiAobm9ybS5iaWFzWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtQmlhc1szXSA9IG5vcm0uYmlhc1szXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0cmlkZSA9IGhlaWdodCAqIHdpZHRoO1xuICAgIC8vIERlZmF1bHQgcG9pbnRlciBhc3NpZ25tZW50c1xuICAgIGxldCByVGVuc29yUG9pbnRlciA9IDAsIGdUZW5zb3JQb2ludGVyID0gc3RyaWRlLCBiVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDIsIGFUZW5zb3JQb2ludGVyID0gLTE7XG5cbiAgICAvLyBVcGRhdGluZyB0aGUgcG9pbnRlciBhc3NpZ25tZW50cyBiYXNlZCBvbiB0aGUgaW5wdXQgaW1hZ2UgZm9ybWF0XG4gICAgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCQScpIHtcbiAgICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICAgIGdUZW5zb3JQb2ludGVyID0gc3RyaWRlO1xuICAgICAgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICAgICAgYVRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAzO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRmb3JtYXQgPT09ICdSR0InKSB7XG4gICAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMjtcbiAgICB9IGVsc2UgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkJHJykge1xuICAgICAgclRlbnNvclBvaW50ZXIgPSAwO1xuICAgICAgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IFIgPSAoKHRlbnNvci5kYXRhW3JUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1swXSkgKiBub3JtTWVhblswXTsgIC8vIFIgdmFsdWVcbiAgICAgICAgY29uc3QgRyA9ICgodGVuc29yLmRhdGFbZ1RlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzFdKSAqIG5vcm1NZWFuWzFdOyAgLy8gRyB2YWx1ZVxuICAgICAgICBjb25zdCBCID0gKCh0ZW5zb3IuZGF0YVtiVGVuc29yUG9pbnRlcisrXSBhcyBudW1iZXIpIC0gbm9ybUJpYXNbMl0pICogbm9ybU1lYW5bMl07ICAvLyBCIHZhbHVlXG4gICAgICAgIGNvbnN0IEEgPSBhVGVuc29yUG9pbnRlciA9PT0gLTEgP1xuICAgICAgICAgICAgMjU1IDpcbiAgICAgICAgICAgICgodGVuc29yLmRhdGFbYVRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzNdKSAqIG5vcm1NZWFuWzNdOyAgLy8gQSB2YWx1ZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXBsdXMtb3BlcmFuZHNcbiAgICAgICAgcGl4ZWxzMkRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBSICsgJywnICsgRyArICcsJyArIEIgKyAnLCcgKyBBICsgJyknO1xuICAgICAgICBwaXhlbHMyRENvbnRleHQuZmlsbFJlY3QoaiwgaSwgMSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgndG9EYXRhVVJMJyBpbiBjYW52YXMpIHtcbiAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndG9EYXRhVVJMIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gIH1cbn07XG5cbi8qKlxuICogaW1wbGVtZW50YXRpb24gb2YgVGVuc29yLnRvSW1hZ2VEYXRhKClcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclRvSW1hZ2VEYXRhID0gKHRlbnNvcjogVGVuc29yLCBvcHRpb25zPzogVGVuc29yVG9JbWFnZURhdGFPcHRpb25zKTogSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/XG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpIDpcbiAgICAgIG5ldyBPZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSBhcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIGxldCBpbWFnZTogSW1hZ2VEYXRhO1xuICBpZiAocGl4ZWxzMkRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aCAmIGZvcm1hdFxuICAgIGxldCB3aWR0aDogbnVtYmVyO1xuICAgIGxldCBoZWlnaHQ6IG51bWJlcjtcbiAgICBsZXQgY2hhbm5lbHM6IG51bWJlcjtcbiAgICBpZiAob3B0aW9ucz8udGVuc29yTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50ZW5zb3JMYXlvdXQgPT09ICdOSFdDJykge1xuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1syXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzFdO1xuICAgICAgY2hhbm5lbHMgPSB0ZW5zb3IuZGltc1szXTtcbiAgICB9IGVsc2UgeyAgLy8gRGVmYXVsdCBsYXlvdXQgaXMgTkNXSFxuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1szXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzJdO1xuICAgICAgY2hhbm5lbHMgPSB0ZW5zb3IuZGltc1sxXTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRmb3JtYXQgPSBvcHRpb25zICE9PSB1bmRlZmluZWQgPyAob3B0aW9ucy5mb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZm9ybWF0IDogJ1JHQicpIDogJ1JHQic7XG5cbiAgICBjb25zdCBub3JtID0gb3B0aW9ucz8ubm9ybTtcbiAgICBsZXQgbm9ybU1lYW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBub3JtQmlhczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgaWYgKG5vcm0gPT09IHVuZGVmaW5lZCB8fCBub3JtLm1lYW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybU1lYW4gPSBbMjU1LCAyNTUsIDI1NSwgMjU1XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5tZWFuKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybU1lYW4gPSBbbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1NZWFuID0gW25vcm0ubWVhblswXSwgbm9ybS5tZWFuWzFdLCBub3JtLm1lYW5bMl0sIDI1NV07XG4gICAgICAgIGlmIChub3JtLm1lYW5bM10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vcm1NZWFuWzNdID0gbm9ybS5tZWFuWzNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub3JtID09PSB1bmRlZmluZWQgfHwgbm9ybS5iaWFzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vcm1CaWFzID0gWzAsIDAsIDAsIDBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIChub3JtLmJpYXMpID09PSAnbnVtYmVyJykge1xuICAgICAgICBub3JtQmlhcyA9IFtub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzLCBub3JtLmJpYXNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzWzBdLCBub3JtLmJpYXNbMV0sIG5vcm0uYmlhc1syXSwgMF07XG4gICAgICAgIGlmIChub3JtLmJpYXNbM10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vcm1CaWFzWzNdID0gbm9ybS5iaWFzWzNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaWRlID0gaGVpZ2h0ICogd2lkdGg7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgKGNoYW5uZWxzID09PSA0ICYmIG9wdGlvbnMuZm9ybWF0ICE9PSAnUkdCQScpIHx8XG4gICAgICAgICAgKGNoYW5uZWxzID09PSAzICYmIChvcHRpb25zLmZvcm1hdCAhPT0gJ1JHQicgJiYgb3B0aW9ucy5mb3JtYXQgIT09ICdCR1InKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZW5zb3IgZm9ybWF0IGRvZXNuXFwndCBtYXRjaCBpbnB1dCB0ZW5zb3IgZGltcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmF1bHQgcG9pbnRlciBhc3NpZ25tZW50c1xuICAgIGNvbnN0IHN0ZXAgPSA0O1xuICAgIGxldCBySW1hZ2VQb2ludGVyID0gMCwgZ0ltYWdlUG9pbnRlciA9IDEsIGJJbWFnZVBvaW50ZXIgPSAyLCBhSW1hZ2VQb2ludGVyID0gMztcbiAgICBsZXQgclRlbnNvclBvaW50ZXIgPSAwLCBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSwgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyLCBhVGVuc29yUG9pbnRlciA9IC0xO1xuXG4gICAgLy8gVXBkYXRpbmcgdGhlIHBvaW50ZXIgYXNzaWdubWVudHMgYmFzZWQgb24gdGhlIGlucHV0IGltYWdlIGZvcm1hdFxuICAgIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JHQkEnKSB7XG4gICAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMjtcbiAgICAgIGFUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMztcbiAgICB9IGVsc2UgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCJykge1xuICAgICAgclRlbnNvclBvaW50ZXIgPSAwO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gICAgfSBlbHNlIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JCRycpIHtcbiAgICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICAgIH1cblxuICAgIGltYWdlID0gcGl4ZWxzMkRDb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0ICogd2lkdGg7XG4gICAgICAgICBySW1hZ2VQb2ludGVyICs9IHN0ZXAsIGdJbWFnZVBvaW50ZXIgKz0gc3RlcCwgYkltYWdlUG9pbnRlciArPSBzdGVwLCBhSW1hZ2VQb2ludGVyICs9IHN0ZXAsIGkrKykge1xuICAgICAgaW1hZ2UuZGF0YVtySW1hZ2VQb2ludGVyXSA9ICgodGVuc29yLmRhdGFbclRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzBdKSAqIG5vcm1NZWFuWzBdOyAgLy8gUiB2YWx1ZVxuICAgICAgaW1hZ2UuZGF0YVtnSW1hZ2VQb2ludGVyXSA9ICgodGVuc29yLmRhdGFbZ1RlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzFdKSAqIG5vcm1NZWFuWzFdOyAgLy8gRyB2YWx1ZVxuICAgICAgaW1hZ2UuZGF0YVtiSW1hZ2VQb2ludGVyXSA9ICgodGVuc29yLmRhdGFbYlRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzJdKSAqIG5vcm1NZWFuWzJdOyAgLy8gQiB2YWx1ZVxuICAgICAgaW1hZ2UuZGF0YVthSW1hZ2VQb2ludGVyXSA9IGFUZW5zb3JQb2ludGVyID09PSAtMSA/XG4gICAgICAgICAgMjU1IDpcbiAgICAgICAgICAoKHRlbnNvci5kYXRhW2FUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1szXSkgKiBub3JtTWVhblszXTsgIC8vIEEgdmFsdWVcbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgYWNjZXNzIGltYWdlIGRhdGEnKTtcbiAgfVxuICByZXR1cm4gaW1hZ2U7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge09wdGlvbnNEaW1lbnNpb25zLCBPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMsIE9wdGlvbnNUZW5zb3JGb3JtYXQsIE9wdGlvbnNUZW5zb3JMYXlvdXQsIFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9ucywgVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMsIFRlbnNvckZyb21UZXh0dXJlT3B0aW9ucywgVGVuc29yRnJvbVVybE9wdGlvbnN9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLWltcGwuanMnO1xuaW1wb3J0IHtUZW5zb3IgYXMgVGVuc29ySW50ZXJmYWNlfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbmludGVyZmFjZSBCdWZmZXJUb1RlbnNvck9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNGb3JtYXQsIE9wdGlvbnNUZW5zb3JGb3JtYXQge31cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgdGVuc29yIG9iamVjdCBmcm9tIGltYWdlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBFeHRyYWN0ZWQgaW1hZ2UgYnVmZmVyIGRhdGEgLSBhc3N1bWluZyBSR0JBIGZvcm1hdFxuICogQHBhcmFtIGltYWdlRm9ybWF0IC0gaW5wdXQgaW1hZ2UgY29uZmlndXJhdGlvbiAtIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGhlaWdodCwgd2lkdGgsIGZvcm1hdFxuICogQHBhcmFtIHRlbnNvckZvcm1hdCAtIG91dHB1dCB0ZW5zb3IgY29uZmlndXJhdGlvbiAtIERlZmF1bHQgaXMgUkdCIGZvcm1hdFxuICovXG5leHBvcnQgY29uc3QgYnVmZmVyVG9UZW5zb3IgPSAoYnVmZmVyOiBVaW50OENsYW1wZWRBcnJheXx1bmRlZmluZWQsIG9wdGlvbnM6IEJ1ZmZlclRvVGVuc29yT3B0aW9ucyk6IFRlbnNvciA9PiB7XG4gIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgYnVmZmVyIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG4gIGlmIChvcHRpb25zLmhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMud2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgaGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy50ZW5zb3JMYXlvdXQgPT09ICdOSFdDJykge1xuICAgIHRocm93IG5ldyBFcnJvcignTkhXQyBUZW5zb3IgbGF5b3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICBjb25zdCB7aGVpZ2h0LCB3aWR0aH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IG5vcm0gPSBvcHRpb25zLm5vcm0gPz8ge21lYW46IDI1NSwgYmlhczogMH07XG4gIGxldCBub3JtTWVhbjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGxldCBub3JtQmlhczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgaWYgKHR5cGVvZiAobm9ybS5tZWFuKSA9PT0gJ251bWJlcicpIHtcbiAgICBub3JtTWVhbiA9IFtub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuLCBub3JtLm1lYW5dO1xuICB9IGVsc2Uge1xuICAgIG5vcm1NZWFuID0gW25vcm0ubWVhbiFbMF0sIG5vcm0ubWVhbiFbMV0sIG5vcm0ubWVhbiFbMl0sIG5vcm0ubWVhbiFbM10gPz8gMjU1XTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgKG5vcm0uYmlhcykgPT09ICdudW1iZXInKSB7XG4gICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzXTtcbiAgfSBlbHNlIHtcbiAgICBub3JtQmlhcyA9IFtub3JtLmJpYXMhWzBdLCBub3JtLmJpYXMhWzFdLCBub3JtLmJpYXMhWzJdLCBub3JtLmJpYXMhWzNdID8/IDBdO1xuICB9XG5cbiAgY29uc3QgaW5wdXRmb3JtYXQgPSBvcHRpb25zLmZvcm1hdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5mb3JtYXQgOiAnUkdCQSc7XG4gIC8vIGRlZmF1bHQgdmFsdWUgaXMgUkdCQSBzaW5jZSBpbWFnZWRhdGEgYW5kIEhUTUxJbWFnZUVsZW1lbnQgdXNlcyBpdFxuXG4gIGNvbnN0IG91dHB1dGZvcm1hdCA9XG4gICAgICBvcHRpb25zLnRlbnNvckZvcm1hdCAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMudGVuc29yRm9ybWF0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRlbnNvckZvcm1hdCA6ICdSR0InKSA6ICdSR0InO1xuICBjb25zdCBzdHJpZGUgPSBoZWlnaHQgKiB3aWR0aDtcbiAgY29uc3QgZmxvYXQzMkRhdGEgPSBvdXRwdXRmb3JtYXQgPT09ICdSR0JBJyA/IG5ldyBGbG9hdDMyQXJyYXkoc3RyaWRlICogNCkgOiBuZXcgRmxvYXQzMkFycmF5KHN0cmlkZSAqIDMpO1xuXG4gIC8vIERlZmF1bHQgcG9pbnRlciBhc3NpZ25tZW50c1xuICBsZXQgc3RlcCA9IDQsIHJJbWFnZVBvaW50ZXIgPSAwLCBnSW1hZ2VQb2ludGVyID0gMSwgYkltYWdlUG9pbnRlciA9IDIsIGFJbWFnZVBvaW50ZXIgPSAzO1xuICBsZXQgclRlbnNvclBvaW50ZXIgPSAwLCBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSwgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyLCBhVGVuc29yUG9pbnRlciA9IC0xO1xuXG4gIC8vIFVwZGF0aW5nIHRoZSBwb2ludGVyIGFzc2lnbm1lbnRzIGJhc2VkIG9uIHRoZSBpbnB1dCBpbWFnZSBmb3JtYXRcbiAgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCJykge1xuICAgIHN0ZXAgPSAzO1xuICAgIHJJbWFnZVBvaW50ZXIgPSAwO1xuICAgIGdJbWFnZVBvaW50ZXIgPSAxO1xuICAgIGJJbWFnZVBvaW50ZXIgPSAyO1xuICAgIGFJbWFnZVBvaW50ZXIgPSAtMTtcbiAgfVxuXG4gIC8vIFVwZGF0aW5nIHRoZSBwb2ludGVyIGFzc2lnbm1lbnRzIGJhc2VkIG9uIHRoZSBvdXRwdXQgdGVuc29yIGZvcm1hdFxuICBpZiAob3V0cHV0Zm9ybWF0ID09PSAnUkdCQScpIHtcbiAgICBhVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDM7XG4gIH0gZWxzZSBpZiAob3V0cHV0Zm9ybWF0ID09PSAnUkJHJykge1xuICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gIH0gZWxzZSBpZiAob3V0cHV0Zm9ybWF0ID09PSAnQkdSJykge1xuICAgIGJUZW5zb3JQb2ludGVyID0gMDtcbiAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICByVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlkZTtcbiAgICAgICBpKyssIHJJbWFnZVBvaW50ZXIgKz0gc3RlcCwgYkltYWdlUG9pbnRlciArPSBzdGVwLCBnSW1hZ2VQb2ludGVyICs9IHN0ZXAsIGFJbWFnZVBvaW50ZXIgKz0gc3RlcCkge1xuICAgIGZsb2F0MzJEYXRhW3JUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlcltySW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzBdKSAvIG5vcm1NZWFuWzBdO1xuICAgIGZsb2F0MzJEYXRhW2dUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlcltnSW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzFdKSAvIG5vcm1NZWFuWzFdO1xuICAgIGZsb2F0MzJEYXRhW2JUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlcltiSW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzJdKSAvIG5vcm1NZWFuWzJdO1xuICAgIGlmIChhVGVuc29yUG9pbnRlciAhPT0gLTEgJiYgYUltYWdlUG9pbnRlciAhPT0gLTEpIHtcbiAgICAgIGZsb2F0MzJEYXRhW2FUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlclthSW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzNdKSAvIG5vcm1NZWFuWzNdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZsb2F0MzJBcnJheSAtPiBvcnQuVGVuc29yXG4gIGNvbnN0IG91dHB1dFRlbnNvciA9IG91dHB1dGZvcm1hdCA9PT0gJ1JHQkEnID8gbmV3IFRlbnNvcignZmxvYXQzMicsIGZsb2F0MzJEYXRhLCBbMSwgNCwgaGVpZ2h0LCB3aWR0aF0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVuc29yKCdmbG9hdDMyJywgZmxvYXQzMkRhdGEsIFsxLCAzLCBoZWlnaHQsIHdpZHRoXSk7XG4gIHJldHVybiBvdXRwdXRUZW5zb3I7XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5mcm9tSW1hZ2UoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckZyb21JbWFnZSA9IGFzeW5jKFxuICAgIGltYWdlOiBJbWFnZURhdGF8SFRNTEltYWdlRWxlbWVudHxJbWFnZUJpdG1hcHxzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZURhdGFPcHRpb25zfFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zfFRlbnNvckZyb21JbWFnZUJpdG1hcE9wdGlvbnN8XG4gICAgVGVuc29yRnJvbVVybE9wdGlvbnMpOiBQcm9taXNlPFRlbnNvcj4gPT4ge1xuICAvLyBjaGVja2luZyB0aGUgdHlwZSBvZiBpbWFnZSBvYmplY3RcbiAgY29uc3QgaXNIVE1MSW1hZ2VFbGUgPSB0eXBlb2YgKEhUTUxJbWFnZUVsZW1lbnQpICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ7XG4gIGNvbnN0IGlzSW1hZ2VEYXRhRWxlID0gdHlwZW9mIChJbWFnZURhdGEpICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlRGF0YTtcbiAgY29uc3QgaXNJbWFnZUJpdG1hcCA9IHR5cGVvZiAoSW1hZ2VCaXRtYXApICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwO1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZyc7XG5cbiAgbGV0IGRhdGE6IFVpbnQ4Q2xhbXBlZEFycmF5fHVuZGVmaW5lZDtcbiAgbGV0IGJ1ZmZlclRvVGVuc29yT3B0aW9uczogQnVmZmVyVG9UZW5zb3JPcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcblxuICBjb25zdCBjcmVhdGVDYW52YXMgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IE9mZnNjcmVlbkNhbnZhcygxLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW52YXMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY3JlYXRlQ2FudmFzQ29udGV4dCA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50fE9mZnNjcmVlbkNhbnZhcykgPT4ge1xuICAgIGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIH0gZWxzZSBpZiAoY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgICByZXR1cm4gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIC8vIGZpbGxpbmcgYW5kIGNoZWNraW5nIGltYWdlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICBpZiAoaXNIVE1MSW1hZ2VFbGUpIHtcbiAgICAvLyBIVE1MSW1hZ2VFbGVtZW50IC0gaW1hZ2Ugb2JqZWN0IC0gZm9ybWF0IGlzIFJHQkEgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGNhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuICAgIGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gY3JlYXRlQ2FudmFzQ29udGV4dChjYW52YXMpO1xuXG4gICAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICBsZXQgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgICAgbGV0IHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZEhlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVpZ2h0ID0gb3B0aW9ucy5yZXNpemVkSGVpZ2h0O1xuICAgICAgICB3aWR0aCA9IG9wdGlvbnMucmVzaXplZFdpZHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpb25zLnRlbnNvckZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSBpbnB1dCBjb25maWcgZm9ybWF0IG11c3QgYmUgUkdCQSBmb3IgSFRNTEltYWdlRWxlbWVudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy50ZW5zb3JGb3JtYXQgPSAnUkdCQSc7XG4gICAgICAgIH1cbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMudGVuc29yRm9ybWF0ID0gJ1JHQkEnO1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMud2lkdGggPSB3aWR0aDtcbiAgICAgIH1cblxuICAgICAgcGl4ZWxzMkRDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgMCwgMCk7XG4gICAgICBkYXRhID0gcGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgYWNjZXNzIGltYWdlIGRhdGEnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNJbWFnZURhdGFFbGUpIHtcbiAgICBsZXQgaGVpZ2h0OiBudW1iZXI7XG4gICAgbGV0IHdpZHRoOiBudW1iZXI7XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZFdpZHRoICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXNpemVkSGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhlaWdodCA9IG9wdGlvbnMucmVzaXplZEhlaWdodDtcbiAgICAgIHdpZHRoID0gb3B0aW9ucy5yZXNpemVkV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgIHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmZvcm1hdCA9ICdSR0JBJztcbiAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy53aWR0aCA9IHdpZHRoO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGVtcENhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuXG4gICAgICB0ZW1wQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICB0ZW1wQ2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gY3JlYXRlQ2FudmFzQ29udGV4dCh0ZW1wQ2FudmFzKTtcblxuICAgICAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgIHBpeGVsczJEQ29udGV4dC5wdXRJbWFnZURhdGEoaW1hZ2UsIDAsIDApO1xuICAgICAgICBkYXRhID0gcGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBpbWFnZS5kYXRhO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ltYWdlQml0bWFwKSB7XG4gICAgLy8gSW1hZ2VCaXRtYXAgLSBpbWFnZSBvYmplY3QgLSBmb3JtYXQgbXVzdCBiZSBwcm92aWRlZCBieSB1c2VyXG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBpbWFnZSBjb25maWcgd2l0aCBmb3JtYXQgZm9yIEltYWdlYml0bWFwJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gY3JlYXRlQ2FudmFzKCk7XG4gICAgY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICBjb25zdCBwaXhlbHMyRENvbnRleHQgPSBjcmVhdGVDYW52YXNDb250ZXh0KGNhbnZhcyk7XG5cbiAgICBpZiAocGl4ZWxzMkRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgICBwaXhlbHMyRENvbnRleHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGRhdGEgPSBwaXhlbHMyRENvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICByZXR1cm4gYnVmZmVyVG9UZW5zb3IoZGF0YSwgYnVmZmVyVG9UZW5zb3JPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUNhbnZhc0NvbnRleHQoY2FudmFzKTtcbiAgICAgIGlmICghaW1hZ2UgfHwgIWNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIG5ld0ltYWdlLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgICBuZXdJbWFnZS5zcmMgPSBpbWFnZTtcbiAgICAgIG5ld0ltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FudmFzLndpZHRoID0gbmV3SW1hZ2Uud2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdJbWFnZS5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG5ld0ltYWdlLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBjb25zdCBpbWcgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuXG4gICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICAgIHJlc29sdmUoYnVmZmVyVG9UZW5zb3IoaW1nLmRhdGEsIGJ1ZmZlclRvVGVuc29yT3B0aW9ucykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRhdGEgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZCAtIGFib3J0ZWQgdGVuc29yIGNyZWF0aW9uJyk7XG4gIH1cblxuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGJ1ZmZlclRvVGVuc29yKGRhdGEsIGJ1ZmZlclRvVGVuc29yT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBkYXRhIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQgLSBhYm9ydGVkIHRlbnNvciBjcmVhdGlvbicpO1xuICB9XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5mcm9tVGV4dHVyZSgpLlxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRnJvbVRleHR1cmUgPSA8VCBleHRlbmRzIFRlbnNvckludGVyZmFjZS5UZXh0dXJlRGF0YVR5cGVzPihcbiAgICB0ZXh0dXJlOiBUZW5zb3JJbnRlcmZhY2UuVGV4dHVyZVR5cGUsIG9wdGlvbnM6IFRlbnNvckZyb21UZXh0dXJlT3B0aW9uczxUPik6IFRlbnNvciA9PiB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkb3dubG9hZCwgZGlzcG9zZX0gPSBvcHRpb25zO1xuICAvLyBBbHdheXMgYXNzdW1lIFJHQkFGMzIuIFRPRE86IHN1cHBvcnQgZGlmZmVyZW50IHRleHR1cmUgZm9ybWF0XG4gIGNvbnN0IGRpbXMgPSBbMSwgaGVpZ2h0LCB3aWR0aCwgNF07XG4gIHJldHVybiBuZXcgVGVuc29yKHtsb2NhdGlvbjogJ3RleHR1cmUnLCB0eXBlOiAnZmxvYXQzMicsIHRleHR1cmUsIGRpbXMsIGRvd25sb2FkLCBkaXNwb3NlfSk7XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5mcm9tR3B1QnVmZmVyKCkuXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JGcm9tR3B1QnVmZmVyID0gPFQgZXh0ZW5kcyBUZW5zb3JJbnRlcmZhY2UuR3B1QnVmZmVyRGF0YVR5cGVzPihcbiAgICBncHVCdWZmZXI6IFRlbnNvckludGVyZmFjZS5HcHVCdWZmZXJUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9uczxUPik6IFRlbnNvciA9PiB7XG4gIGNvbnN0IHtkYXRhVHlwZSwgZGltcywgZG93bmxvYWQsIGRpc3Bvc2V9ID0gb3B0aW9ucztcbiAgcmV0dXJuIG5ldyBUZW5zb3Ioe2xvY2F0aW9uOiAnZ3B1LWJ1ZmZlcicsIHR5cGU6IGRhdGFUeXBlID8/ICdmbG9hdDMyJywgZ3B1QnVmZmVyLCBkaW1zLCBkb3dubG9hZCwgZGlzcG9zZX0pO1xufTtcblxuLyoqXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IuZnJvbVBpbm5lZEJ1ZmZlcigpLlxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRnJvbVBpbm5lZEJ1ZmZlciA9IDxUIGV4dGVuZHMgVGVuc29ySW50ZXJmYWNlLkNwdVBpbm5lZERhdGFUeXBlcz4oXG4gICAgdHlwZTogVCwgYnVmZmVyOiBUZW5zb3JJbnRlcmZhY2UuRGF0YVR5cGVNYXBbVF0sIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFRlbnNvciA9PlxuICAgIG5ldyBUZW5zb3Ioe2xvY2F0aW9uOiAnY3B1LXBpbm5lZCcsIHR5cGUsIGRhdGE6IGJ1ZmZlciwgZGltczogZGltcyA/PyBbYnVmZmVyLmxlbmd0aF19KTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IEZsb2F0MzJBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxJbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBVaW50MTZBcnJheUNvbnN0cnVjdG9yfEludDE2QXJyYXlDb25zdHJ1Y3RvcnxJbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnSW50NjRBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcnxVaW50MzJBcnJheUNvbnN0cnVjdG9yfEJpZ1VpbnQ2NEFycmF5Q29uc3RydWN0b3I7XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRUeXBlZEFycmF5ID0gSW5zdGFuY2VUeXBlPFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM+O1xuXG4vLyBhIHJ1bnRpbWUgbWFwIHRoYXQgbWFwcyB0eXBlIHN0cmluZyB0byBUeXBlZEFycmF5IGNvbnN0cnVjdG9yLiBTaG91bGQgbWF0Y2ggVGVuc29yLkRhdGFUeXBlTWFwLlxuZXhwb3J0IGNvbnN0IE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAgPSBuZXcgTWFwPHN0cmluZywgU3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycz4oW1xuICBbJ2Zsb2F0MzInLCBGbG9hdDMyQXJyYXldLFxuICBbJ3VpbnQ4JywgVWludDhBcnJheV0sXG4gIFsnaW50OCcsIEludDhBcnJheV0sXG4gIFsndWludDE2JywgVWludDE2QXJyYXldLFxuICBbJ2ludDE2JywgSW50MTZBcnJheV0sXG4gIFsnaW50MzInLCBJbnQzMkFycmF5XSxcbiAgWydib29sJywgVWludDhBcnJheV0sXG4gIFsnZmxvYXQ2NCcsIEZsb2F0NjRBcnJheV0sXG4gIFsndWludDMyJywgVWludDMyQXJyYXldLFxuXSk7XG5cbi8vIGEgcnVudGltZSBtYXAgdGhhdCBtYXBzIHR5cGUgc3RyaW5nIHRvIFR5cGVkQXJyYXkgY29uc3RydWN0b3IuIFNob3VsZCBtYXRjaCBUZW5zb3IuRGF0YVR5cGVNYXAuXG5leHBvcnQgY29uc3QgTlVNRVJJQ19URU5TT1JfVFlQRURBUlJBWV9UT19UWVBFX01BUCA9IG5ldyBNYXA8U3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycywgVGVuc29yLlR5cGU+KFtcbiAgW0Zsb2F0MzJBcnJheSwgJ2Zsb2F0MzInXSxcbiAgW1VpbnQ4QXJyYXksICd1aW50OCddLFxuICBbSW50OEFycmF5LCAnaW50OCddLFxuICBbVWludDE2QXJyYXksICd1aW50MTYnXSxcbiAgW0ludDE2QXJyYXksICdpbnQxNiddLFxuICBbSW50MzJBcnJheSwgJ2ludDMyJ10sXG4gIFtGbG9hdDY0QXJyYXksICdmbG9hdDY0J10sXG4gIFtVaW50MzJBcnJheSwgJ3VpbnQzMiddLFxuXSk7XG5cbi8vIGEgZHVtbXkgdHlwZSBkZWNsYXJhdGlvbiBmb3IgRmxvYXQxNkFycmF5IGluIGNhc2UgYW55IHBvbHlmaWxsIGlzIGF2YWlsYWJsZS5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBGbG9hdDE2QXJyYXk6IGFueTtcbn1cblxuLy8gdGhlIGZvbGxvd2luZyBjb2RlIGFsbG93cyBkZWxheWluZyBleGVjdXRpb24gb2YgQmlnSW50L0Zsb2F0MTZBcnJheSBjaGVja2luZy4gVGhpcyBhbGxvd3MgbGF6eSBpbml0aWFsaXphdGlvbiBmb3Jcbi8vIE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAgYW5kIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAsIHdoaWNoIGFsbG93cyBCaWdJbnQvRmxvYXQxNkFycmF5XG4vLyBwb2x5ZmlsbCBpZiBhdmFpbGFibGUuXG5sZXQgaXNUeXBlZEFycmF5Q2hlY2tlZCA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IGNoZWNrVHlwZWRBcnJheSA9ICgpID0+IHtcbiAgaWYgKCFpc1R5cGVkQXJyYXlDaGVja2VkKSB7XG4gICAgaXNUeXBlZEFycmF5Q2hlY2tlZCA9IHRydWU7XG4gICAgY29uc3QgaXNCaWdJbnQ2NEFycmF5QXZhaWxhYmxlID0gdHlwZW9mIEJpZ0ludDY0QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIEJpZ0ludDY0QXJyYXkuZnJvbTtcbiAgICBjb25zdCBpc0JpZ1VpbnQ2NEFycmF5QXZhaWxhYmxlID0gdHlwZW9mIEJpZ1VpbnQ2NEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBCaWdVaW50NjRBcnJheS5mcm9tO1xuICAgIGNvbnN0IGlzRmxvYXQxNkFycmF5QXZhaWxhYmxlID0gdHlwZW9mIEZsb2F0MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgRmxvYXQxNkFycmF5LmZyb207XG5cbiAgICBpZiAoaXNCaWdJbnQ2NEFycmF5QXZhaWxhYmxlKSB7XG4gICAgICBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLnNldCgnaW50NjQnLCBCaWdJbnQ2NEFycmF5KTtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAuc2V0KEJpZ0ludDY0QXJyYXksICdpbnQ2NCcpO1xuICAgIH1cbiAgICBpZiAoaXNCaWdVaW50NjRBcnJheUF2YWlsYWJsZSkge1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5zZXQoJ3VpbnQ2NCcsIEJpZ1VpbnQ2NEFycmF5KTtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAuc2V0KEJpZ1VpbnQ2NEFycmF5LCAndWludDY0Jyk7XG4gICAgfVxuICAgIGlmIChpc0Zsb2F0MTZBcnJheUF2YWlsYWJsZSkge1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5zZXQoJ2Zsb2F0MTYnLCBGbG9hdDE2QXJyYXkpO1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRURBUlJBWV9UT19UWVBFX01BUC5zZXQoRmxvYXQxNkFycmF5LCAnZmxvYXQxNicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBGbG9hdDE2QXJyYXkgaXMgbm90IGF2YWlsYWJsZSwgdXNlICdVaW50MTZBcnJheScgdG8gc3RvcmUgdGhlIGRhdGEuXG4gICAgICBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLnNldCgnZmxvYXQxNicsIFVpbnQxNkFycmF5KTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7Q3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzLCBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMsIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnN9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLWltcGwuanMnO1xuXG4vKipcbiAqIGNhbGN1bGF0ZSBzaXplIGZyb20gZGltcy5cbiAqXG4gKiBAcGFyYW0gZGltcyB0aGUgZGltcyBhcnJheS4gTWF5IGJlIGFuIGlsbGVnYWwgaW5wdXQuXG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVTaXplID0gKGRpbXM6IHJlYWRvbmx5IHVua25vd25bXSk6IG51bWJlciA9PiB7XG4gIGxldCBzaXplID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGltID0gZGltc1tpXTtcbiAgICBpZiAodHlwZW9mIGRpbSAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGRpbSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGRpbXNbJHtpfV0gbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3Q6ICR7ZGltfWApO1xuICAgIH1cbiAgICBpZiAoZGltIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGRpbXNbJHtpfV0gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3Q6ICR7ZGltfWApO1xuICAgIH1cbiAgICBzaXplICo9IGRpbTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn07XG5cbi8qKlxuICogaW1wbGVtZW50YXRpb24gb2YgVGVuc29yLnJlc2hhcGUoKVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yUmVzaGFwZSA9ICh0ZW5zb3I6IFRlbnNvciwgZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3IgPT4ge1xuICBzd2l0Y2ggKHRlbnNvci5sb2NhdGlvbikge1xuICAgIGNhc2UgJ2NwdSc6XG4gICAgICByZXR1cm4gbmV3IFRlbnNvcih0ZW5zb3IudHlwZSwgdGVuc29yLmRhdGEsIGRpbXMpO1xuICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgcmV0dXJuIG5ldyBUZW5zb3Ioe1xuICAgICAgICBsb2NhdGlvbjogJ2NwdS1waW5uZWQnLFxuICAgICAgICBkYXRhOiB0ZW5zb3IuZGF0YSBhcyBDcHVQaW5uZWRDb25zdHJ1Y3RvclBhcmFtZXRlcnNbJ2RhdGEnXSxcbiAgICAgICAgdHlwZTogdGVuc29yLnR5cGUgYXMgQ3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzWyd0eXBlJ10sXG4gICAgICAgIGRpbXMsXG4gICAgICB9KTtcbiAgICBjYXNlICd0ZXh0dXJlJzpcbiAgICAgIHJldHVybiBuZXcgVGVuc29yKHtcbiAgICAgICAgbG9jYXRpb246ICd0ZXh0dXJlJyxcbiAgICAgICAgdGV4dHVyZTogdGVuc29yLnRleHR1cmUsXG4gICAgICAgIHR5cGU6IHRlbnNvci50eXBlIGFzIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnNbJ3R5cGUnXSxcbiAgICAgICAgZGltcyxcbiAgICAgIH0pO1xuICAgIGNhc2UgJ2dwdS1idWZmZXInOlxuICAgICAgcmV0dXJuIG5ldyBUZW5zb3Ioe1xuICAgICAgICBsb2NhdGlvbjogJ2dwdS1idWZmZXInLFxuICAgICAgICBncHVCdWZmZXI6IHRlbnNvci5ncHVCdWZmZXIsXG4gICAgICAgIHR5cGU6IHRlbnNvci50eXBlIGFzIEdwdUJ1ZmZlckNvbnN0cnVjdG9yUGFyYW1ldGVyc1sndHlwZSddLFxuICAgICAgICBkaW1zLFxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdGVuc29yUmVzaGFwZTogdGVuc29yIGxvY2F0aW9uICR7dGVuc29yLmxvY2F0aW9ufSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7dGVuc29yVG9EYXRhVVJMLCB0ZW5zb3JUb0ltYWdlRGF0YX0gZnJvbSAnLi90ZW5zb3ItY29udmVyc2lvbi1pbXBsLmpzJztcbmltcG9ydCB7VGVuc29yVG9EYXRhVXJsT3B0aW9ucywgVGVuc29yVG9JbWFnZURhdGFPcHRpb25zfSBmcm9tICcuL3RlbnNvci1jb252ZXJzaW9uLmpzJztcbmltcG9ydCB7dGVuc29yRnJvbUdwdUJ1ZmZlciwgdGVuc29yRnJvbUltYWdlLCB0ZW5zb3JGcm9tUGlubmVkQnVmZmVyLCB0ZW5zb3JGcm9tVGV4dHVyZX0gZnJvbSAnLi90ZW5zb3ItZmFjdG9yeS1pbXBsLmpzJztcbmltcG9ydCB7Q3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzLCBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMsIFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9ucywgVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMsIFRlbnNvckZyb21UZXh0dXJlT3B0aW9ucywgVGVuc29yRnJvbVVybE9wdGlvbnMsIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnN9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtjaGVja1R5cGVkQXJyYXksIE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAsIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAsIFN1cHBvcnRlZFR5cGVkQXJyYXksIFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnN9IGZyb20gJy4vdGVuc29yLWltcGwtdHlwZS1tYXBwaW5nLmpzJztcbmltcG9ydCB7Y2FsY3VsYXRlU2l6ZSwgdGVuc29yUmVzaGFwZX0gZnJvbSAnLi90ZW5zb3ItdXRpbHMtaW1wbC5qcyc7XG5pbXBvcnQge1RlbnNvciBhcyBUZW5zb3JJbnRlcmZhY2V9IGZyb20gJy4vdGVuc29yLmpzJztcblxuLy8gdHlwZSBhbGlhc2VzIGZvciB0aG9zZSBleHBvcnRlZCBmcm9tIFRlbnNvciBpbnRlcmZhY2VcblxudHlwZSBUZW5zb3JUeXBlID0gVGVuc29ySW50ZXJmYWNlLlR5cGU7XG50eXBlIFRlbnNvckRhdGFUeXBlID0gVGVuc29ySW50ZXJmYWNlLkRhdGFUeXBlO1xudHlwZSBUZW5zb3JEYXRhTG9jYXRpb24gPSBUZW5zb3JJbnRlcmZhY2UuRGF0YUxvY2F0aW9uO1xudHlwZSBUZW5zb3JUZXh0dXJlVHlwZSA9IFRlbnNvckludGVyZmFjZS5UZXh0dXJlVHlwZTtcbnR5cGUgVGVuc29yR3B1QnVmZmVyVHlwZSA9IFRlbnNvckludGVyZmFjZS5HcHVCdWZmZXJUeXBlO1xuXG4vKipcbiAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IgaW50ZXJmYWNlLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbnNvciBpbXBsZW1lbnRzIFRlbnNvckludGVyZmFjZSB7XG4gIC8vICNyZWdpb24gY29uc3RydWN0b3JzXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBDUFUgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB0eXBlLCBkYXRhIGFuZCBkaW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgICB0eXBlOiBUZW5zb3JUeXBlLCBkYXRhOiBUZW5zb3JEYXRhVHlwZXxyZWFkb25seSBzdHJpbmdbXXxyZWFkb25seSBudW1iZXJbXXxyZWFkb25seSBib29sZWFuW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IENQVSB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuIFR5cGUgaXMgaW5mZXJyZWQgZnJvbSBkYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogVGVuc29yRGF0YVR5cGV8cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgYm9vbGVhbltdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgcGlubmVkIENQVSBkYXRhIHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRpbXMuXG4gICAqXG4gICAqIFRlbnNvcidzIGxvY2F0aW9uIHdpbGwgYmUgc2V0IHRvICdjcHUtcGlubmVkJy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFNwZWNpZnkgdGhlIHBhcmFtZXRlcnMgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJhbXM6IENwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVycyk7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBXZWJHTCB0ZXh0dXJlIHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRpbXMuXG4gICAqXG4gICAqIFRlbnNvcidzIGxvY2F0aW9uIHdpbGwgYmUgc2V0IHRvICd0ZXh0dXJlJy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFNwZWNpZnkgdGhlIHBhcmFtZXRlcnMgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJhbXM6IFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnMpO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgV2ViR1BVIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkaW1zLlxuICAgKlxuICAgKiBUZW5zb3IncyBsb2NhdGlvbiB3aWxsIGJlIHNldCB0byAnZ3B1LWJ1ZmZlcicuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTcGVjaWZ5IHRoZSBwYXJhbWV0ZXJzIHRvIGNvbnN0cnVjdCB0aGUgdGVuc29yLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1zOiBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMpO1xuXG4gIC8qKlxuICAgKiBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgYXJnMDogVGVuc29yVHlwZXxUZW5zb3JEYXRhVHlwZXxyZWFkb25seSBzdHJpbmdbXXxyZWFkb25seSBib29sZWFuW118Q3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzfFxuICAgICAgVGV4dHVyZUNvbnN0cnVjdG9yUGFyYW1ldGVyc3xHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMsXG4gICAgICBhcmcxPzogVGVuc29yRGF0YVR5cGV8cmVhZG9ubHkgbnVtYmVyW118cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgYm9vbGVhbltdLCBhcmcyPzogcmVhZG9ubHkgbnVtYmVyW10pIHtcbiAgICAvLyBwZXJmb3JtIG9uZS10aW1lIGNoZWNrIGZvciBCaWdJbnQvRmxvYXQxNkFycmF5IHN1cHBvcnRcbiAgICBjaGVja1R5cGVkQXJyYXkoKTtcblxuICAgIGxldCB0eXBlOiBUZW5zb3JUeXBlO1xuICAgIGxldCBkaW1zOiByZWFkb25seSBudW1iZXJbXTtcblxuICAgIGlmICh0eXBlb2YgYXJnMCA9PT0gJ29iamVjdCcgJiYgJ2xvY2F0aW9uJyBpbiBhcmcwKSB7XG4gICAgICAvL1xuICAgICAgLy8gY29uc3RydWN0aW5nIHRlbnNvciBmcm9tIHNwZWNpZmljIGxvY2F0aW9uXG4gICAgICAvL1xuICAgICAgdGhpcy5kYXRhTG9jYXRpb24gPSBhcmcwLmxvY2F0aW9uO1xuICAgICAgdHlwZSA9IGFyZzAudHlwZTtcbiAgICAgIGRpbXMgPSBhcmcwLmRpbXM7XG4gICAgICBzd2l0Y2ggKGFyZzAubG9jYXRpb24pIHtcbiAgICAgICAgY2FzZSAnY3B1LXBpbm5lZCc6IHtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAuZ2V0KHR5cGUpO1xuICAgICAgICAgIGlmICghZXhwZWN0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgXCIke3R5cGV9XCIgdG8gY3JlYXRlIHRlbnNvciBmcm9tIHBpbm5lZCBidWZmZXJgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEoYXJnMC5kYXRhIGluc3RhbmNlb2YgZXhwZWN0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBidWZmZXIgc2hvdWxkIGJlIG9mIHR5cGUgJHtleHBlY3RlZFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNwdURhdGEgPSBhcmcwLmRhdGE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGV4dHVyZSc6IHtcbiAgICAgICAgICBpZiAodHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlIFwiJHt0eXBlfVwiIHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbSB0ZXh0dXJlYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3B1VGV4dHVyZURhdGEgPSBhcmcwLnRleHR1cmU7XG4gICAgICAgICAgdGhpcy5kb3dubG9hZGVyID0gYXJnMC5kb3dubG9hZDtcbiAgICAgICAgICB0aGlzLmRpc3Bvc2VyID0gYXJnMC5kaXNwb3NlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2dwdS1idWZmZXInOiB7XG4gICAgICAgICAgaWYgKCh0eXBlICE9PSAnZmxvYXQzMicgJiYgdHlwZSAhPT0gJ2Zsb2F0MTYnICYmIHR5cGUgIT09ICdpbnQzMicgJiYgdHlwZSAhPT0gJ2ludDY0JyAmJiB0eXBlICE9PSAndWludDMyJyAmJlxuICAgICAgICAgICAgICAgdHlwZSAhPT0gJ3VpbnQ4JyAmJiB0eXBlICE9PSAnYm9vbCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlIFwiJHt0eXBlfVwiIHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbSBncHUgYnVmZmVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3B1QnVmZmVyRGF0YSA9IGFyZzAuZ3B1QnVmZmVyO1xuICAgICAgICAgIHRoaXMuZG93bmxvYWRlciA9IGFyZzAuZG93bmxvYWQ7XG4gICAgICAgICAgdGhpcy5kaXNwb3NlciA9IGFyZzAuZGlzcG9zZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIGNvbnN0cnVjdG9yOiB1bnN1cHBvcnRlZCBsb2NhdGlvbiAnJHt0aGlzLmRhdGFMb2NhdGlvbn0nYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vXG4gICAgICAvLyBjb25zdHJ1Y3RpbmcgdGVuc29yIG9mIGxvY2F0aW9uICdjcHUnXG4gICAgICAvL1xuICAgICAgbGV0IGRhdGE6IFRlbnNvckRhdGFUeXBlO1xuICAgICAgbGV0IG1heWJlRGltczogdHlwZW9mIGFyZzF8dHlwZW9mIGFyZzI7XG4gICAgICAvLyBjaGVjayB3aGV0aGVyIGFyZzAgaXMgdHlwZSBvciBkYXRhXG4gICAgICBpZiAodHlwZW9mIGFyZzAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIE92ZXJyaWRlOiBjb25zdHJ1Y3Rvcih0eXBlLCBkYXRhLCAuLi4pXG4gICAgICAgIC8vXG4gICAgICAgIHR5cGUgPSBhcmcwO1xuICAgICAgICBtYXliZURpbXMgPSBhcmcyO1xuICAgICAgICBpZiAoYXJnMCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBzdHJpbmcgdGVuc29yXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZzEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIHN0cmluZyB0ZW5zb3JcXCdzIGRhdGEgbXVzdCBiZSBhIHN0cmluZyBhcnJheS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgZG9uJ3QgY2hlY2sgd2hldGhlciBldmVyeSBlbGVtZW50IGluIHRoZSBhcnJheSBpcyBzdHJpbmc7IHRoaXMgaXMgdG9vIHNsb3cuIHdlIGFzc3VtZSBpdCdzIGNvcnJlY3QgYW5kXG4gICAgICAgICAgLy8gZXJyb3Igd2lsbCBiZSBwb3B1bGF0ZWQgYXQgaW5mZXJlbmNlXG4gICAgICAgICAgZGF0YSA9IGFyZzE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbnVtZXJpYyB0ZW5zb3JcbiAgICAgICAgICBjb25zdCB0eXBlZEFycmF5Q29uc3RydWN0b3IgPSBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLmdldChhcmcwKTtcbiAgICAgICAgICBpZiAodHlwZWRBcnJheUNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHRlbnNvciB0eXBlOiAke2FyZzB9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcxKSkge1xuICAgICAgICAgICAgaWYgKGFyZzAgPT09ICdmbG9hdDE2JyAmJiB0eXBlZEFycmF5Q29uc3RydWN0b3IgPT09IFVpbnQxNkFycmF5KSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gbm8gRmxvYXQxNkFycmF5IHBvbHlmaWxsIGlzIHVzZWQsIHdlIGNhbm5vdCBjcmVhdGUgJ2Zsb2F0MTYnIHRlbnNvciBmcm9tIG51bWJlciBhcnJheS5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3IgaGVyZSBiZWNhdXNlIHdoZW4gdXNlciB0cnkgdG8gdXNlIG51bWJlciBhcnJheSBhcyBkYXRhLFxuICAgICAgICAgICAgICAvLyBlLmcuIG5ldyBUZW5zb3IoJ2Zsb2F0MTYnLCBbMSwgMiwgMywgNF0sIGRpbXMpKSwgaXQgd2lsbCBhY3R1YWxseSBjYWxsXG4gICAgICAgICAgICAgIC8vIFVpbnQxNkFycmF5LmZyb20oYXJnMSkgd2hpY2ggZ2VuZXJhdGVzIHdyb25nIGRhdGEuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQ3JlYXRpbmcgYSBmbG9hdDE2IHRlbnNvciBmcm9tIG51bWJlciBhcnJheSBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgdXNlIFVpbnQxNkFycmF5IGFzIGRhdGEuJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZzAgPT09ICd1aW50NjQnIHx8IGFyZzAgPT09ICdpbnQ2NCcpIHtcbiAgICAgICAgICAgICAgLy8gdXNlICdhcyBhbnknIGhlcmUgYmVjYXVzZTpcbiAgICAgICAgICAgICAgLy8gMS4gVHlwZVNjcmlwdCdzIGNoZWNrIG9uIHR5cGUgb2YgJ0FycmF5LmlzQXJyYXkoKScgZG9lcyBub3Qgd29yayB3aXRoIHJlYWRvbmx5IGFycmF5cy5cbiAgICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTcwMDJcbiAgICAgICAgICAgICAgLy8gMi4gVHlwZVNjcmlwdCdzIGNoZWNrIG9uIHVuaW9uIHR5cGUgb2YgJyhCaWdJbnQ2NEFycmF5Q29uc3RydWN0b3J8QmlnVWludDY0QXJyYXlDb25zdHJ1Y3RvcikuZnJvbSgpJ1xuICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBhY2NlcHQgcGFyYW1ldGVyIG1hcEZuLlxuICAgICAgICAgICAgICAvLyAzLiBwYXJhbWV0ZXJzIG9mICdTdXBwb3J0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3JzLmZyb20oKScgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVtZW50IG9mIHRoZSB1bmlvblxuICAgICAgICAgICAgICAvLyB0eXBlLlxuXG4gICAgICAgICAgICAgIC8vIGFzc3VtZSAnYXJnMScgaXMgb2YgdHlwZSBcInJlYWRvbmx5IG51bWJlcltdfHJlYWRvbmx5IGJpZ2ludFtdXCIgaGVyZS5cblxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICBkYXRhID0gKHR5cGVkQXJyYXlDb25zdHJ1Y3RvciBhcyBhbnkpLmZyb20oYXJnMSwgQmlnSW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFzc3VtZSAnYXJnMScgaXMgb2YgdHlwZSBcInJlYWRvbmx5IG51bWJlcltdXCIgaGVyZS5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgZGF0YSA9ICh0eXBlZEFycmF5Q29uc3RydWN0b3IgYXMgYW55KS5mcm9tKGFyZzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYXJnMSBpbnN0YW5jZW9mIHR5cGVkQXJyYXlDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgZGF0YSA9IGFyZzE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEEgJHt0eXBlfSB0ZW5zb3IncyBkYXRhIG11c3QgYmUgdHlwZSBvZiAke3R5cGVkQXJyYXlDb25zdHJ1Y3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIE92ZXJyaWRlOiBjb25zdHJ1Y3RvcihkYXRhLCAuLi4pXG4gICAgICAgIC8vXG4gICAgICAgIG1heWJlRGltcyA9IGFyZzE7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZzApKSB7XG4gICAgICAgICAgLy8gb25seSBib29sZWFuW10gYW5kIHN0cmluZ1tdIGlzIHN1cHBvcnRlZFxuICAgICAgICAgIGlmIChhcmcwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVuc29yIHR5cGUgY2Fubm90IGJlIGluZmVycmVkIGZyb20gYW4gZW1wdHkgYXJyYXkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudFR5cGUgPSB0eXBlb2YgYXJnMFswXTtcbiAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnc3RyaW5nJztcbiAgICAgICAgICAgIGRhdGEgPSBhcmcwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmlyc3RFbGVtZW50VHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0eXBlID0gJ2Jvb2wnO1xuICAgICAgICAgICAgLy8gJ2FyZzAnIGlzIG9mIHR5cGUgJ2Jvb2xlYW5bXScuIFVpbnQ4QXJyYXkuZnJvbShib29sZWFuW10pIGFjdHVhbGx5IHdvcmtzLCBidXQgdHlwZXNjcmlwdCB0aGlua3MgdGhpcyBpc1xuICAgICAgICAgICAgLy8gd3JvbmcgdHlwZS4gV2UgdXNlICdhcyBhbnknIHRvIG1ha2UgaXQgaGFwcHkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgZGF0YSA9IFVpbnQ4QXJyYXkuZnJvbShhcmcwIGFzIGFueVtdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBlbGVtZW50IHR5cGUgb2YgZGF0YSBhcnJheTogJHtmaXJzdEVsZW1lbnRUeXBlfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZ2V0IHRlbnNvciB0eXBlIGZyb20gVHlwZWRBcnJheVxuICAgICAgICAgIGNvbnN0IG1hcHBlZFR5cGUgPVxuICAgICAgICAgICAgICBOVU1FUklDX1RFTlNPUl9UWVBFREFSUkFZX1RPX1RZUEVfTUFQLmdldChhcmcwLmNvbnN0cnVjdG9yIGFzIFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMpO1xuICAgICAgICAgIGlmIChtYXBwZWRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGUgZm9yIHRlbnNvciBkYXRhOiAke2FyZzAuY29uc3RydWN0b3J9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0eXBlID0gbWFwcGVkVHlwZTtcbiAgICAgICAgICBkYXRhID0gYXJnMCBhcyBTdXBwb3J0ZWRUeXBlZEFycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHR5cGUgYW5kIGRhdGEgaXMgcHJvY2Vzc2VkLCBub3cgcHJvY2Vzc2luZyBkaW1zXG4gICAgICBpZiAobWF5YmVEaW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYXNzdW1lIDEtRCB0ZW5zb3IgaWYgZGltcyBvbWl0dGVkXG4gICAgICAgIG1heWJlRGltcyA9IFtkYXRhLmxlbmd0aF07XG4gICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1heWJlRGltcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSB0ZW5zb3JcXCdzIGRpbXMgbXVzdCBiZSBhIG51bWJlciBhcnJheScpO1xuICAgICAgfVxuICAgICAgZGltcyA9IG1heWJlRGltcyBhcyByZWFkb25seSBudW1iZXJbXTtcblxuICAgICAgdGhpcy5jcHVEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gJ2NwdSc7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSBjaGVjayBvbiBkaW1zXG4gICAgY29uc3Qgc2l6ZSA9IGNhbGN1bGF0ZVNpemUoZGltcyk7XG4gICAgLy8gaWYgZGF0YSBpcyBvbiBDUFUsIGNoZWNrIHdoZXRoZXIgZGF0YSBsZW5ndGggbWF0Y2hlcyB0ZW5zb3Igc2l6ZVxuICAgIGlmICh0aGlzLmNwdURhdGEgJiYgc2l6ZSAhPT0gdGhpcy5jcHVEYXRhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5zb3IncyBzaXplKCR7c2l6ZX0pIGRvZXMgbm90IG1hdGNoIGRhdGEgbGVuZ3RoKCR7dGhpcy5jcHVEYXRhLmxlbmd0aH0pLmApO1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5kaW1zID0gZGltcztcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIGZhY3RvcnlcbiAgc3RhdGljIGFzeW5jIGZyb21JbWFnZShcbiAgICAgIGltYWdlOiBJbWFnZURhdGF8SFRNTEltYWdlRWxlbWVudHxJbWFnZUJpdG1hcHxzdHJpbmcsXG4gICAgICBvcHRpb25zPzogVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnN8VGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnN8VGVuc29yRnJvbUltYWdlQml0bWFwT3B0aW9uc3xcbiAgICAgIFRlbnNvckZyb21VcmxPcHRpb25zKTogUHJvbWlzZTxUZW5zb3JJbnRlcmZhY2U+IHtcbiAgICByZXR1cm4gdGVuc29yRnJvbUltYWdlKGltYWdlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGV4dHVyZTxUIGV4dGVuZHMgVGVuc29ySW50ZXJmYWNlLlRleHR1cmVEYXRhVHlwZXM+KFxuICAgICAgdGV4dHVyZTogVGVuc29yVGV4dHVyZVR5cGUsIG9wdGlvbnM6IFRlbnNvckZyb21UZXh0dXJlT3B0aW9uczxUPik6IFRlbnNvckludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRlbnNvckZyb21UZXh0dXJlKHRleHR1cmUsIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21HcHVCdWZmZXI8VCBleHRlbmRzIFRlbnNvckludGVyZmFjZS5HcHVCdWZmZXJEYXRhVHlwZXM+KFxuICAgICAgZ3B1QnVmZmVyOiBUZW5zb3JHcHVCdWZmZXJUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9uczxUPik6IFRlbnNvckludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRlbnNvckZyb21HcHVCdWZmZXIoZ3B1QnVmZmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGlubmVkQnVmZmVyPFQgZXh0ZW5kcyBUZW5zb3JJbnRlcmZhY2UuQ3B1UGlubmVkRGF0YVR5cGVzPihcbiAgICAgIHR5cGU6IFQsIGJ1ZmZlcjogVGVuc29ySW50ZXJmYWNlLkRhdGFUeXBlTWFwW1RdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3Ige1xuICAgIHJldHVybiB0ZW5zb3JGcm9tUGlubmVkQnVmZmVyKHR5cGUsIGJ1ZmZlciwgZGltcyk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBjb252ZXJzaW9uc1xuICB0b0RhdGFVUkwob3B0aW9ucz86IFRlbnNvclRvRGF0YVVybE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZW5zb3JUb0RhdGFVUkwodGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICB0b0ltYWdlRGF0YShvcHRpb25zPzogVGVuc29yVG9JbWFnZURhdGFPcHRpb25zKTogSW1hZ2VEYXRhIHtcbiAgICByZXR1cm4gdGVuc29yVG9JbWFnZURhdGEodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcHVibGljIGZpZWxkc1xuICByZWFkb25seSBkaW1zOiByZWFkb25seSBudW1iZXJbXTtcbiAgcmVhZG9ubHkgdHlwZTogVGVuc29yVHlwZTtcbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBwcml2YXRlIGZpZWxkc1xuXG4gIC8qKlxuICAgKiBzdG9yZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhTG9jYXRpb246IFRlbnNvckRhdGFMb2NhdGlvbjtcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSBkYXRhIG9uIENQVSwgaWYgbG9jYXRpb24gaXMgJ2NwdScgb3IgJ2NwdS1waW5uZWQnLiBvdGhlcndpc2UgZW1wdHkuXG4gICAqL1xuICBwcml2YXRlIGNwdURhdGE/OiBUZW5zb3JEYXRhVHlwZTtcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgd2hlbiBsb2NhdGlvbiBpcyAndGV4dHVyZScuIG90aGVyd2lzZSBlbXB0eS5cbiAgICovXG4gIHByaXZhdGUgZ3B1VGV4dHVyZURhdGE/OiBUZW5zb3JUZXh0dXJlVHlwZTtcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSB1bmRlcmx5aW5nIEdQVSBidWZmZXIgd2hlbiBsb2NhdGlvbiBpcyAnZ3B1LWJ1ZmZlcicuIG90aGVyd2lzZSBlbXB0eS5cbiAgICovXG4gIHByaXZhdGUgZ3B1QnVmZmVyRGF0YT86IFRlbnNvckdwdUJ1ZmZlclR5cGU7XG5cbiAgLyoqXG4gICAqIHN0b3JlcyBhbiBvcHRpb25hbCBkb3dubG9hZGVyIGZ1bmN0aW9uIHRvIGRvd25sb2FkIGRhdGEgZnJvbSBHUFUgdG8gQ1BVLlxuICAgKi9cbiAgcHJpdmF0ZSBkb3dubG9hZGVyPygpOiBQcm9taXNlPFRlbnNvckRhdGFUeXBlPjtcblxuICAvKipcbiAgICogYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGF0YSBpcyBiZWluZyBkb3dubG9hZGVkIGZyb20gR1BVIHRvIENQVS5cbiAgICovXG4gIHByaXZhdGUgaXNEb3dubG9hZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHN0b3JlcyBhbiBvcHRpb25hbCBkaXNwb3NlciBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSB1bmRlcmx5aW5nIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGRpc3Bvc2VyPygpOiB2b2lkO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBwcm9wZXJ0aWVzXG4gIGdldCBkYXRhKCk6IFRlbnNvckRhdGFUeXBlIHtcbiAgICB0aGlzLmVuc3VyZVZhbGlkKCk7XG4gICAgaWYgKCF0aGlzLmNwdURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVGhlIGRhdGEgaXMgbm90IG9uIENQVS4gVXNlIGBnZXREYXRhKClgIHRvIGRvd25sb2FkIEdQVSBkYXRhIHRvIENQVSwgJyArXG4gICAgICAgICAgJ29yIHVzZSBgdGV4dHVyZWAgb3IgYGdwdUJ1ZmZlcmAgcHJvcGVydHkgdG8gYWNjZXNzIHRoZSBHUFUgZGF0YSBkaXJlY3RseS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3B1RGF0YTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvbigpOiBUZW5zb3JEYXRhTG9jYXRpb24ge1xuICAgIHJldHVybiB0aGlzLmRhdGFMb2NhdGlvbjtcbiAgfVxuXG4gIGdldCB0ZXh0dXJlKCk6IFRlbnNvclRleHR1cmVUeXBlIHtcbiAgICB0aGlzLmVuc3VyZVZhbGlkKCk7XG4gICAgaWYgKCF0aGlzLmdwdVRleHR1cmVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIGlzIG5vdCBzdG9yZWQgYXMgYSBXZWJHTCB0ZXh0dXJlLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ncHVUZXh0dXJlRGF0YTtcbiAgfVxuXG4gIGdldCBncHVCdWZmZXIoKTogVGVuc29yR3B1QnVmZmVyVHlwZSB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIGlmICghdGhpcy5ncHVCdWZmZXJEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIGlzIG5vdCBzdG9yZWQgYXMgYSBXZWJHUFUgYnVmZmVyLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ncHVCdWZmZXJEYXRhO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIG1ldGhvZHNcblxuICBhc3luYyBnZXREYXRhKHJlbGVhc2VEYXRhPzogYm9vbGVhbik6IFByb21pc2U8VGVuc29yRGF0YVR5cGU+IHtcbiAgICB0aGlzLmVuc3VyZVZhbGlkKCk7XG4gICAgc3dpdGNoICh0aGlzLmRhdGFMb2NhdGlvbikge1xuICAgICAgY2FzZSAnY3B1JzpcbiAgICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgY2FzZSAndGV4dHVyZSc6XG4gICAgICBjYXNlICdncHUtYnVmZmVyJzoge1xuICAgICAgICBpZiAoIXRoaXMuZG93bmxvYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGN1cnJlbnQgdGVuc29yIGlzIG5vdCBjcmVhdGVkIHdpdGggYSBzcGVjaWZpZWQgZGF0YSBkb3dubG9hZGVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRG93bmxvYWRpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjdXJyZW50IHRlbnNvciBpcyBiZWluZyBkb3dubG9hZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZGVyKCk7XG4gICAgICAgICAgdGhpcy5kb3dubG9hZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gJ2NwdSc7XG4gICAgICAgICAgdGhpcy5jcHVEYXRhID0gZGF0YTtcblxuICAgICAgICAgIGlmIChyZWxlYXNlRGF0YSAmJiB0aGlzLmRpc3Bvc2VyKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VyKCk7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBkYXRhO1xuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGdldCBkYXRhIGZyb20gbG9jYXRpb246ICR7dGhpcy5kYXRhTG9jYXRpb259YCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjdXJyZW50IHRlbnNvciBpcyBiZWluZyBkb3dubG9hZGVkLicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRpc3Bvc2VyKSB7XG4gICAgICB0aGlzLmRpc3Bvc2VyKCk7XG4gICAgICB0aGlzLmRpc3Bvc2VyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmNwdURhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ncHVUZXh0dXJlRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmdwdUJ1ZmZlckRhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kb3dubG9hZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNEb3dubG9hZGluZyA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gJ25vbmUnO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gdGVuc29yIHV0aWxpdGllc1xuICBwcml2YXRlIGVuc3VyZVZhbGlkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFMb2NhdGlvbiA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0ZW5zb3IgaXMgZGlzcG9zZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcmVzaGFwZShkaW1zOiByZWFkb25seSBudW1iZXJbXSk6IFRlbnNvckludGVyZmFjZSB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIGlmICh0aGlzLmRvd25sb2FkZXIgfHwgdGhpcy5kaXNwb3Nlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmVzaGFwZSBhIHRlbnNvciB0aGF0IG93bnMgR1BVIHJlc291cmNlLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGVuc29yUmVzaGFwZSh0aGlzLCBkaW1zKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yRmFjdG9yeX0gZnJvbSAnLi90ZW5zb3ItZmFjdG9yeS5qcyc7XG5pbXBvcnQge1RlbnNvciBhcyBUZW5zb3JJbXBsfSBmcm9tICcuL3RlbnNvci1pbXBsLmpzJztcbmltcG9ydCB7VHlwZWRUZW5zb3JVdGlsc30gZnJvbSAnLi90ZW5zb3ItdXRpbHMuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkZWNsYXJlICovXG5cbi8qKlxuICogcmVwcmVzZW50IGEgYmFzaWMgdGVuc29yIHdpdGggc3BlY2lmaWVkIGRpbWVuc2lvbnMgYW5kIGRhdGEgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIFR5cGVkVGVuc29yQmFzZTxUIGV4dGVuZHMgVGVuc29yLlR5cGU+IHtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgcmVhZG9ubHkgZGltczogcmVhZG9ubHkgbnVtYmVyW107XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVDtcbiAgLyoqXG4gICAqIEdldCB0aGUgYnVmZmVyIGRhdGEgb2YgdGhlIHRlbnNvci5cbiAgICpcbiAgICogSWYgdGhlIGRhdGEgaXMgbm90IG9uIENQVSAoZWcuIGl0J3MgaW4gdGhlIGZvcm0gb2YgV2ViR0wgdGV4dHVyZSBvciBXZWJHUFUgYnVmZmVyKSwgdGhyb3cgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBkYXRhOiBUZW5zb3IuRGF0YVR5cGVNYXBbVF07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246IFRlbnNvci5EYXRhTG9jYXRpb247XG4gIC8qKlxuICAgKiBHZXQgdGhlIFdlYkdMIHRleHR1cmUgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG5vdCBvbiBHUFUgYXMgV2ViR0wgdGV4dHVyZSwgdGhyb3cgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSB0ZXh0dXJlOiBUZW5zb3IuVGV4dHVyZVR5cGU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIFdlYkdQVSBidWZmZXIgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG5vdCBvbiBHUFUgYXMgV2ViR1BVIGJ1ZmZlciwgdGhyb3cgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBncHVCdWZmZXI6IFRlbnNvci5HcHVCdWZmZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJ1ZmZlciBkYXRhIG9mIHRoZSB0ZW5zb3IuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG9uIENQVSwgcmV0dXJucyB0aGUgZGF0YSBpbW1lZGlhdGVseS5cbiAgICogSWYgdGhlIGRhdGEgaXMgb24gR1BVLCBkb3dubG9hZHMgdGhlIGRhdGEgYW5kIHJldHVybnMgdGhlIHByb21pc2UuXG4gICAqXG4gICAqIEBwYXJhbSByZWxlYXNlRGF0YSAtIHdoZXRoZXIgcmVsZWFzZSB0aGUgZGF0YSBvbiBHUFUuIElnbm9yZSBpZiBkYXRhIGlzIGFscmVhZHkgb24gQ1BVLlxuICAgKi9cbiAgZ2V0RGF0YShyZWxlYXNlRGF0YT86IGJvb2xlYW4pOiBQcm9taXNlPFRlbnNvci5EYXRhVHlwZU1hcFtUXT47XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIHRlbnNvciBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YSBpcyBvbiBDUFUsIHJlbW92ZSBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGRhdGEuXG4gICAqIElmIHRoZSBkYXRhIGlzIG9uIEdQVSwgcmVsZWFzZSB0aGUgZGF0YSBvbiBHUFUuXG4gICAqXG4gICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIHRlbnNvciBpcyBjb25zaWRlcmVkIG5vIGxvbmdlciB2YWxpZC4gSXRzIGxvY2F0aW9uIHdpbGwgYmUgc2V0IHRvICdub25lJy5cbiAgICovXG4gIGRpc3Bvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIFRlbnNvciB7XG4gIGludGVyZmFjZSBEYXRhVHlwZU1hcCB7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDg6IEludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIGludDMyOiBJbnQzMkFycmF5O1xuICAgIGludDY0OiBCaWdJbnQ2NEFycmF5O1xuICAgIHN0cmluZzogc3RyaW5nW107XG4gICAgYm9vbDogVWludDhBcnJheTtcbiAgICBmbG9hdDE2OiBVaW50MTZBcnJheTsgIC8vIEtlZXAgdXNpbmcgVWludDE2QXJyYXkgdW50aWwgd2UgaGF2ZSBhIGNvbmNyZXRlIHNvbHV0aW9uIGZvciBmbG9hdCAxNi5cbiAgICBmbG9hdDY0OiBGbG9hdDY0QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50NjQ6IEJpZ1VpbnQ2NEFycmF5O1xuICAgIC8vIGNvbXBsZXg2NDogbmV2ZXI7XG4gICAgLy8gY29tcGxleDEyODogbmV2ZXI7XG4gICAgLy8gYmZsb2F0MTY6IG5ldmVyO1xuICB9XG5cbiAgaW50ZXJmYWNlIEVsZW1lbnRUeXBlTWFwIHtcbiAgICBmbG9hdDMyOiBudW1iZXI7XG4gICAgdWludDg6IG51bWJlcjtcbiAgICBpbnQ4OiBudW1iZXI7XG4gICAgdWludDE2OiBudW1iZXI7XG4gICAgaW50MTY6IG51bWJlcjtcbiAgICBpbnQzMjogbnVtYmVyO1xuICAgIGludDY0OiBiaWdpbnQ7XG4gICAgc3RyaW5nOiBzdHJpbmc7XG4gICAgYm9vbDogYm9vbGVhbjtcbiAgICBmbG9hdDE2OiBudW1iZXI7ICAvLyBLZWVwIHVzaW5nIFVpbnQxNkFycmF5IHVudGlsIHdlIGhhdmUgYSBjb25jcmV0ZSBzb2x1dGlvbiBmb3IgZmxvYXQgMTYuXG4gICAgZmxvYXQ2NDogbnVtYmVyO1xuICAgIHVpbnQzMjogbnVtYmVyO1xuICAgIHVpbnQ2NDogYmlnaW50O1xuICAgIC8vIGNvbXBsZXg2NDogbmV2ZXI7XG4gICAgLy8gY29tcGxleDEyODogbmV2ZXI7XG4gICAgLy8gYmZsb2F0MTY6IG5ldmVyO1xuICB9XG5cbiAgdHlwZSBEYXRhVHlwZSA9IERhdGFUeXBlTWFwW1R5cGVdO1xuICB0eXBlIEVsZW1lbnRUeXBlID0gRWxlbWVudFR5cGVNYXBbVHlwZV07XG5cbiAgLyoqXG4gICAqIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIHBpbm5lZCBDUFUgYnVmZmVyXG4gICAqL1xuICBleHBvcnQgdHlwZSBDcHVQaW5uZWREYXRhVHlwZXMgPSBFeGNsdWRlPFRlbnNvci5UeXBlLCAnc3RyaW5nJz47XG5cbiAgLyoqXG4gICAqIHR5cGUgYWxpYXMgZm9yIFdlYkdMIHRleHR1cmVcbiAgICovXG4gIGV4cG9ydCB0eXBlIFRleHR1cmVUeXBlID0gV2ViR0xUZXh0dXJlO1xuXG4gIC8qKlxuICAgKiBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBXZWJHTCB0ZXh0dXJlXG4gICAqL1xuICBleHBvcnQgdHlwZSBUZXh0dXJlRGF0YVR5cGVzID0gJ2Zsb2F0MzInO1xuXG4gIC8qKlxuICAgKiB0eXBlIGFsaWFzIGZvciBXZWJHUFUgYnVmZmVyXG4gICAqXG4gICAqIFRoZSByZWFzb24gd2h5IHdlIGRvbid0IHVzZSB0eXBlIFwiR1BVQnVmZmVyXCIgZGVmaW5lZCBpbiB3ZWJncHUuZC50cyBmcm9tIEB3ZWJncHUvdHlwZXMgaXMgYmVjYXVzZSBcIkB3ZWJncHUvdHlwZXNcIlxuICAgKiByZXF1aXJlcyBcIkB0eXBlcy9kb20td2ViY29kZWNzXCIgYXMgcGVlciBkZXBlbmRlbmN5IHdoZW4gdXNpbmcgVHlwZVNjcmlwdCA8IHY1LjEgYW5kIGl0cyB2ZXJzaW9uIG5lZWQgdG8gYmUgY2hvc2VuXG4gICAqIGNhcmVmdWxseSBhY2NvcmRpbmcgdG8gdGhlIFR5cGVTY3JpcHQgdmVyc2lvbiBiZWluZyB1c2VkLiBUaGlzIG1lYW5zIHNvIGZhciB0aGVyZSBpcyBub3QgYSB3YXkgdG8ga2VlcCBldmVyeVxuICAgKiBUeXBlU2NyaXB0IHZlcnNpb24gaGFwcHkuIEl0IHR1cm5zIG91dCB0aGF0IHdlIHdpbGwgZWFzaWx5IGJyb2tlIHVzZXJzIG9uIHNvbWUgVHlwZVNjcmlwdCB2ZXJzaW9uLlxuICAgKlxuICAgKiBmb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL3R5cGVzL2lzc3Vlcy8xMjdcbiAgICovXG4gIGV4cG9ydCB0eXBlIEdwdUJ1ZmZlclR5cGUgPSB7c2l6ZTogbnVtYmVyOyBtYXBTdGF0ZTogJ3VubWFwcGVkJyB8ICdwZW5kaW5nJyB8ICdtYXBwZWQnfTtcblxuICAvKipcbiAgICogc3VwcG9ydGVkIGRhdGEgdHlwZXMgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgV2ViR1BVIGJ1ZmZlclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgR3B1QnVmZmVyRGF0YVR5cGVzID0gJ2Zsb2F0MzInfCdmbG9hdDE2J3wnaW50MzInfCdpbnQ2NCd8J3VpbnQzMid8J3VpbnQ4J3wnYm9vbCc7XG5cbiAgLyoqXG4gICAqIHJlcHJlc2VudCB3aGVyZSB0aGUgdGVuc29yIGRhdGEgaXMgc3RvcmVkXG4gICAqL1xuICBleHBvcnQgdHlwZSBEYXRhTG9jYXRpb24gPSAnbm9uZSd8J2NwdSd8J2NwdS1waW5uZWQnfCd0ZXh0dXJlJ3wnZ3B1LWJ1ZmZlcic7XG5cbiAgLyoqXG4gICAqIHJlcHJlc2VudCB0aGUgZGF0YSB0eXBlIG9mIGEgdGVuc29yXG4gICAqL1xuICBleHBvcnQgdHlwZSBUeXBlID0ga2V5b2YgRGF0YVR5cGVNYXA7XG59XG5cbi8qKlxuICogUmVwcmVzZW50IG11bHRpLWRpbWVuc2lvbmFsIGFycmF5cyB0byBmZWVkIHRvIG9yIGZldGNoIGZyb20gbW9kZWwgaW5mZXJlbmNpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRUZW5zb3I8VCBleHRlbmRzIFRlbnNvci5UeXBlPiBleHRlbmRzIFR5cGVkVGVuc29yQmFzZTxUPiwgVHlwZWRUZW5zb3JVdGlsczxUPiB7fVxuLyoqXG4gKiBSZXByZXNlbnQgbXVsdGktZGltZW5zaW9uYWwgYXJyYXlzIHRvIGZlZWQgdG8gb3IgZmV0Y2ggZnJvbSBtb2RlbCBpbmZlcmVuY2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5zb3IgZXh0ZW5kcyBUeXBlZFRlbnNvckJhc2U8VGVuc29yLlR5cGU+LCBUeXBlZFRlbnNvclV0aWxzPFRlbnNvci5UeXBlPiB7fVxuXG4vKipcbiAqIHR5cGUgVGVuc29yQ29uc3RydWN0b3IgZGVmaW5lcyB0aGUgY29uc3RydWN0b3JzIG9mICdUZW5zb3InIHRvIGNyZWF0ZSBDUFUgdGVuc29yIGluc3RhbmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JDb25zdHJ1Y3RvciBleHRlbmRzIFRlbnNvckZhY3Rvcnkge1xuICAvLyAjcmVnaW9uIENQVSB0ZW5zb3IgLSBzcGVjaWZ5IGVsZW1lbnQgdHlwZVxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHN0cmluZyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIHR5cGUsIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gU3BlY2lmeSB0aGUgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcodHlwZTogJ3N0cmluZycsIGRhdGE6IFRlbnNvci5EYXRhVHlwZU1hcFsnc3RyaW5nJ118cmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnc3RyaW5nJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBib29sIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gdHlwZSwgZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBTcGVjaWZ5IHRoZSBlbGVtZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyh0eXBlOiAnYm9vbCcsIGRhdGE6IFRlbnNvci5EYXRhVHlwZU1hcFsnYm9vbCddfHJlYWRvbmx5IGJvb2xlYW5bXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2Jvb2wnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IDY0LWJpdCBpbnRlZ2VyIHR5cGVkIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gdHlwZSwgZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBTcGVjaWZ5IHRoZSBlbGVtZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldzxUIGV4dGVuZHMgJ3VpbnQ2NCd8J2ludDY0Jz4oXG4gICAgICB0eXBlOiBULCBkYXRhOiBUZW5zb3IuRGF0YVR5cGVNYXBbVF18cmVhZG9ubHkgYmlnaW50W118cmVhZG9ubHkgbnVtYmVyW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjxUPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IG51bWVyaWMgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB0eXBlLCBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFNwZWNpZnkgdGhlIGVsZW1lbnQgdHlwZS5cbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3PFQgZXh0ZW5kcyBFeGNsdWRlPFRlbnNvci5UeXBlLCAnc3RyaW5nJ3wnYm9vbCd8J3VpbnQ2NCd8J2ludDY0Jz4+KFxuICAgICAgdHlwZTogVCwgZGF0YTogVGVuc29yLkRhdGFUeXBlTWFwW1RdfHJlYWRvbmx5IG51bWJlcltdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjxUPjtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gQ1BVIHRlbnNvciAtIGluZmVyIGVsZW1lbnQgdHlwZXNcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGZsb2F0MzIgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogRmxvYXQzMkFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnZmxvYXQzMic+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgaW50OCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBJbnQ4QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdpbnQ4Jz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB1aW50OCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBVaW50OEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwndWludDgnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHVpbnQxNiB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBVaW50MTZBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J3VpbnQxNic+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgaW50MTYgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogSW50MTZBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2ludDE2Jz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBpbnQzMiB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBJbnQzMkFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnaW50MzInPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGludDY0IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IEJpZ0ludDY0QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdpbnQ2NCc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgc3RyaW5nIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IHJlYWRvbmx5IHN0cmluZ1tdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnc3RyaW5nJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBib29sIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IHJlYWRvbmx5IGJvb2xlYW5bXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2Jvb2wnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGZsb2F0NjQgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogRmxvYXQ2NEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnZmxvYXQ2NCc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdWludDMyIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IFVpbnQzMkFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwndWludDMyJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB1aW50NjQgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogQmlnVWludDY0QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCd1aW50NjQnPjtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBDUFUgdGVuc29yIC0gZmFsbCBiYWNrIHRvIG5vbi1nZW5lcmljIHRlbnNvciB0eXBlIGRlY2xhcmF0aW9uXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIHR5cGUsIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gU3BlY2lmeSB0aGUgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcodHlwZTogVGVuc29yLlR5cGUsIGRhdGE6IFRlbnNvci5EYXRhVHlwZXxyZWFkb25seSBudW1iZXJbXXxyZWFkb25seSBzdHJpbmdbXXxyZWFkb25seSBiaWdpbnRbXXxyZWFkb25seSBib29sZWFuW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3I7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBUZW5zb3IuRGF0YVR5cGUsIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFRlbnNvcjtcbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgVGVuc29yID0gVGVuc29ySW1wbCBhcyBUZW5zb3JDb25zdHJ1Y3RvcjtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52LWltcGwuanMnO1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFID0gKGRldmljZVR5cGU6IHN0cmluZywgbGFiZWw6IHN0cmluZykgPT4ge1xuICBpZiAodHlwZW9mIGVudi50cmFjZSA9PT0gJ3VuZGVmaW5lZCcgPyAhZW52Lndhc20udHJhY2UgOiAhZW52LnRyYWNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUudGltZVN0YW1wKGAke2RldmljZVR5cGV9OjpPUlQ6OiR7bGFiZWx9YCk7XG59O1xuXG5jb25zdCBUUkFDRV9GVU5DID0gKG1zZzogc3RyaW5nLCBleHRyYU1zZz86IHN0cmluZykgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrPy5zcGxpdCgvXFxyXFxufFxccnxcXG4vZykgfHwgW107XG4gIGxldCBoYXNUcmFjZUZ1bmMgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgIGlmIChoYXNUcmFjZUZ1bmMgJiYgIXN0YWNrW2ldLmluY2x1ZGVzKCdUUkFDRV9GVU5DJykpIHtcbiAgICAgIGxldCBsYWJlbCA9IGBGVU5DXyR7bXNnfTo6JHtzdGFja1tpXS50cmltKCkuc3BsaXQoJyAnKVsxXX1gO1xuICAgICAgaWYgKGV4dHJhTXNnKSB7XG4gICAgICAgIGxhYmVsICs9IGA6OiR7ZXh0cmFNc2d9YDtcbiAgICAgIH1cbiAgICAgIFRSQUNFKCdDUFUnLCBsYWJlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGFja1tpXS5pbmNsdWRlcygnVFJBQ0VfRlVOQycpKSB7XG4gICAgICBoYXNUcmFjZUZ1bmMgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9GVU5DX0JFR0lOID0gKGV4dHJhTXNnPzogc3RyaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgZW52LnRyYWNlID09PSAndW5kZWZpbmVkJyA/ICFlbnYud2FzbS50cmFjZSA6ICFlbnYudHJhY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgVFJBQ0VfRlVOQygnQkVHSU4nLCBleHRyYU1zZyk7XG59O1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX0ZVTkNfRU5EID0gKGV4dHJhTXNnPzogc3RyaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgZW52LnRyYWNlID09PSAndW5kZWZpbmVkJyA/ICFlbnYud2FzbS50cmFjZSA6ICFlbnYudHJhY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgVFJBQ0VfRlVOQygnRU5EJywgZXh0cmFNc2cpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtyZXNvbHZlQmFja2VuZEFuZEV4ZWN1dGlvblByb3ZpZGVyc30gZnJvbSAnLi9iYWNrZW5kLWltcGwuanMnO1xuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcn0gZnJvbSAnLi9iYWNrZW5kLmpzJztcbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbiBhcyBJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlfSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmltcG9ydCB7T25ueFZhbHVlfSBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcbmltcG9ydCB7VFJBQ0VfRlVOQ19CRUdJTiwgVFJBQ0VfRlVOQ19FTkR9IGZyb20gJy4vdHJhY2UuanMnO1xuXG50eXBlIFNlc3Npb25PcHRpb25zID0gSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5TZXNzaW9uT3B0aW9ucztcbnR5cGUgUnVuT3B0aW9ucyA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuUnVuT3B0aW9ucztcbnR5cGUgRmVlZHNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5GZWVkc1R5cGU7XG50eXBlIEZldGNoZXNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5GZXRjaGVzVHlwZTtcbnR5cGUgUmV0dXJuVHlwZSA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuUmV0dXJuVHlwZTtcblxuZXhwb3J0IGNsYXNzIEluZmVyZW5jZVNlc3Npb24gaW1wbGVtZW50cyBJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlIHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihoYW5kbGVyOiBJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcikge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cbiAgcnVuKGZlZWRzOiBGZWVkc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSZXR1cm5UeXBlPjtcbiAgcnVuKGZlZWRzOiBGZWVkc1R5cGUsIGZldGNoZXM6IEZldGNoZXNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIGFzeW5jIHJ1bihmZWVkczogRmVlZHNUeXBlLCBhcmcxPzogRmV0Y2hlc1R5cGV8UnVuT3B0aW9ucywgYXJnMj86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKCk7XG4gICAgY29uc3QgZmV0Y2hlczoge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV8bnVsbH0gPSB7fTtcbiAgICBsZXQgb3B0aW9uczogUnVuT3B0aW9ucyA9IHt9O1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICh0eXBlb2YgZmVlZHMgIT09ICdvYmplY3QnIHx8IGZlZWRzID09PSBudWxsIHx8IGZlZWRzIGluc3RhbmNlb2YgVGVuc29yIHx8IEFycmF5LmlzQXJyYXkoZmVlZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdcXCdmZWVkc1xcJyBtdXN0IGJlIGFuIG9iamVjdCB0aGF0IHVzZSBpbnB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuJyk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmV0Y2hlc0VtcHR5ID0gdHJ1ZTtcbiAgICAvLyBkZXRlcm1pbmUgd2hpY2ggb3ZlcnJpZGUgaXMgYmVpbmcgdXNlZFxuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChhcmcxID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgYXJndW1lbnRbMV06IGNhbm5vdCBiZSBudWxsLicpO1xuICAgICAgfVxuICAgICAgaWYgKGFyZzEgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnZmV0Y2hlc1xcJyBjYW5ub3QgYmUgYSBUZW5zb3InKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnMSkpIHtcbiAgICAgICAgaWYgKGFyZzEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnZmV0Y2hlc1xcJyBjYW5ub3QgYmUgYW4gZW1wdHkgYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaXNGZXRjaGVzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgLy8gb3V0cHV0IG5hbWVzXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBhcmcxKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnZmV0Y2hlc1xcJyBtdXN0IGJlIGEgc3RyaW5nIGFycmF5IG9yIGFuIG9iamVjdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMub3V0cHV0TmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAnZmV0Y2hlcycgY29udGFpbnMgaW52YWxpZCBvdXRwdXQgbmFtZTogJHtuYW1lfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdvYmplY3QnICYmIGFyZzIgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdvcHRpb25zXFwnIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWNpZGUgd2hldGhlciBhcmcxIGlzIGZldGNoZXMgb3Igb3B0aW9uc1xuICAgICAgICAvLyBpZiBhbnkgb3V0cHV0IG5hbWUgaXMgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIHZhbGlkIE9ubnhWYWx1ZSwgd2UgY29uc2lkZXIgaXQgZmV0Y2hlc1xuICAgICAgICBsZXQgaXNGZXRjaGVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFyZzFLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJnMSk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLm91dHB1dE5hbWVzKSB7XG4gICAgICAgICAgaWYgKGFyZzFLZXlzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKGFyZzEgYXMgSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5OdWxsYWJsZU9ubnhWYWx1ZU1hcFR5cGUpW25hbWVdO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICAgICAgICBpc0ZldGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBpc0ZldGNoZXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICBmZXRjaGVzW25hbWVdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGZXRjaGVzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmcyID09PSAnb2JqZWN0JyAmJiBhcmcyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucyA9IGFyZzEgYXMgUnVuT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBtdXN0IGJlIFxcJ2ZldGNoZXNcXCcgb3IgXFwnb3B0aW9uc1xcJy4nKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgaW5wdXRzIGFyZSBpbiBmZWVkXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuaW5wdXROYW1lcykge1xuICAgICAgaWYgKHR5cGVvZiBmZWVkc1tuYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCAnJHtuYW1lfScgaXMgbWlzc2luZyBpbiAnZmVlZHMnLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIG5vIGZldGNoZXMgaXMgc3BlY2lmaWVkLCB3ZSB1c2UgdGhlIGZ1bGwgb3V0cHV0IG5hbWVzIGxpc3RcbiAgICBpZiAoaXNGZXRjaGVzRW1wdHkpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLm91dHB1dE5hbWVzKSB7XG4gICAgICAgIGZldGNoZXNbbmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZlZWRzLCBmZXRjaGVzIGFuZCBvcHRpb25zIGFyZSBwcmVwYXJlZFxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuaGFuZGxlci5ydW4oZmVlZHMsIGZldGNoZXMsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJldHVyblZhbHVlOiB7W25hbWU6IHN0cmluZ106IE9ubnhWYWx1ZX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByZXN1bHRzKSB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0cywga2V5KSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2tleV07XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVyblZhbHVlW2tleV0gPSBuZXcgVGVuc29yKHJlc3VsdC50eXBlLCByZXN1bHQuZGF0YSwgcmVzdWx0LmRpbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUocGF0aDogc3RyaW5nLCBvcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+O1xuICBzdGF0aWMgY3JlYXRlKGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlLCBvcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+O1xuICBzdGF0aWMgY3JlYXRlKGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlLCBieXRlT2Zmc2V0OiBudW1iZXIsIGJ5dGVMZW5ndGg/OiBudW1iZXIsIG9wdGlvbnM/OiBTZXNzaW9uT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+O1xuICBzdGF0aWMgY3JlYXRlKGJ1ZmZlcjogVWludDhBcnJheSwgb3B0aW9ucz86IFNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlPjtcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShcbiAgICAgIGFyZzA6IHN0cmluZ3xBcnJheUJ1ZmZlckxpa2V8VWludDhBcnJheSwgYXJnMT86IFNlc3Npb25PcHRpb25zfG51bWJlciwgYXJnMj86IG51bWJlcixcbiAgICAgIGFyZzM/OiBTZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZT4ge1xuICAgIFRSQUNFX0ZVTkNfQkVHSU4oKTtcbiAgICAvLyBlaXRoZXIgbG9hZCBmcm9tIGEgZmlsZSBvciBidWZmZXJcbiAgICBsZXQgZmlsZVBhdGhPclVpbnQ4QXJyYXk6IHN0cmluZ3xVaW50OEFycmF5O1xuICAgIGxldCBvcHRpb25zOiBTZXNzaW9uT3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsZVBhdGhPclVpbnQ4QXJyYXkgPSBhcmcwO1xuICAgICAgaWYgKHR5cGVvZiBhcmcxID09PSAnb2JqZWN0JyAmJiBhcmcxICE9PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmcxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZzAgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBmaWxlUGF0aE9yVWludDhBcnJheSA9IGFyZzA7XG4gICAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnICYmIGFyZzEgIT09IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZzE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdvcHRpb25zXFwnIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGFyZzAgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICAgICAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBhcmcwIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBhcmcwO1xuICAgICAgbGV0IGJ5dGVPZmZzZXQgPSAwO1xuICAgICAgbGV0IGJ5dGVMZW5ndGggPSBhcmcwLmJ5dGVMZW5ndGg7XG4gICAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnICYmIGFyZzEgIT09IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZzE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxID09PSAnbnVtYmVyJykge1xuICAgICAgICBieXRlT2Zmc2V0ID0gYXJnMTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihieXRlT2Zmc2V0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdieXRlT2Zmc2V0XFwnIG11c3QgYmUgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCA+PSBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAnYnl0ZU9mZnNldCcgaXMgb3V0IG9mIHJhbmdlIFswLCAke2J1ZmZlci5ieXRlTGVuZ3RofSkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZUxlbmd0aCA9IGFyZzAuYnl0ZUxlbmd0aCAtIGJ5dGVPZmZzZXQ7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gYXJnMjtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGJ5dGVMZW5ndGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnYnl0ZUxlbmd0aFxcJyBtdXN0IGJlIGFuIGludGVnZXIuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDw9IDAgfHwgYnl0ZU9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCdieXRlTGVuZ3RoJyBpcyBvdXQgb2YgcmFuZ2UgKDAsICR7YnVmZmVyLmJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0fV0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgYXJnMyA9PT0gJ29iamVjdCcgJiYgYXJnMyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGFyZzM7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2J5dGVMZW5ndGhcXCcgbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICAgIGZpbGVQYXRoT3JVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCBhcmd1bWVudFswXTogbXVzdCBiZSBcXCdwYXRoXFwnIG9yIFxcJ2J1ZmZlclxcJy4nKTtcbiAgICB9XG5cbiAgICAvLyByZXNvbHZlIGJhY2tlbmQsIHVwZGF0ZSBzZXNzaW9uIG9wdGlvbnMgd2l0aCB2YWxpZGF0ZWQgRVBzLCBhbmQgY3JlYXRlIHNlc3Npb24gaGFuZGxlclxuICAgIGNvbnN0IFtiYWNrZW5kLCBvcHRpb25zV2l0aFZhbGlkYXRlZEVQc10gPSBhd2FpdCByZXNvbHZlQmFja2VuZEFuZEV4ZWN1dGlvblByb3ZpZGVycyhvcHRpb25zKTtcbiAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgYmFja2VuZC5jcmVhdGVJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcihmaWxlUGF0aE9yVWludDhBcnJheSwgb3B0aW9uc1dpdGhWYWxpZGF0ZWRFUHMpO1xuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gICAgcmV0dXJuIG5ldyBJbmZlcmVuY2VTZXNzaW9uKGhhbmRsZXIpO1xuICB9XG5cbiAgc3RhcnRQcm9maWxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVyLnN0YXJ0UHJvZmlsaW5nKCk7XG4gIH1cbiAgZW5kUHJvZmlsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlci5lbmRQcm9maWxpbmcoKTtcbiAgfVxuXG4gIGdldCBpbnB1dE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmlucHV0TmFtZXM7XG4gIH1cbiAgZ2V0IG91dHB1dE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm91dHB1dE5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyOiBJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcjtcbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uIGFzIEluZmVyZW5jZVNlc3Npb25JbXBsfSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLWltcGwuanMnO1xuaW1wb3J0IHtPbm54TW9kZWxPcHRpb25zfSBmcm9tICcuL29ubngtbW9kZWwuanMnO1xuaW1wb3J0IHtPbm54VmFsdWUsIE9ubnhWYWx1ZURhdGFMb2NhdGlvbn0gZnJvbSAnLi9vbm54LXZhbHVlLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZGVjbGFyZSAqL1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgSW5mZXJlbmNlU2Vzc2lvbiB7XG4gIC8vICNyZWdpb24gaW5wdXQvb3V0cHV0IHR5cGVzXG5cbiAgdHlwZSBPbm54VmFsdWVNYXBUeXBlID0ge3JlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9O1xuICB0eXBlIE51bGxhYmxlT25ueFZhbHVlTWFwVHlwZSA9IHtyZWFkb25seSBbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlIHwgbnVsbH07XG5cbiAgLyoqXG4gICAqIEEgZmVlZHMgKG1vZGVsIGlucHV0cykgaXMgYW4gb2JqZWN0IHRoYXQgdXNlcyBpbnB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqL1xuICB0eXBlIEZlZWRzVHlwZSA9IE9ubnhWYWx1ZU1hcFR5cGU7XG5cbiAgLyoqXG4gICAqIEEgZmV0Y2hlcyAobW9kZWwgb3V0cHV0cykgY291bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAqXG4gICAqIC0gT21pdHRlZC4gVXNlIG1vZGVsJ3Mgb3V0cHV0IG5hbWVzIGRlZmluaXRpb24uXG4gICAqIC0gQW4gYXJyYXkgb2Ygc3RyaW5nIGluZGljYXRpbmcgdGhlIG91dHB1dCBuYW1lcy5cbiAgICogLSBBbiBvYmplY3QgdGhhdCB1c2Ugb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBvciBudWxsIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKlxuICAgKiBAcmVtYXJrXG4gICAqIGRpZmZlcmVudCBmcm9tIGlucHV0IGFyZ3VtZW50LCBpbiBvdXRwdXQsIE9ubnhWYWx1ZSBpcyBvcHRpb25hbC4gSWYgYW4gT25ueFZhbHVlIGlzIHByZXNlbnQgaXQgd2lsbCBiZVxuICAgKiB1c2VkIGFzIGEgcHJlLWFsbG9jYXRlZCB2YWx1ZSBieSB0aGUgaW5mZXJlbmNlIGVuZ2luZTsgaWYgb21pdHRlZCwgaW5mZXJlbmNlIGVuZ2luZSB3aWxsIGFsbG9jYXRlIGJ1ZmZlclxuICAgKiBpbnRlcm5hbGx5LlxuICAgKi9cbiAgdHlwZSBGZXRjaGVzVHlwZSA9IHJlYWRvbmx5IHN0cmluZ1tdfE51bGxhYmxlT25ueFZhbHVlTWFwVHlwZTtcblxuICAvKipcbiAgICogQSBpbmZlcmVuY2luZyByZXR1cm4gdHlwZSBpcyBhbiBvYmplY3QgdGhhdCB1c2VzIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqL1xuICB0eXBlIFJldHVyblR5cGUgPSBPbm54VmFsdWVNYXBUeXBlO1xuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHNlc3Npb24gb3B0aW9uc1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBjb25maWd1cmF0aW9ucyBmb3Igc2Vzc2lvbiBiZWhhdmlvci5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk9wdGlvbnMgZXh0ZW5kcyBPbm54TW9kZWxPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBleGVjdXRpb24gcHJvdmlkZXIgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEFuIGV4ZWN1dGlvbiBwcm92aWRlciBvcHRpb24gY2FuIGJlIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGlvbiBwcm92aWRlcixcbiAgICAgKiBvciBhbiBvYmplY3Qgb2YgY29ycmVzcG9uZGluZyB0eXBlLlxuICAgICAqL1xuICAgIGV4ZWN1dGlvblByb3ZpZGVycz86IHJlYWRvbmx5IEV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW50cmEgT1AgdGhyZWFkcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKS5cbiAgICAgKi9cbiAgICBpbnRyYU9wTnVtVGhyZWFkcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnRlciBPUCB0aHJlYWRzIG51bWJlci5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpLlxuICAgICAqL1xuICAgIGludGVyT3BOdW1UaHJlYWRzPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGZyZWVEaW1lbnNpb25PdmVycmlkZXM/OiB7cmVhZG9ubHkgW2RpbWVuc2lvbk5hbWU6IHN0cmluZ106IG51bWJlcn07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW1pemF0aW9uIGxldmVsLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGdyYXBoT3B0aW1pemF0aW9uTGV2ZWw/OiAnZGlzYWJsZWQnfCdiYXNpYyd8J2V4dGVuZGVkJ3wnYWxsJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIENQVSBtZW1vcnkgYXJlbmEuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgZW5hYmxlQ3B1TWVtQXJlbmE/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgbWVtb3J5IHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgZW5hYmxlTWVtUGF0dGVybj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRpb24gbW9kZS5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBleGVjdXRpb25Nb2RlPzogJ3NlcXVlbnRpYWwnfCdwYXJhbGxlbCc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgbW9kZWwgZmlsZSBwYXRoLlxuICAgICAqXG4gICAgICogSWYgdGhpcyBzZXR0aW5nIGlzIHNwZWNpZmllZCwgdGhlIG9wdGltaXplZCBtb2RlbCB3aWxsIGJlIGR1bXBlZC4gSW4gYnJvd3NlciwgYSBibG9iIHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIHdpdGggYSBwb3AtdXAgd2luZG93LlxuICAgICAqL1xuICAgIG9wdGltaXplZE1vZGVsRmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBwcm9maWxpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBmdXR1cmUgdXNlLlxuICAgICAqL1xuICAgIGVuYWJsZVByb2ZpbGluZz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBGaWxlIHByZWZpeCBmb3IgcHJvZmlsaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgZnV0dXJlIHVzZS5cbiAgICAgKi9cbiAgICBwcm9maWxlRmlsZVByZWZpeD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExvZyBJRC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBsb2dJZD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExvZyBzZXZlcml0eSBsZXZlbC4gU2VlXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9vbm54cnVudGltZS9ibG9iL21haW4vaW5jbHVkZS9vbm54cnVudGltZS9jb3JlL2NvbW1vbi9sb2dnaW5nL3NldmVyaXR5LmhcbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBsb2dTZXZlcml0eUxldmVsPzogMHwxfDJ8M3w0O1xuXG4gICAgLyoqXG4gICAgICogTG9nIHZlcmJvc2l0eSBsZXZlbC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBXZWJBc3NlbWJseSBiYWNrZW5kLiBXaWxsIHN1cHBvcnQgTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUgbGF0ZXJcbiAgICAgKi9cbiAgICBsb2dWZXJib3NpdHlMZXZlbD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgc3RyaW5nIGFzIGEgcHJlZmVycmVkIGRhdGEgbG9jYXRpb24gZm9yIGFsbCBvdXRwdXRzLCBvciBhbiBvYmplY3QgdGhhdCB1c2Ugb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIGFcbiAgICAgKiBwcmVmZXJyZWQgZGF0YSBsb2NhdGlvbiBhcyBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSBXZWIgZm9yIFdlYkdMIGFuZCBXZWJHUFUgRVAuXG4gICAgICovXG4gICAgcHJlZmVycmVkT3V0cHV0TG9jYXRpb24/OiBPbm54VmFsdWVEYXRhTG9jYXRpb258e3JlYWRvbmx5IFtvdXRwdXROYW1lOiBzdHJpbmddOiBPbm54VmFsdWVEYXRhTG9jYXRpb259O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgZ3JhcGggY2FwdHVyZS5cbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgV2ViIGZvciBXZWJHUFUgRVAuXG4gICAgICovXG4gICAgZW5hYmxlR3JhcGhDYXB0dXJlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGNvbmZpZ3VyYXRpb25zIGZvciBhIHNlc3Npb24uIFNlZVxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvb25ueHJ1bnRpbWUvYmxvYi9tYWluL2luY2x1ZGUvb25ueHJ1bnRpbWUvY29yZS9zZXNzaW9uL1xuICAgICAqIG9ubnhydW50aW1lX3Nlc3Npb25fb3B0aW9uc19jb25maWdfa2V5cy5oXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gV2ViQXNzZW1ibHkgYmFja2VuZC4gV2lsbCBzdXBwb3J0IE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlIGxhdGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogZXh0cmE6IHtcbiAgICAgKiAgIHNlc3Npb246IHtcbiAgICAgKiAgICAgc2V0X2Rlbm9ybWFsX2FzX3plcm86IFwiMVwiLFxuICAgICAqICAgICBkaXNhYmxlX3ByZXBhY2tpbmc6IFwiMVwiXG4gICAgICogICB9LFxuICAgICAqICAgb3B0aW1pemF0aW9uOiB7XG4gICAgICogICAgIGVuYWJsZV9nZWx1X2FwcHJveGltYXRpb246IFwiMVwiXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4dHJhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICAvLyAjcmVnaW9uIGV4ZWN1dGlvbiBwcm92aWRlcnNcblxuICAvLyBDdXJyZW50bHksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBiYWNrZW5kcyB0byBzdXBwb3J0IGV4ZWN1dGlvbiBwcm92aWRlcnM6XG4gIC8vIEJhY2tlbmQgTm9kZS5qcyBiaW5kaW5nOiBzdXBwb3J0cyAnY3B1JywgJ2RtbCcgKHdpbjMyKSwgJ2NvcmVtbCcgKG1hY09TKSBhbmQgJ2N1ZGEnIChsaW51eCkuXG4gIC8vIEJhY2tlbmQgV2ViQXNzZW1ibHk6IHN1cHBvcnRzICdjcHUnLCAnd2FzbScsICd3ZWJncHUnIGFuZCAnd2Vibm4nLlxuICAvLyBCYWNrZW5kIE9OTlguanM6IHN1cHBvcnRzICd3ZWJnbCcuXG4gIC8vIEJhY2tlbmQgUmVhY3QgTmF0aXZlOiBzdXBwb3J0cyAnY3B1JywgJ3hubnBhY2snLCAnY29yZW1sJyAoaU9TKSwgJ25uYXBpJyAoQW5kcm9pZCkuXG4gIGludGVyZmFjZSBFeGVjdXRpb25Qcm92aWRlck9wdGlvbk1hcCB7XG4gICAgY29yZW1sOiBDb3JlTUxFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICBjcHU6IENwdUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIGN1ZGE6IEN1ZGFFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICBkbWw6IERtbEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIG5uYXBpOiBObmFwaUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIHRlbnNvcnJ0OiBUZW5zb3JSdEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIHdhc206IFdlYkFzc2VtYmx5RXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgd2ViZ2w6IFdlYkdMRXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgd2ViZ3B1OiBXZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICB3ZWJubjogV2ViTk5FeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICB4bm5wYWNrOiBYbm5wYWNrRXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gIH1cblxuICB0eXBlIEV4ZWN1dGlvblByb3ZpZGVyTmFtZSA9IGtleW9mIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uTWFwO1xuICB0eXBlIEV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnID1cbiAgICAgIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uTWFwW0V4ZWN1dGlvblByb3ZpZGVyTmFtZV18RXhlY3V0aW9uUHJvdmlkZXJPcHRpb258RXhlY3V0aW9uUHJvdmlkZXJOYW1lfHN0cmluZztcblxuICBleHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBDcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnY3B1JztcbiAgICB1c2VBcmVuYT86IGJvb2xlYW47XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBDdWRhRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ2N1ZGEnO1xuICAgIGRldmljZUlkPzogbnVtYmVyO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgRG1sRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ2RtbCc7XG4gICAgZGV2aWNlSWQ/OiBudW1iZXI7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBUZW5zb3JSdEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICd0ZW5zb3JydCc7XG4gICAgZGV2aWNlSWQ/OiBudW1iZXI7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJBc3NlbWJseUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICd3YXNtJztcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdMRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ3dlYmdsJztcbiAgICAvLyBUT0RPOiBhZGQgZmxhZ3NcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFhubnBhY2tFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAneG5ucGFjayc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnd2ViZ3B1JztcbiAgICBwcmVmZXJyZWRMYXlvdXQ/OiAnTkNIVyd8J05IV0MnO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgV2ViTk5FeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnd2Vibm4nO1xuICAgIGRldmljZVR5cGU/OiAnY3B1J3wnZ3B1J3wnbnB1JztcbiAgICBudW1UaHJlYWRzPzogbnVtYmVyO1xuICAgIHBvd2VyUHJlZmVyZW5jZT86ICdkZWZhdWx0J3wnbG93LXBvd2VyJ3wnaGlnaC1wZXJmb3JtYW5jZSc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBDb3JlTUxFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnY29yZW1sJztcbiAgICAvKipcbiAgICAgKiBUaGUgYml0IGZsYWdzIGZvciBDb3JlTUwgZXhlY3V0aW9uIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogQ09SRU1MX0ZMQUdfVVNFX0NQVV9PTkxZID0gMHgwMDFcbiAgICAgKiBDT1JFTUxfRkxBR19FTkFCTEVfT05fU1VCR1JBUEggPSAweDAwMlxuICAgICAqIENPUkVNTF9GTEFHX09OTFlfRU5BQkxFX0RFVklDRV9XSVRIX0FORSA9IDB4MDA0XG4gICAgICogQ09SRU1MX0ZMQUdfT05MWV9BTExPV19TVEFUSUNfSU5QVVRfU0hBUEVTID0gMHgwMDhcbiAgICAgKiBDT1JFTUxfRkxBR19DUkVBVEVfTUxQUk9HUkFNID0gMHgwMTBcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFNlZSBpbmNsdWRlL29ubnhydW50aW1lL2NvcmUvcHJvdmlkZXJzL2NvcmVtbC9jb3JlbWxfcHJvdmlkZXJfZmFjdG9yeS5oIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBUaGlzIGZsYWcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZykuXG4gICAgICovXG4gICAgY29yZU1sRmxhZ3M/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGV0aGVyIHRvIHVzZSBDUFUgb25seSBpbiBDb3JlTUwgRVAuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgdXNlQ1BVT25seT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGV0aGVyIHRvIGVuYWJsZSBDb3JlTUwgRVAgb24gc3ViZ3JhcGguXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgZW5hYmxlT25TdWJncmFwaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGV0aGVyIHRvIG9ubHkgZW5hYmxlIENvcmVNTCBFUCBmb3IgQXBwbGUgZGV2aWNlcyB3aXRoIEFORSAoQXBwbGUgTmV1cmFsIEVuZ2luZSkuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgb25seUVuYWJsZURldmljZVdpdGhBTkU/OiBib29sZWFuO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgTm5hcGlFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnbm5hcGknO1xuICAgIHVzZUZQMTY/OiBib29sZWFuO1xuICAgIHVzZU5DSFc/OiBib29sZWFuO1xuICAgIGNwdURpc2FibGVkPzogYm9vbGVhbjtcbiAgICBjcHVPbmx5PzogYm9vbGVhbjtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcnVuIG9wdGlvbnNcblxuICAvKipcbiAgICogQSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZm9yIGluZmVyZW5jZSBydW4gYmVoYXZpb3JcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgUnVuT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogTG9nIHNldmVyaXR5IGxldmVsLiBTZWVcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L29ubnhydW50aW1lL2Jsb2IvbWFpbi9pbmNsdWRlL29ubnhydW50aW1lL2NvcmUvY29tbW9uL2xvZ2dpbmcvc2V2ZXJpdHkuaFxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGxvZ1NldmVyaXR5TGV2ZWw/OiAwfDF8MnwzfDQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2cgdmVyYm9zaXR5IGxldmVsLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIFdlYkFzc2VtYmx5IGJhY2tlbmQuIFdpbGwgc3VwcG9ydCBOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSBsYXRlclxuICAgICAqL1xuICAgIGxvZ1ZlcmJvc2l0eUxldmVsPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGVybWluYXRlIGFsbCBpbmNvbXBsZXRlIE9ydFJ1biBjYWxscyBhcyBzb29uIGFzIHBvc3NpYmxlIGlmIHRydWVcbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBXZWJBc3NlbWJseSBiYWNrZW5kLiBXaWxsIHN1cHBvcnQgTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUgbGF0ZXJcbiAgICAgKi9cbiAgICB0ZXJtaW5hdGU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSB0YWcgZm9yIHRoZSBSdW4oKSBjYWxscyB1c2luZyB0aGlzXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgdGFnPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGEgc2luZ2xlIHJ1biBjb25maWd1cmF0aW9uIGVudHJ5LiBTZWVcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L29ubnhydW50aW1lL2Jsb2IvbWFpbi9pbmNsdWRlL29ubnhydW50aW1lL2NvcmUvc2Vzc2lvbi9cbiAgICAgKiBvbm54cnVudGltZV9ydW5fb3B0aW9uc19jb25maWdfa2V5cy5oXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gV2ViQXNzZW1ibHkgYmFja2VuZC4gV2lsbCBzdXBwb3J0IE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlIGxhdGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBleHRyYToge1xuICAgICAqICAgbWVtb3J5OiB7XG4gICAgICogICAgIGVuYWJsZV9tZW1vcnlfYXJlbmFfc2hyaW5rYWdlOiBcIjFcIixcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZXh0cmE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHZhbHVlIG1ldGFkYXRhXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbiAgaW50ZXJmYWNlIFZhbHVlTWV0YWRhdGEge1xuICAgIC8vIFRCRFxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIHJ1bnRpbWUgaW5zdGFuY2Ugb2YgYW4gT05OWCBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmZlcmVuY2VTZXNzaW9uIHtcbiAgLy8gI3JlZ2lvbiBydW4oKVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBtb2RlbCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBnaXZlbiBmZWVkcyBhbmQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGZlZWRzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIGlucHV0LiBTZWUgdHlwZSBkZXNjcmlwdGlvbiBvZiBgSW5mZXJlbmNlU2Vzc2lvbi5JbnB1dFR5cGVgIGZvciBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgaW5mZXJlbmNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgcnVuKGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgbW9kZWwgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgZ2l2ZW4gZmVlZHMsIGZldGNoZXMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC4gU2VlIHR5cGUgZGVzY3JpcHRpb24gb2YgYEluZmVyZW5jZVNlc3Npb24uSW5wdXRUeXBlYCBmb3IgZGV0YWlsLlxuICAgKiBAcGFyYW0gZmV0Y2hlcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvdXRwdXQuIFNlZSB0eXBlIGRlc2NyaXB0aW9uIG9mIGBJbmZlcmVuY2VTZXNzaW9uLk91dHB1dFR5cGVgIGZvclxuICAgKiBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgaW5mZXJlbmNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgcnVuKGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgZmV0Y2hlczogSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZSxcbiAgICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcmVsZWFzZSgpXG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIGluZmVyZW5jZSBzZXNzaW9uIGFuZCB0aGUgdW5kZXJseWluZyByZXNvdXJjZXMuXG4gICAqL1xuICByZWxlYXNlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcHJvZmlsaW5nXG5cbiAgLyoqXG4gICAqIFN0YXJ0IHByb2ZpbGluZy5cbiAgICovXG4gIHN0YXJ0UHJvZmlsaW5nKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEVuZCBwcm9maWxpbmcuXG4gICAqL1xuICBlbmRQcm9maWxpbmcoKTogdm9pZDtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBtZXRhZGF0YVxuXG4gIC8qKlxuICAgKiBHZXQgaW5wdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCBtb2RlbC5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZXQgb3V0cHV0IG5hbWVzIG9mIHRoZSBsb2FkZWQgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLy8gLyoqXG4gIC8vICAqIEdldCBpbnB1dCBtZXRhZGF0YSBvZiB0aGUgbG9hZGVkIG1vZGVsLlxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgaW5wdXRNZXRhZGF0YTogUmVhZG9ubHlBcnJheTxSZWFkb25seTxJbmZlcmVuY2VTZXNzaW9uLlZhbHVlTWV0YWRhdGE+PjtcblxuICAvLyAvKipcbiAgLy8gICogR2V0IG91dHB1dCBtZXRhZGF0YSBvZiB0aGUgbG9hZGVkIG1vZGVsLlxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgb3V0cHV0TWV0YWRhdGE6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8SW5mZXJlbmNlU2Vzc2lvbi5WYWx1ZU1ldGFkYXRhPj47XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZmVyZW5jZVNlc3Npb25GYWN0b3J5IHtcbiAgLy8gI3JlZ2lvbiBjcmVhdGUoKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24gYW5kIGxvYWQgbW9kZWwgYXN5bmNocm9ub3VzbHkgZnJvbSBhbiBPTk5YIG1vZGVsIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB1cmkgLSBUaGUgVVJJIG9yIGZpbGUgcGF0aCBvZiB0aGUgbW9kZWwgdG8gbG9hZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBJbmZlcmVuY2VTZXNzaW9uIG9iamVjdC5cbiAgICovXG4gIGNyZWF0ZSh1cmk6IHN0cmluZywgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24gYW5kIGxvYWQgbW9kZWwgYXN5bmNocm9ub3VzbHkgZnJvbSBhbiBhcnJheSBidWZlci5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIEFuIEFycmF5QnVmZmVyIHJlcHJlc2VudGF0aW9uIG9mIGFuIE9OTlggbW9kZWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uIGFuZCBsb2FkIG1vZGVsIGFzeW5jaHJvbm91c2x5IGZyb20gc2VnbWVudCBvZiBhbiBhcnJheSBidWZlci5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIEFuIEFycmF5QnVmZmVyIHJlcHJlc2VudGF0aW9uIG9mIGFuIE9OTlggbW9kZWwuXG4gICAqIEBwYXJhbSBieXRlT2Zmc2V0IC0gVGhlIGJlZ2lubmluZyBvZiB0aGUgc3BlY2lmaWVkIHBvcnRpb24gb2YgdGhlIGFycmF5IGJ1ZmZlci5cbiAgICogQHBhcmFtIGJ5dGVMZW5ndGggLSBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBhcnJheSBidWZmZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIGJ5dGVPZmZzZXQ6IG51bWJlciwgYnl0ZUxlbmd0aD86IG51bWJlciwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uIGFuZCBsb2FkIG1vZGVsIGFzeW5jaHJvbm91c2x5IGZyb20gYSBVaW50OEFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gQSBVaW50OEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGFuIE9OTlggbW9kZWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUoYnVmZmVyOiBVaW50OEFycmF5LCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbj47XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgSW5mZXJlbmNlU2Vzc2lvbjogSW5mZXJlbmNlU2Vzc2lvbkZhY3RvcnkgPSBJbmZlcmVuY2VTZXNzaW9uSW1wbDtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMsIE9wdGlvbnNUZW5zb3JMYXlvdXR9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvclRvRGF0YVVybE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zVGVuc29yTGF5b3V0LCBPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge31cblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JUb0ltYWdlRGF0YU9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zVGVuc29yTGF5b3V0LCBPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge31cblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzaW9uVXRpbHMge1xuICAvKipcbiAgICogY3JlYXRlcyBhIERhdGFVUkwgaW5zdGFuY2UgZnJvbSB0ZW5zb3JcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgRGF0YVVSTCBpbnN0YW5jZSBmcm9tIHRoZSB0ZW5zb3IuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYGZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogQHJldHVybnMgYSBEYXRhVVJMIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltYWdlIGNvbnZlcnRlZCBmcm9tIHRlbnNvciBkYXRhXG4gICAqL1xuICB0b0RhdGFVUkwob3B0aW9ucz86IFRlbnNvclRvRGF0YVVybE9wdGlvbnMpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYW4gSW1hZ2VEYXRhIGluc3RhbmNlIGZyb20gdGVuc29yXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyBhbiBJbWFnZURhdGEgaW5zdGFuY2UgZnJvbSB0aGUgdGVuc29yLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGRlZmF1bHQgc2V0dGluZ3Mgd2lsbCBiZSBhcHBsaWVkOlxuICAgKiAtIGBmb3JtYXRgOiBgJ1JHQidgXG4gICAqIC0gYHRlbnNvckxheW91dGA6IGAnTkNIVydgXG4gICAqIEByZXR1cm5zIGFuIEltYWdlRGF0YSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltYWdlIGNvbnZlcnRlZCBmcm9tIHRlbnNvciBkYXRhXG4gICAqL1xuICB0b0ltYWdlRGF0YShvcHRpb25zPzogVGVuc29yVG9JbWFnZURhdGFPcHRpb25zKTogSW1hZ2VEYXRhO1xufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvciwgVHlwZWRUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcblxuZXhwb3J0IHR5cGUgSW1hZ2VGb3JtYXQgPSAnUkdCJ3wnUkdCQSd8J0JHUid8J1JCRyc7XG5leHBvcnQgdHlwZSBJbWFnZVRlbnNvckxheW91dCA9ICdOSFdDJ3wnTkNIVyc7XG5cbi8vIHRoZSBmb2xsb3dpbmcgcmVnaW9uIGNvbnRhaW5zIHR5cGUgZGVmaW5pdGlvbnMgZm9yIGNvbnN0cnVjdGluZyB0ZW5zb3IgZnJvbSBhIHNwZWNpZmljIGxvY2F0aW9uLlxuXG4vLyAjcmVnaW9uIHR5cGVzIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIHNwZWNpZmljIGxvY2F0aW9uXG5cbi8qKlxuICogcmVwcmVzZW50IGNvbW1vbiBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgc3BlY2lmaWMgbG9jYXRpb24uXG4gKi9cbmludGVyZmFjZSBDb21tb25Db25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4gZXh0ZW5kcyBQaWNrPFRlbnNvciwgJ2RpbXMnPiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBkYXRhIHR5cGUgb2YgdGhlIHRlbnNvci5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFQ7XG59XG5cbi8qKlxuICogcmVwcmVzZW50IHRoZSBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgR1BVIHJlc291cmNlLlxuICovXG5pbnRlcmZhY2UgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VCBleHRlbmRzIFRlbnNvci5UeXBlPiB7XG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBkb3dubG9hZCBkYXRhIGZyb20gR1BVIHRvIENQVS5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgdGVuc29yIHRyZWF0IHRoZSBHUFUgZGF0YSBhcyBleHRlcm5hbCByZXNvdXJjZS5cbiAgICovXG4gIGRvd25sb2FkPygpOiBQcm9taXNlPFRlbnNvci5EYXRhVHlwZU1hcFtUXT47XG5cbiAgLyoqXG4gICAqIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdGVuc29yIGlzIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSB0ZW5zb3IgdHJlYXQgdGhlIEdQVSBkYXRhIGFzIGV4dGVybmFsIHJlc291cmNlLlxuICAgKi9cbiAgZGlzcG9zZT8oKTogdm9pZDtcbn1cblxuLyoqXG4gKiByZXByZXNlbnQgdGhlIHBhcmFtZXRlciBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBwaW5uZWQgQ1BVIGJ1ZmZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVyczxUIGV4dGVuZHMgVGVuc29yLkNwdVBpbm5lZERhdGFUeXBlcyA9IFRlbnNvci5DcHVQaW5uZWREYXRhVHlwZXM+IGV4dGVuZHNcbiAgICBDb21tb25Db25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4ge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgJ2NwdS1waW5uZWQnLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246ICdjcHUtcGlubmVkJztcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIENQVSBwaW5uZWQgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIHRlbnNvciBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogVGVuc29yLkRhdGFUeXBlTWFwW1RdO1xufVxuXG4vKipcbiAqIHJlcHJlc2VudCB0aGUgcGFyYW1ldGVyIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIFdlYkdMIHRleHR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0dXJlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQgZXh0ZW5kcyBUZW5zb3IuVGV4dHVyZURhdGFUeXBlcyA9IFRlbnNvci5UZXh0dXJlRGF0YVR5cGVzPiBleHRlbmRzXG4gICAgQ29tbW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+LCBHcHVSZXNvdXJjZUNvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YSB0byBiZSAndGV4dHVyZScuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogJ3RleHR1cmUnO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgV2ViR0wgdGV4dHVyZSB0aGF0IGhvbGRzIHRoZSB0ZW5zb3IgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IHRleHR1cmU6IFRlbnNvci5UZXh0dXJlVHlwZTtcbn1cblxuLyoqXG4gKiByZXByZXNlbnQgdGhlIHBhcmFtZXRlciBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBXZWJHUFUgYnVmZmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3B1QnVmZmVyQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQgZXh0ZW5kcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzID0gVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcz4gZXh0ZW5kc1xuICAgIENvbW1vbkNvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiwgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4ge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgJ2dwdS1idWZmZXInLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246ICdncHUtYnVmZmVyJztcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIFdlYkdQVSBidWZmZXIgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBncHVCdWZmZXI6IFRlbnNvci5HcHVCdWZmZXJUeXBlO1xufVxuXG4vLyAjZW5kcmVnaW9uXG5cbi8vIHRoZSBmb2xsb3dpbmcgcmVnaW9uIGNvbnRhaW5zIHR5cGUgZGVmaW5pdGlvbnMgb2YgZWFjaCBpbmRpdmlkdWFsIG9wdGlvbnMuXG4vLyB0aGUgdGVuc29yIGZhY3RvcnkgZnVuY3Rpb25zIHVzZSBhIGNvbXBvc2l0aW9uIG9mIHRob3NlIG9wdGlvbnMgYXMgdGhlIHBhcmFtZXRlciB0eXBlLlxuXG4vLyAjcmVnaW9uIE9wdGlvbnMgZmllbGRzXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0Zvcm1hdCB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGltYWdlIGZvcm1hdCByZXByZXNlbnRlZCBpbiBSR0JBIGNvbG9yIHNwYWNlLlxuICAgKi9cbiAgZm9ybWF0PzogSW1hZ2VGb3JtYXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc1RlbnNvckZvcm1hdCB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgdGVuc29yLlxuICAgKlxuICAgKiBOT1RFOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIG9wdGlvbiAnZm9ybWF0Jy4gV2hpbGUgb3B0aW9uICdmb3JtYXQnIHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIGltYWdlLCAndGVuc29yRm9ybWF0J1xuICAgKiByZXByZXNlbnRzIHRoZSB0YXJnZXQgZm9ybWF0IG9mIHRoZSB0ZW5zb3IuIEEgdHJhbnNwb3NlIHdpbGwgYmUgcGVyZm9ybWVkIGlmIHRoZXkgYXJlIGRpZmZlcmVudC5cbiAgICovXG4gIHRlbnNvckZvcm1hdD86IEltYWdlRm9ybWF0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgZGF0YVR5cGU/OiAnZmxvYXQzMid8J3VpbnQ4Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zVGVuc29yTGF5b3V0IHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgdGVuc29yIGxheW91dCB3aGVuIHJlcHJlc2VudGluZyBkYXRhIG9mIG9uZSBvciBtb3JlIGltYWdlKHMpLlxuICAgKi9cbiAgdGVuc29yTGF5b3V0PzogSW1hZ2VUZW5zb3JMYXlvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0RpbWVuc2lvbnMge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBpbWFnZSBoZWlnaHQgaW4gcGl4ZWxcbiAgICovXG4gIGhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW1hZ2Ugd2lkdGggaW4gcGl4ZWxcbiAgICovXG4gIHdpZHRoPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvblJlc2l6ZWREaW1lbnNpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgcmVzaXplZCBoZWlnaHQuIElmIG9taXR0ZWQsIG9yaWdpbmFsIGhlaWdodCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZXNpemVkSGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogRGVzY3JpYmVzIHJlc2l6ZWQgd2lkdGggLSBjYW4gYmUgYWNjZXNzZWQgdmlhIHRlbnNvciBkaW1lbnNpb25zIGFzIHdlbGxcbiAgICovXG4gIHJlc2l6ZWRXaWR0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge1xuICAvKipcbiAgICogRGVzY3JpYmVzIG5vcm1hbGl6YXRpb24gcGFyYW1ldGVycyB3aGVuIHByZXByb2Nlc3NpbmcgdGhlIGltYWdlIGFzIG1vZGVsIGlucHV0LlxuICAgKlxuICAgKiBEYXRhIGVsZW1lbnQgYXJlIHJhbmdlZCBmcm9tIDAgdG8gMjU1LlxuICAgKi9cbiAgbm9ybT86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgJ2JpYXMnIHZhbHVlIGZvciBpbWFnZSBub3JtYWxpemF0aW9uLlxuICAgICAqIC0gSWYgb21pdHRlZCwgdXNlIGRlZmF1bHQgdmFsdWUgMC5cbiAgICAgKiAtIElmIGl0J3MgYSBzaW5nbGUgbnVtYmVyLCBhcHBseSB0byBlYWNoIGNoYW5uZWxcbiAgICAgKiAtIElmIGl0J3MgYW4gYXJyYXkgb2YgMyBvciA0IG51bWJlcnMsIGFwcGx5IGVsZW1lbnQtd2lzZS4gTnVtYmVyIG9mIGVsZW1lbnRzIG5lZWQgdG8gbWF0Y2ggdGhlIG51bWJlciBvZiBjaGFubmVsc1xuICAgICAqIGZvciB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBmb3JtYXRcbiAgICAgKi9cbiAgICBiaWFzPzogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICAvKipcbiAgICAgKiBUaGUgJ21lYW4nIHZhbHVlIGZvciBpbWFnZSBub3JtYWxpemF0aW9uLlxuICAgICAqIC0gSWYgb21pdHRlZCwgdXNlIGRlZmF1bHQgdmFsdWUgMjU1LlxuICAgICAqIC0gSWYgaXQncyBhIHNpbmdsZSBudW1iZXIsIGFwcGx5IHRvIGVhY2ggY2hhbm5lbFxuICAgICAqIC0gSWYgaXQncyBhbiBhcnJheSBvZiAzIG9yIDQgbnVtYmVycywgYXBwbHkgZWxlbWVudC13aXNlLiBOdW1iZXIgb2YgZWxlbWVudHMgbmVlZCB0byBtYXRjaCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzXG4gICAgICogZm9yIHRoZSBjb3JyZXNwb25kaW5nIGltYWdlIGZvcm1hdFxuICAgICAqL1xuICAgIG1lYW4/OiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgfTtcbn1cblxuLy8gI2VuZHJlZ2lvblxuXG4vLyAjcmVnaW9uIE9wdGlvbnMgY29tcG9zaXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9ucyBleHRlbmRzIE9wdGlvblJlc2l6ZWREaW1lbnNpb25zLCBPcHRpb25zVGVuc29yRm9ybWF0LCBPcHRpb25zVGVuc29yTGF5b3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25SZXNpemVkRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckZvcm1hdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zVGVuc29yTGF5b3V0LCBPcHRpb25zVGVuc29yRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbVVybE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zRGltZW5zaW9ucywgT3B0aW9uUmVzaXplZERpbWVuc2lvbnMsIE9wdGlvbnNUZW5zb3JGb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc1RlbnNvckRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNOb3JtYWxpemF0aW9uUGFyYW1ldGVycyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21JbWFnZUJpdG1hcE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25SZXNpemVkRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckZvcm1hdCwgT3B0aW9uc1RlbnNvckxheW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbVRleHR1cmVPcHRpb25zPFQgZXh0ZW5kcyBUZW5zb3IuVGV4dHVyZURhdGFUeXBlcz4gZXh0ZW5kc1xuICAgIFJlcXVpcmVkPE9wdGlvbnNEaW1lbnNpb25zPiwgT3B0aW9uc0Zvcm1hdCwgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4vKiBUT0RPOiBhZGQgbW9yZSAqLyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zPFQgZXh0ZW5kcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzPiBleHRlbmRzXG4gICAgUGljazxUZW5zb3IsICdkaW1zJz4sIEdwdVJlc291cmNlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSB0ZW5zb3IuXG4gICAqL1xuICBkYXRhVHlwZT86IFQ7XG59XG5cbi8vICNlbmRyZWdpb25cblxuLyoqXG4gKiB0eXBlIFRlbnNvckZhY3RvcnkgZGVmaW5lcyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMgb2YgJ1RlbnNvcicgdG8gY3JlYXRlIHRlbnNvciBpbnN0YW5jZXMgZnJvbSBleGlzdGluZyBkYXRhIG9yXG4gKiByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhbiBJbWFnZURhdGEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSBpbWFnZURhdGEgLSB0aGUgSW1hZ2VEYXRhIG9iamVjdCB0byBjcmVhdGUgdGVuc29yIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIEltYWdlRGF0YS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgdGVuc29yRm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiAtIGBkYXRhVHlwZWA6IGAnZmxvYXQzMidgXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbUltYWdlKGltYWdlRGF0YTogSW1hZ2VEYXRhLCBvcHRpb25zPzogVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxUeXBlZFRlbnNvcjwnZmxvYXQzMic+fFR5cGVkVGVuc29yPCd1aW50OCc+PjtcblxuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYSBIVE1MSW1hZ2VFbGVtZW50IG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gaW1hZ2VFbGVtZW50IC0gdGhlIEhUTUxJbWFnZUVsZW1lbnQgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gSFRNTEltYWdlRWxlbWVudC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgdGVuc29yRm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiAtIGBkYXRhVHlwZWA6IGAnZmxvYXQzMidgXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbUltYWdlKGltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCwgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zKTpcbiAgICAgIFByb21pc2U8VHlwZWRUZW5zb3I8J2Zsb2F0MzInPnxUeXBlZFRlbnNvcjwndWludDgnPj47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHRlbnNvciBmcm9tIFVSTFxuICAgKlxuICAgKiBAcGFyYW0gdXJsU291cmNlIC0gYSBzdHJpbmcgYXMgYSBVUkwgdG8gdGhlIGltYWdlIG9yIGEgZGF0YSBVUkwgY29udGFpbmluZyB0aGUgaW1hZ2UgZGF0YS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIFVSTC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgdGVuc29yRm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiAtIGBkYXRhVHlwZWA6IGAnZmxvYXQzMidgXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbUltYWdlKHVybFNvdXJjZTogc3RyaW5nLCBvcHRpb25zPzogVGVuc29yRnJvbVVybE9wdGlvbnMpOiBQcm9taXNlPFR5cGVkVGVuc29yPCdmbG9hdDMyJz58VHlwZWRUZW5zb3I8J3VpbnQ4Jz4+O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhbiBJbWFnZUJpdG1hcCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJpdG1hcCAtIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QgdG8gY3JlYXRlIHRlbnNvciBmcm9tXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyB0ZW5zb3IgZnJvbSBVUkwuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYHRlbnNvckZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogLSBgZGF0YVR5cGVgOiBgJ2Zsb2F0MzInYFxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21JbWFnZShiaXRtYXA6IEltYWdlQml0bWFwLCBvcHRpb25zOiBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zKTpcbiAgICAgIFByb21pc2U8VHlwZWRUZW5zb3I8J2Zsb2F0MzInPnxUeXBlZFRlbnNvcjwndWludDgnPj47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHRlbnNvciBmcm9tIGEgV2ViR0wgdGV4dHVyZVxuICAgKlxuICAgKiBAcGFyYW0gdGV4dHVyZSAtIHRoZSBXZWJHTFRleHR1cmUgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gV2ViR0wgdGV4dHVyZS5cbiAgICpcbiAgICogVGhlIG9wdGlvbnMgaW5jbHVkZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogLSBgd2lkdGhgOiB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUuIFJlcXVpcmVkLlxuICAgKiAtIGBoZWlnaHRgOiB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlLiBSZXF1aXJlZC5cbiAgICogLSBgZm9ybWF0YDogdGhlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gSWYgb21pdHRlZCwgYXNzdW1lICdSR0JBJy5cbiAgICogLSBgZG93bmxvYWRgOiBhbiBvcHRpb25hbCBmdW5jdGlvbiB0byBkb3dubG9hZCB0aGUgdGVuc29yIGRhdGEgZnJvbSBHUFUgdG8gQ1BVLiBJZiBvbWl0dGVkLCB0aGUgR1BVIGRhdGFcbiAgICogd2lsbCBub3QgYmUgYWJsZSB0byBkb3dubG9hZC4gVXN1YWxseSwgdGhpcyBpcyBwcm92aWRlZCBieSBhIEdQVSBiYWNrZW5kIGZvciB0aGUgaW5mZXJlbmNlIG91dHB1dHMuIFVzZXJzIGRvbid0XG4gICAqIG5lZWQgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uLlxuICAgKiAtIGBkaXNwb3NlYDogYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgdGVuc29yIGRhdGEgb24gR1BVLiBJZiBvbWl0dGVkLCB0aGUgR1BVIGRhdGEgd2lsbCBub3QgYmUgZGlzcG9zZWQuXG4gICAqIFVzdWFsbHksIHRoaXMgaXMgcHJvdmlkZWQgYnkgYSBHUFUgYmFja2VuZCBmb3IgdGhlIGluZmVyZW5jZSBvdXRwdXRzLiBVc2VycyBkb24ndCBuZWVkIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYSB0ZW5zb3Igb2JqZWN0XG4gICAqL1xuICBmcm9tVGV4dHVyZTxUIGV4dGVuZHMgVGVuc29yLlRleHR1cmVEYXRhVHlwZXMgPSAnZmxvYXQzMic+KFxuICAgICAgdGV4dHVyZTogVGVuc29yLlRleHR1cmVUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tVGV4dHVyZU9wdGlvbnM8VD4pOiBUeXBlZFRlbnNvcjwnZmxvYXQzMic+O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhIFdlYkdQVSBidWZmZXJcbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIHRoZSBHUFVCdWZmZXIgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gV2ViR1BVIGJ1ZmZlci5cbiAgICpcbiAgICogVGhlIG9wdGlvbnMgaW5jbHVkZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogLSBgZGF0YVR5cGVgOiB0aGUgZGF0YSB0eXBlIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGFzc3VtZSAnZmxvYXQzMicuXG4gICAqIC0gYGRpbXNgOiB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIFJlcXVpcmVkLlxuICAgKiAtIGBkb3dubG9hZGA6IGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGRvd25sb2FkIHRoZSB0ZW5zb3IgZGF0YSBmcm9tIEdQVSB0byBDUFUuIElmIG9taXR0ZWQsIHRoZSBHUFUgZGF0YVxuICAgKiB3aWxsIG5vdCBiZSBhYmxlIHRvIGRvd25sb2FkLiBVc3VhbGx5LCB0aGlzIGlzIHByb3ZpZGVkIGJ5IGEgR1BVIGJhY2tlbmQgZm9yIHRoZSBpbmZlcmVuY2Ugb3V0cHV0cy4gVXNlcnMgZG9uJ3RcbiAgICogbmVlZCB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb24uXG4gICAqIC0gYGRpc3Bvc2VgOiBhbiBvcHRpb25hbCBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSB0ZW5zb3IgZGF0YSBvbiBHUFUuIElmIG9taXR0ZWQsIHRoZSBHUFUgZGF0YSB3aWxsIG5vdCBiZSBkaXNwb3NlZC5cbiAgICogVXN1YWxseSwgdGhpcyBpcyBwcm92aWRlZCBieSBhIEdQVSBiYWNrZW5kIGZvciB0aGUgaW5mZXJlbmNlIG91dHB1dHMuIFVzZXJzIGRvbid0IG5lZWQgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21HcHVCdWZmZXI8VCBleHRlbmRzIFRlbnNvci5HcHVCdWZmZXJEYXRhVHlwZXM+KFxuICAgICAgYnVmZmVyOiBUZW5zb3IuR3B1QnVmZmVyVHlwZSwgb3B0aW9uczogVGVuc29yRnJvbUdwdUJ1ZmZlck9wdGlvbnM8VD4pOiBUeXBlZFRlbnNvcjxUPjtcblxuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIGJ1ZmZlciB3aWxsIGJlIHVzZWQgYXMgYSBwaW5uZWQgYnVmZmVyLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIHRoZSB0ZW5zb3IgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBUeXBlZEFycmF5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUuXG4gICAqIEBwYXJhbSBkaW1zIC0gc3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21QaW5uZWRCdWZmZXI8VCBleHRlbmRzIEV4Y2x1ZGU8VGVuc29yLlR5cGUsICdzdHJpbmcnPj4oXG4gICAgICB0eXBlOiBULCBidWZmZXI6IFRlbnNvci5EYXRhVHlwZU1hcFtUXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8VD47XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8qKlxuICogQSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgZmlsZSdzIFVSTCBvciBwYXRoLlxuICpcbiAqIFBhdGggaXMgdmFpbGFibGUgb25seSBpbiBvbm54cnVudGltZS1ub2RlIG9yIG9ubnhydW50aW1lLXdlYiBydW5uaW5nIGluIE5vZGUuanMuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVVcmxPclBhdGggPSBzdHJpbmc7XG5cbi8qKlxuICogQSBCbG9iIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBGaWxlQmxvYiA9IEJsb2I7XG5cbi8qKlxuICogQSBVaW50OEFycmF5LCBBcnJheUJ1ZmZlciBvciBTaGFyZWRBcnJheUJ1ZmZlciBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgZmlsZSBjb250ZW50LlxuICpcbiAqIFdoZW4gaXQgaXMgYW4gQXJyYXlCdWZmZXIgb3IgU2hhcmVkQXJyYXlCdWZmZXIsIHRoZSB3aG9sZSBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSB0aGUgZmlsZSBjb250ZW50LlxuICovXG5leHBvcnQgdHlwZSBGaWxlRGF0YSA9IFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJMaWtlO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIHRoYXQgY2FuIGJlIGxvYWRlZCBieSB0aGUgT05OWCBSdW50aW1lIEphdmFTY3JpcHQgQVBJLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IEZpbGVVcmxPclBhdGh8RmlsZUJsb2J8RmlsZURhdGE7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBleHRlcm5hbCBkYXRhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxEYXRhRmlsZURlc2NyaXB0aW9uIHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGV4dGVybmFsIGRhdGEgZmlsZS5cbiAgICovXG4gIGRhdGE6IEZpbGVUeXBlO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgZmlsZSBwYXRoLlxuICAgKi9cbiAgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgZGF0YSBmaWxlLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBzdHJpbmcsIGl0IHNob3VsZCBiZSBhIGZpbGUgVVJMIG9yIHBhdGggdGhhdCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG1vZGVsIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsRGF0YUZpbGVUeXBlID0gRXh0ZXJuYWxEYXRhRmlsZURlc2NyaXB0aW9ufEZpbGVVcmxPclBhdGg7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbW9kZWwgbG9hZGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbm54TW9kZWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwZWNpZnlpbmcgYSBsaXN0IG9mIGZpbGVzIHRoYXQgcmVwcmVzZW50cyB0aGUgZXh0ZXJuYWwgZGF0YS5cbiAgICovXG4gIGV4dGVybmFsRGF0YT86IHJlYWRvbmx5IEV4dGVybmFsRGF0YUZpbGVUeXBlW107XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbmV4cG9ydCB0eXBlIE5vblRlbnNvclR5cGUgPSBuZXZlcjtcblxuLyoqXG4gKiBUeXBlIE9ubnhWYWx1ZSBSZXByZXNlbnRzIGJvdGggdGVuc29ycyBhbmQgbm9uLXRlbnNvcnMgdmFsdWUgZm9yIG1vZGVsJ3MgaW5wdXRzL291dHB1dHMuXG4gKlxuICogTk9URTogY3VycmVudGx5IG5vdCBzdXBwb3J0IG5vbi10ZW5zb3JcbiAqL1xuZXhwb3J0IHR5cGUgT25ueFZhbHVlID0gVGVuc29yfE5vblRlbnNvclR5cGU7XG5cbi8qKlxuICogVHlwZSBPbm54VmFsdWVEYXRhTG9jYXRpb24gcmVwcmVzZW50cyB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgb2YgYW4gT25ueFZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBPbm54VmFsdWVEYXRhTG9jYXRpb24gPSBUZW5zb3IuRGF0YUxvY2F0aW9uO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge3Jlc29sdmVCYWNrZW5kQW5kRXhlY3V0aW9uUHJvdmlkZXJzfSBmcm9tICcuL2JhY2tlbmQtaW1wbC5qcyc7XG5pbXBvcnQge1Nlc3Npb25IYW5kbGVyLCBUcmFpbmluZ1Nlc3Npb25IYW5kbGVyfSBmcm9tICcuL2JhY2tlbmQuanMnO1xuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uIGFzIEluZmVyZW5jZVNlc3Npb259IGZyb20gJy4vaW5mZXJlbmNlLXNlc3Npb24uanMnO1xuaW1wb3J0IHtPbm54VmFsdWV9IGZyb20gJy4vb25ueC12YWx1ZS5qcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3IuanMnO1xuaW1wb3J0IHtUcmFpbmluZ1Nlc3Npb24gYXMgVHJhaW5pbmdTZXNzaW9uSW50ZXJmYWNlLCBUcmFpbmluZ1Nlc3Npb25DcmVhdGVPcHRpb25zfSBmcm9tICcuL3RyYWluaW5nLXNlc3Npb24uanMnO1xuXG50eXBlIFNlc3Npb25PcHRpb25zID0gSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucztcbnR5cGUgRmVlZHNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbi5GZWVkc1R5cGU7XG50eXBlIEZldGNoZXNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZTtcbnR5cGUgUmV0dXJuVHlwZSA9IEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZTtcbnR5cGUgUnVuT3B0aW9ucyA9IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucztcblxuY29uc3Qgbm9CYWNrZW5kRXJyTXNnOiBzdHJpbmcgPSAnVHJhaW5pbmcgYmFja2VuZCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuICcgK1xuICAgICdNYWtlIHN1cmUgeW91XFwncmUgdXNpbmcgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiAmIFdlYkFzc2VtYmx5IGZpbGVzLic7XG5cbmV4cG9ydCBjbGFzcyBUcmFpbmluZ1Nlc3Npb24gaW1wbGVtZW50cyBUcmFpbmluZ1Nlc3Npb25JbnRlcmZhY2Uge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGhhbmRsZXI6IFRyYWluaW5nU2Vzc2lvbkhhbmRsZXIsIGhhc09wdGltaXplck1vZGVsOiBib29sZWFuLCBoYXNFdmFsTW9kZWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuaGFzT3B0aW1pemVyTW9kZWwgPSBoYXNPcHRpbWl6ZXJNb2RlbDtcbiAgICB0aGlzLmhhc0V2YWxNb2RlbCA9IGhhc0V2YWxNb2RlbDtcbiAgfVxuICBwcml2YXRlIGhhbmRsZXI6IFRyYWluaW5nU2Vzc2lvbkhhbmRsZXI7XG4gIHByaXZhdGUgaGFzT3B0aW1pemVyTW9kZWw6IGJvb2xlYW47XG4gIHByaXZhdGUgaGFzRXZhbE1vZGVsOiBib29sZWFuO1xuXG4gIGdldCB0cmFpbmluZ0lucHV0TmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuaW5wdXROYW1lcztcbiAgfVxuICBnZXQgdHJhaW5pbmdPdXRwdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vdXRwdXROYW1lcztcbiAgfVxuXG4gIGdldCBldmFsSW5wdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuaGFzRXZhbE1vZGVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmV2YWxJbnB1dE5hbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdHJhaW5pbmcgc2Vzc2lvbiBoYXMgbm8gZXZhbE1vZGVsIGxvYWRlZC4nKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGV2YWxPdXRwdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuaGFzRXZhbE1vZGVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmV2YWxPdXRwdXROYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRyYWluaW5nIHNlc3Npb24gaGFzIG5vIGV2YWxNb2RlbCBsb2FkZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh0cmFpbmluZ09wdGlvbnM6IFRyYWluaW5nU2Vzc2lvbkNyZWF0ZU9wdGlvbnMsIHNlc3Npb25PcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxUcmFpbmluZ1Nlc3Npb24+IHtcbiAgICBjb25zdCBldmFsTW9kZWw6IHN0cmluZ3xVaW50OEFycmF5ID0gdHJhaW5pbmdPcHRpb25zLmV2YWxNb2RlbCB8fCAnJztcbiAgICBjb25zdCBvcHRpbWl6ZXJNb2RlbDogc3RyaW5nfFVpbnQ4QXJyYXkgPSB0cmFpbmluZ09wdGlvbnMub3B0aW1pemVyTW9kZWwgfHwgJyc7XG4gICAgY29uc3Qgb3B0aW9uczogU2Vzc2lvbk9wdGlvbnMgPSBzZXNzaW9uT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIHJlc29sdmUgYmFja2VuZCwgdXBkYXRlIHNlc3Npb24gb3B0aW9ucyB3aXRoIHZhbGlkYXRlZCBFUHMsIGFuZCBjcmVhdGUgc2Vzc2lvbiBoYW5kbGVyXG4gICAgY29uc3QgW2JhY2tlbmQsIG9wdGlvbnNXaXRoVmFsaWRhdGVkRVBzXSA9IGF3YWl0IHJlc29sdmVCYWNrZW5kQW5kRXhlY3V0aW9uUHJvdmlkZXJzKG9wdGlvbnMpO1xuICAgIGlmIChiYWNrZW5kLmNyZWF0ZVRyYWluaW5nU2Vzc2lvbkhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBiYWNrZW5kLmNyZWF0ZVRyYWluaW5nU2Vzc2lvbkhhbmRsZXIoXG4gICAgICAgICAgdHJhaW5pbmdPcHRpb25zLmNoZWNrcG9pbnRTdGF0ZSwgdHJhaW5pbmdPcHRpb25zLnRyYWluTW9kZWwsIGV2YWxNb2RlbCwgb3B0aW1pemVyTW9kZWwsXG4gICAgICAgICAgb3B0aW9uc1dpdGhWYWxpZGF0ZWRFUHMpO1xuICAgICAgcmV0dXJuIG5ldyBUcmFpbmluZ1Nlc3Npb24oaGFuZGxlciwgISF0cmFpbmluZ09wdGlvbnMub3B0aW1pemVyTW9kZWwsICEhdHJhaW5pbmdPcHRpb25zLmV2YWxNb2RlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihub0JhY2tlbmRFcnJNc2cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJ1blRyYWluU3RlcCBhbmQgZnV0dXJlIHJ1blN0ZXAgbWV0aG9kcyB0aGF0IGhhbmRsZXMgdGhlIHR5cGUtbmFycm93aW5nIGNvbnZlcnNpb24gZnJvbVxuICAgKiB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZSBhbmQgUnVuT3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0TmFtZXMgdGhlIGZlZWRzIG9iamVjdCBpcyBjaGVja2VkIHRoYXQgdGhleSBjb250YWluIGFsbCBpbnB1dCBuYW1lcyBpbiB0aGUgcHJvdmlkZWQgbGlzdCBvZiBpbnB1dFxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dE5hbWVzIHRoZSBmZXRjaGVzIG9iamVjdCBpcyBjaGVja2VkIHRoYXQgdGhlaXIga2V5cyBtYXRjaCB1cCB3aXRoIHZhbGlkIG5hbWVzIGluIHRoZSBsaXN0IG9mIG91dHB1dFxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIGZlZWRzIHRoZSByZXF1aXJlZCBpbnB1dFxuICAgKiBAcGFyYW0gYXJnMSBuYXJyb3dlZCAmIGNvbnZlcnRlZCBpbnRvIHRoZSBTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZSBvciBSdW5PcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0gYXJnMiBvcHRpb25hbCBSdW5PcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnNcbiAgICovXG4gIHR5cGVOYXJyb3dpbmdGb3JSdW5TdGVwKFxuICAgICAgaW5wdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW10sIG91dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXSwgZmVlZHM6IEZlZWRzVHlwZSwgYXJnMT86IEZldGNoZXNUeXBlfFJ1bk9wdGlvbnMsXG4gICAgICBhcmcyPzogUnVuT3B0aW9ucyk6IFtTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZSwgUnVuT3B0aW9uc10ge1xuICAgIGNvbnN0IGZldGNoZXM6IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfG51bGx9ID0ge307XG4gICAgbGV0IG9wdGlvbnM6IFJ1bk9wdGlvbnMgPSB7fTtcbiAgICAvLyBjaGVjayBpbnB1dHNcbiAgICBpZiAodHlwZW9mIGZlZWRzICE9PSAnb2JqZWN0JyB8fCBmZWVkcyA9PT0gbnVsbCB8fCBmZWVkcyBpbnN0YW5jZW9mIFRlbnNvciB8fCBBcnJheS5pc0FycmF5KGZlZWRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnXFwnZmVlZHNcXCcgbXVzdCBiZSBhbiBvYmplY3QgdGhhdCB1c2UgaW5wdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLicpO1xuICAgIH1cblxuICAgIGxldCBpc0ZldGNoZXNFbXB0eSA9IHRydWU7XG4gICAgLy8gZGV0ZXJtaW5lIHdoaWNoIG92ZXJyaWRlIGlzIGJlaW5nIHVzZWRcbiAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoYXJnMSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBjYW5ub3QgYmUgbnVsbC4nKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcxIGluc3RhbmNlb2YgVGVuc29yKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgY2Fubm90IGJlIGEgVGVuc29yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZzEpKSB7XG4gICAgICAgIGlmIChhcmcxLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgY2Fubm90IGJlIGFuIGVtcHR5IGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIGlzRmV0Y2hlc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgIC8vIG91dHB1dCBuYW1lc1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYXJnMSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgbXVzdCBiZSBhIHN0cmluZyBhcnJheSBvciBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdXRwdXROYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCdmZXRjaGVzJyBjb250YWlucyBpbnZhbGlkIG91dHB1dCBuYW1lOiAke25hbWV9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmZXRjaGVzW25hbWVdID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ29iamVjdCcgJiYgYXJnMiAhPT0gbnVsbCkge1xuICAgICAgICAgIG9wdGlvbnMgPSBhcmcyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2lkZSB3aGV0aGVyIGFyZzEgaXMgZmV0Y2hlcyBvciBvcHRpb25zXG4gICAgICAgIC8vIGlmIGFueSBvdXRwdXQgbmFtZSBpcyBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgdmFsaWQgT25ueFZhbHVlLCB3ZSBjb25zaWRlciBpdCBmZXRjaGVzXG4gICAgICAgIGxldCBpc0ZldGNoZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYXJnMUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcmcxKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG91dHB1dE5hbWVzKSB7XG4gICAgICAgICAgaWYgKGFyZzFLZXlzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKGFyZzEgYXMgSW5mZXJlbmNlU2Vzc2lvbi5OdWxsYWJsZU9ubnhWYWx1ZU1hcFR5cGUpW25hbWVdO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICAgICAgICBpc0ZldGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBpc0ZldGNoZXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICBmZXRjaGVzW25hbWVdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGZXRjaGVzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmcyID09PSAnb2JqZWN0JyAmJiBhcmcyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucyA9IGFyZzEgYXMgUnVuT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBtdXN0IGJlIFxcJ2ZldGNoZXNcXCcgb3IgXFwnb3B0aW9uc1xcJy4nKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgaW5wdXRzIGFyZSBpbiBmZWVkXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGlucHV0TmFtZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgZmVlZHNbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgJyR7bmFtZX0nIGlzIG1pc3NpbmcgaW4gJ2ZlZWRzJy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBubyBmZXRjaGVzIGlzIHNwZWNpZmllZCwgd2UgdXNlIHRoZSBmdWxsIG91dHB1dCBuYW1lcyBsaXN0XG4gICAgaWYgKGlzRmV0Y2hlc0VtcHR5KSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygb3V0cHV0TmFtZXMpIHtcbiAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtmZXRjaGVzLCBvcHRpb25zXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBydW5UcmFpblN0ZXAgYW5kIGFueSBvdGhlciBydW5TdGVwIG1ldGhvZHMuIFRha2VzIHRoZSBSZXR1cm5UeXBlIHJlc3VsdCBmcm9tIHRoZSBTZXNzaW9uSGFuZGxlclxuICAgKiBhbmQgY2hhbmdlcyBpdCBpbnRvIGEgbWFwIG9mIFRlbnNvcnMuXG4gICAqXG4gICAqIEBwYXJhbSByZXN1bHRzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjb252ZXJ0SGFuZGxlclJldHVyblR5cGVUb01hcE9mVGVuc29ycyhyZXN1bHRzOiBTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlKTogUmV0dXJuVHlwZSB7XG4gICAgY29uc3QgcmV0dXJuVmFsdWU6IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJlc3VsdHMpIHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHRzLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNba2V5XTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICAgIHJldHVyblZhbHVlW2tleV0gPSByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWVba2V5XSA9IG5ldyBUZW5zb3IocmVzdWx0LnR5cGUsIHJlc3VsdC5kYXRhLCByZXN1bHQuZGltcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgYXN5bmMgbGF6eVJlc2V0R3JhZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmhhbmRsZXIubGF6eVJlc2V0R3JhZCgpO1xuICB9XG5cbiAgcnVuVHJhaW5TdGVwKGZlZWRzOiBGZWVkc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSZXR1cm5UeXBlPjtcbiAgcnVuVHJhaW5TdGVwKGZlZWRzOiBGZWVkc1R5cGUsIGZldGNoZXM6IEZldGNoZXNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIGFzeW5jIHJ1blRyYWluU3RlcChmZWVkczogRmVlZHNUeXBlLCBhcmcxPzogRmV0Y2hlc1R5cGV8UnVuT3B0aW9ucywgYXJnMj86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+IHtcbiAgICBjb25zdCBbZmV0Y2hlcywgb3B0aW9uc10gPVxuICAgICAgICB0aGlzLnR5cGVOYXJyb3dpbmdGb3JSdW5TdGVwKHRoaXMudHJhaW5pbmdJbnB1dE5hbWVzLCB0aGlzLnRyYWluaW5nT3V0cHV0TmFtZXMsIGZlZWRzLCBhcmcxLCBhcmcyKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5oYW5kbGVyLnJ1blRyYWluU3RlcChmZWVkcywgZmV0Y2hlcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydEhhbmRsZXJSZXR1cm5UeXBlVG9NYXBPZlRlbnNvcnMocmVzdWx0cyk7XG4gIH1cblxuICBhc3luYyBydW5PcHRpbWl6ZXJTdGVwKG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnN8dW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzT3B0aW1pemVyTW9kZWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlci5ydW5PcHRpbWl6ZXJTdGVwKG9wdGlvbnMgfHwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgVHJhaW5pbmdTZXNzaW9uIGhhcyBubyBPcHRpbWl6ZXJNb2RlbCBsb2FkZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcnVuRXZhbFN0ZXAoZmVlZHM6IEZlZWRzVHlwZSwgb3B0aW9ucz86IFJ1bk9wdGlvbnN8dW5kZWZpbmVkKTogUHJvbWlzZTxSZXR1cm5UeXBlPjtcbiAgcnVuRXZhbFN0ZXAoZmVlZHM6IEZlZWRzVHlwZSwgZmV0Y2hlczogRmV0Y2hlc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zfHVuZGVmaW5lZCk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIGFzeW5jIHJ1bkV2YWxTdGVwKGZlZWRzOiBGZWVkc1R5cGUsIGFyZzE/OiBGZXRjaGVzVHlwZXxSdW5PcHRpb25zLCBhcmcyPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT4ge1xuICAgIGlmICh0aGlzLmhhc0V2YWxNb2RlbCkge1xuICAgICAgY29uc3QgW2ZldGNoZXMsIG9wdGlvbnNdID1cbiAgICAgICAgICB0aGlzLnR5cGVOYXJyb3dpbmdGb3JSdW5TdGVwKHRoaXMuZXZhbElucHV0TmFtZXMsIHRoaXMuZXZhbE91dHB1dE5hbWVzLCBmZWVkcywgYXJnMSwgYXJnMik7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5oYW5kbGVyLnJ1bkV2YWxTdGVwKGZlZWRzLCBmZXRjaGVzLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIYW5kbGVyUmV0dXJuVHlwZVRvTWFwT2ZUZW5zb3JzKHJlc3VsdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgVHJhaW5pbmdTZXNzaW9uIGhhcyBubyBFdmFsTW9kZWwgbG9hZGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHkgPSB0cnVlKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHkpO1xuICB9XG5cbiAgYXN5bmMgbG9hZFBhcmFtZXRlcnNCdWZmZXIoYXJyYXk6IFVpbnQ4QXJyYXksIHRyYWluYWJsZU9ubHkgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1zU2l6ZSA9IGF3YWl0IHRoaXMuZ2V0UGFyYW1ldGVyc1NpemUodHJhaW5hYmxlT25seSk7XG4gICAgLy8gY2hlY2tpbmcgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgVWludDhBcnJheSBpcyBlcXVpdmFsZW50IHRvIHRoZSBieXRlIGxlbmd0aCBvZiBhIEZsb2F0MzJBcnJheSBvZiB0aGUgbnVtYmVyXG4gICAgLy8gb2YgcGFyYW1ldGVyc1xuICAgIGlmIChhcnJheS5sZW5ndGggIT09IDQgKiBwYXJhbXNTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NpemUgb2YgdGhlIGJ1ZmZlciBwYXNzZWQgaW50byBsb2FkUGFyYW1ldGVyc0J1ZmZlciBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiAnICtcbiAgICAgICAgICAndGhlIG1vZGVsLiBQbGVhc2UgdXNlIGdldFBhcmFtZXRlcnNTaXplIG1ldGhvZCB0byBjaGVjay4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5sb2FkUGFyYW1ldGVyc0J1ZmZlcihhcnJheSwgdHJhaW5hYmxlT25seSk7XG4gIH1cblxuICBhc3luYyBnZXRDb250aWd1b3VzUGFyYW1ldGVycyh0cmFpbmFibGVPbmx5ID0gdHJ1ZSk6IFByb21pc2U8T25ueFZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5nZXRDb250aWd1b3VzUGFyYW1ldGVycyh0cmFpbmFibGVPbmx5KTtcbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5kaXNwb3NlKCk7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmltcG9ydCB7T25ueFZhbHVlfSBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuaW1wb3J0IHtUcmFpbmluZ1Nlc3Npb24gYXMgVHJhaW5pbmdTZXNzaW9uSW1wbH0gZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLWltcGwuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkZWNsYXJlICovXG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUcmFpbmluZ1Nlc3Npb24ge1xuICAvKipcbiAgICogRWl0aGVyIFVSSSBmaWxlIHBhdGggKHN0cmluZykgb3IgVWludDhBcnJheSBjb250YWluaW5nIG1vZGVsIG9yIGNoZWNrcG9pbnQgaW5mb3JtYXRpb24uXG4gICAqL1xuICB0eXBlIFVyaU9yQnVmZmVyID0gc3RyaW5nfFVpbnQ4QXJyYXk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50IGEgcnVudGltZSBpbnN0YW5jZSBvZiBhbiBPTk5YIHRyYWluaW5nIHNlc3Npb24sXG4gKiB3aGljaCBjb250YWlucyBhIG1vZGVsIHRoYXQgY2FuIGJlIHRyYWluZWQsIGFuZCwgb3B0aW9uYWxseSxcbiAqIGFuIGV2YWwgYW5kIG9wdGltaXplciBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFpbmluZ1Nlc3Npb24ge1xuICAvLyAjcmVnaW9uIHJ1bigpXG5cbiAgLyoqXG4gICAqIExhemlseSByZXNldHMgdGhlIGdyYWRpZW50cyBvZiBhbGwgdHJhaW5hYmxlIHBhcmFtZXRlcnMgdG8gemVyby4gU2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgaW52b2NhdGlvbiBvZlxuICAgKiBydW5PcHRpbWl6ZXJTdGVwLlxuICAgKi9cbiAgbGF6eVJlc2V0R3JhZCgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSdW4gVHJhaW5TdGVwIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGdpdmVuIGZlZWRzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuIFNlZSB0eXBlIGRlc2NyaXB0aW9uIG9mIGBJbmZlcmVuY2VTZXNzaW9uLklucHV0VHlwZWAgZm9yXG4gICBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgdHJhaW5pbmcuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgbWFwLCB3aGljaCB1c2VzIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqL1xuICBydW5UcmFpblN0ZXAoZmVlZHM6IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlLCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvKipcbiAgICogUnVuIGEgc2luZ2xlIHRyYWluIHN0ZXAgd2l0aCB0aGUgZ2l2ZW4gaW5wdXRzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuXG4gICAqIEBwYXJhbSBmZXRjaGVzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG91dHB1dC5cbiAgICogZGV0YWlsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIG1vZGVsIHRyYWluaW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlcy5cbiAgICovXG4gIHJ1blRyYWluU3RlcChcbiAgICAgIGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgZmV0Y2hlczogSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZSxcbiAgICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzaW5nbGUgb3B0aW1pemVyIHN0ZXAsIHdoaWNoIHBlcmZvcm1zIHdlaWdodCB1cGRhdGVzIGZvciB0aGUgdHJhaW5hYmxlIHBhcmFtZXRlcnMgdXNpbmcgdGhlIG9wdGltaXplciBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiBtb2RlbCBvcHRpbWl6aW5nLlxuICAgKi9cbiAgcnVuT3B0aW1pemVyU3RlcChvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUnVuIGEgc2luZ2xlIGV2YWwgc3RlcCB3aXRoIHRoZSBnaXZlbiBpbnB1dHMgYW5kIG9wdGlvbnMgdXNpbmcgdGhlIGV2YWwgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiBtb2RlbCBldmFsIHN0ZXAuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgbWFwLCB3aGljaCB1c2VzIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZ1xuICAgdmFsdWVzLlxuICAgKi9cbiAgcnVuRXZhbFN0ZXAoZmVlZHM6IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlLCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvKipcbiAgICogUnVuIGEgc2luZ2xlIGV2YWwgc3RlcCB3aXRoIHRoZSBnaXZlbiBpbnB1dHMgYW5kIG9wdGlvbnMgdXNpbmcgdGhlIGV2YWwgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC5cbiAgICogQHBhcmFtIGZldGNoZXMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb3V0cHV0LlxuICAgKiBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgZXZhbCBzdGVwLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlcy5cbiAgICovXG4gIHJ1bkV2YWxTdGVwKFxuICAgICAgZmVlZHM6IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlLCBmZXRjaGVzOiBJbmZlcmVuY2VTZXNzaW9uLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBjb3B5IHBhcmFtZXRlcnNcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBzaXplIG9mIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgdHJhaW5pbmcgc3RhdGUuIENhbGN1bGF0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwcmltaXRpdmUgKGRhdGF0eXBlIG9mXG4gICAqIHRoZSBwYXJhbWV0ZXJzKSBlbGVtZW50cyBvZiBhbGwgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIHRyYWluaW5nIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0gdHJhaW5hYmxlT25seSAtIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgZm9yIHRyYWluYWJsZSBwYXJhbXMgb25seS4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgZ2V0UGFyYW1ldGVyc1NpemUodHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8bnVtYmVyPjtcblxuICAvKipcbiAgICogQ29waWVzIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSB0cmFpbmluZyBzdGF0ZS4gQ3VycmVudGx5LCBvbmx5IHN1cHBvcnRpbmcgbW9kZWxzIHdpdGhcbiAgICogcGFyYW1ldGVycyBvZiB0eXBlIEZsb2F0MzIuXG4gICAqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBBIFVpbnQ4QXJyYXkgcmVwcmVzZW50YXRpb24gb2YgRmxvYXQzMiBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gdHJhaW5hYmxlT25seSAtIFRydWUgaWYgdHJhaW5hYmxlIHBhcmFtZXRlcnMgb25seSB0byBiZSBtb2RpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBsb2FkUGFyYW1ldGVyc0J1ZmZlcihidWZmZXI6IFVpbnQ4QXJyYXksIHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIG1vZGVsIHBhcmFtZXRlcnMgdG8gYSBjb250aWd1b3VzIGJ1ZmZlci4gVXN1YWxseSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIEZlZGVyYXRlZCBMZWFybmluZy5cbiAgICogQ3VycmVudGx5LCBvbmx5IHN1cHBvcnRpbmcgbW9kZWxzIHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIEZsb2F0MzIuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFpbmFibGVPbmx5IC0gV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSB0cmFpbmFibGUgcGFyYW1ldGVycyBhcmUgY29waWVkLiBUcmFpbmFibGUgcGFyYW1ldGVycyBhcmUgcGFyYW1ldGVyc1xuICAgKiBmb3Igd2hpY2ggcmVxdWlyZXNfZ3JhZCBpcyBzZXQgdG8gdHJ1ZS4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEZsb2F0MzIgT25ueFZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVycy5cbiAgICovXG4gIGdldENvbnRpZ3VvdXNQYXJhbWV0ZXJzKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPE9ubnhWYWx1ZT47XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJlbGVhc2UoKVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBpbmZlcmVuY2Ugc2Vzc2lvbiBhbmQgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBtZXRhZGF0YVxuXG4gIC8qKlxuICAgKiBHZXQgaW5wdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCB0cmFpbmluZyBtb2RlbC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWluaW5nSW5wdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdldCBvdXRwdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCB0cmFpbmluZyBtb2RlbC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWluaW5nT3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZXQgaW5wdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCBldmFsIG1vZGVsLiBJcyBhbiBlbXB0eSBhcnJheSBpZiBubyBldmFsIG1vZGVsIGlzIGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV2YWxJbnB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2V0IG91dHB1dCBuYW1lcyBvZiB0aGUgbG9hZGVkIGV2YWwgbW9kZWwuIElzIGFuIGVtcHR5IGFycmF5IGlmIG5vIGV2YWwgbW9kZWwgaXMgbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbE91dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvLyAjZW5kcmVnaW9uXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgVHJhaW5pbmdTZXNzaW9uRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFpbmluZ1Nlc3Npb25DcmVhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVSSSBvciBidWZmZXIgZm9yIGEgLmNrcHQgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGVja3BvaW50IGZvciB0aGUgdHJhaW5pbmcgbW9kZWwuXG4gICAqL1xuICBjaGVja3BvaW50U3RhdGU6IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcjtcbiAgLyoqXG4gICAqIFVSSSBvciBidWZmZXIgZm9yIHRoZSAub25ueCB0cmFpbmluZyBmaWxlLlxuICAgKi9cbiAgdHJhaW5Nb2RlbDogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwuIFVSSSBvciBidWZmZXIgZm9yIHRoZSAub25ueCBvcHRpbWl6ZXIgbW9kZWwgZmlsZS5cbiAgICovXG4gIG9wdGltaXplck1vZGVsPzogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwuIFVSSSBvciBidWZmZXIgZm9yIHRoZSAub25ueCBldmFsIG1vZGVsIGZpbGUuXG4gICAqL1xuICBldmFsTW9kZWw/OiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXI7XG59XG5cbi8qKlxuICogRGVmaW5lcyBtZXRob2Qgb3ZlcmxvYWQgcG9zc2liaWxpdGllcyBmb3IgY3JlYXRpbmcgYSBUcmFpbmluZ1Nlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdTZXNzaW9uRmFjdG9yeSB7XG4gIC8vICNyZWdpb24gY3JlYXRlKClcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBUcmFpbmluZ1Nlc3Npb24gYW5kIGFzeW5jaHJvbm91c2x5IGxvYWRzIGFueSBtb2RlbHMgcGFzc2VkIGluIHRocm91Z2ggdHJhaW5pbmdPcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB0cmFpbmluZ09wdGlvbnMgc3BlY2lmeSBtb2RlbHMgYW5kIGNoZWNrcG9pbnRzIHRvIGxvYWQgaW50byB0aGUgVHJhaW5pbmcgU2Vzc2lvblxuICAgKiBAcGFyYW0gc2Vzc2lvbk9wdGlvbnMgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciB0cmFpbmluZyBzZXNzaW9uIGJlaGF2aW9yXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFRyYWluaW5nU2Vzc2lvbiBvYmplY3RcbiAgICovXG4gIGNyZWF0ZSh0cmFpbmluZ09wdGlvbnM6IFRyYWluaW5nU2Vzc2lvbkNyZWF0ZU9wdGlvbnMsIHNlc3Npb25PcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPFRyYWluaW5nU2Vzc2lvbj47XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgVHJhaW5pbmdTZXNzaW9uOiBUcmFpbmluZ1Nlc3Npb25GYWN0b3J5ID0gVHJhaW5pbmdTZXNzaW9uSW1wbDtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLyoqXG4gKiAjIE9OTlggUnVudGltZSBKYXZhU2NyaXB0IEFQSVxuICpcbiAqIE9OTlggUnVudGltZSBKYXZhU2NyaXB0IEFQSSBpcyBhIHVuaWZpZWQgQVBJIGZvciBhbGwgSmF2YVNjcmlwdCB1c2FnZXMsIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nIE5QTSBwYWNrYWdlczpcbiAqXG4gKiAtIFtvbm54cnVudGltZS1ub2RlXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9vbm54cnVudGltZS1ub2RlKVxuICogLSBbb25ueHJ1bnRpbWUtd2ViXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9vbm54cnVudGltZS13ZWIpXG4gKiAtIFtvbm54cnVudGltZS1yZWFjdC1uYXRpdmVdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29ubnhydW50aW1lLXJlYWN0LW5hdGl2ZSlcbiAqXG4gKiBTZWUgYWxzbzpcbiAqIC0gW0dldCBTdGFydGVkXShodHRwczovL29ubnhydW50aW1lLmFpL2RvY3MvZ2V0LXN0YXJ0ZWQvd2l0aC1qYXZhc2NyaXB0LylcbiAqIC0gW0luZmVyZW5jZSBleGFtcGxlc10oaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9vbm54cnVudGltZS1pbmZlcmVuY2UtZXhhbXBsZXMvdHJlZS9tYWluL2pzKVxuICpcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYmFja2VuZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vudi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuc29yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuc29yLWNvbnZlcnNpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5zb3ItZmFjdG9yeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RyYWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb25ueC1tb2RlbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLmpzJztcbiIsICJleHBvcnQgY29uc3QgY3B1cyA9IHVuZGVmaW5lZDsiLCAiZXhwb3J0IGNvbnN0IGpvaW4gPSB1bmRlZmluZWQ7IiwgImV4cG9ydCBjb25zdCByZWFkRmlsZSA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgcmVhZEZpbGVTeW5jID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCBjcmVhdGVSZWFkU3RyZWFtID0gdW5kZWZpbmVkOyIsICJleHBvcnQgY29uc3Qgam9pbiA9IHVuZGVmaW5lZDsiLCAiXG52YXIgb3J0V2FzbSA9ICgoKSA9PiB7XG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIF9zY3JpcHREaXIgPSBfc2NyaXB0RGlyIHx8IF9fZmlsZW5hbWU7XG4gIHJldHVybiAoXG5mdW5jdGlvbihtb2R1bGVBcmcgPSB7fSkge1xuXG52YXIgZD1tb2R1bGVBcmcsayxsO2QucmVhZHk9bmV3IFByb21pc2UoKGEsYik9PntrPWE7bD1ifSk7dmFyIHI9T2JqZWN0LmFzc2lnbih7fSxkKSx2PVwiLi90aGlzLnByb2dyYW1cIixhYT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LHg9XCJmdW5jdGlvblwiPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxiYT1cIm9iamVjdFwiPT10eXBlb2YgcHJvY2VzcyYmXCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMmJlwic3RyaW5nXCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUseT1cIlwiLEEsQixDO1xuaWYoYmEpe3ZhciBmcz1yZXF1aXJlKFwiZnNcIiksRD1yZXF1aXJlKFwicGF0aFwiKTt5PXg/RC5kaXJuYW1lKHkpK1wiL1wiOl9fZGlybmFtZStcIi9cIjtBPShhLGIpPT57YT1hLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpP25ldyBVUkwoYSk6RC5ub3JtYWxpemUoYSk7cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhhLGI/dm9pZCAwOlwidXRmOFwiKX07Qz1hPT57YT1BKGEsITApO2EuYnVmZmVyfHwoYT1uZXcgVWludDhBcnJheShhKSk7cmV0dXJuIGF9O0I9KGEsYixjLGY9ITApPT57YT1hLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpP25ldyBVUkwoYSk6RC5ub3JtYWxpemUoYSk7ZnMucmVhZEZpbGUoYSxmP3ZvaWQgMDpcInV0ZjhcIiwoZyxoKT0+e2c/YyhnKTpiKGY/aC5idWZmZXI6aCl9KX07IWQudGhpc1Byb2dyYW0mJjE8cHJvY2Vzcy5hcmd2Lmxlbmd0aCYmKHY9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpO3Byb2Nlc3MuYXJndi5zbGljZSgyKTtkLmluc3BlY3Q9KCk9PlwiW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF1cIn1lbHNlIGlmKGFhfHxcbngpeD95PXNlbGYubG9jYXRpb24uaHJlZjpcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJih5PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSxfc2NyaXB0RGlyJiYoeT1fc2NyaXB0RGlyKSwwIT09eS5pbmRleE9mKFwiYmxvYjpcIik/eT15LnN1YnN0cigwLHkucmVwbGFjZSgvWz8jXS4qLyxcIlwiKS5sYXN0SW5kZXhPZihcIi9cIikrMSk6eT1cIlwiLEE9YT0+e3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJHRVRcIixhLCExKTtiLnNlbmQobnVsbCk7cmV0dXJuIGIucmVzcG9uc2VUZXh0fSx4JiYoQz1hPT57dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2IucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIjtiLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGIucmVzcG9uc2UpfSksQj0oYSxiLGMpPT57dmFyIGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub3BlbihcIkdFVFwiLGEsITApO2YucmVzcG9uc2VUeXBlPVxuXCJhcnJheWJ1ZmZlclwiO2Yub25sb2FkPSgpPT57MjAwPT1mLnN0YXR1c3x8MD09Zi5zdGF0dXMmJmYucmVzcG9uc2U/YihmLnJlc3BvbnNlKTpjKCl9O2Yub25lcnJvcj1jO2Yuc2VuZChudWxsKX07dmFyIGNhPWQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksRT1kLnByaW50RXJyfHxjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihkLHIpO3I9bnVsbDtkLnRoaXNQcm9ncmFtJiYodj1kLnRoaXNQcm9ncmFtKTt2YXIgRjtkLndhc21CaW5hcnkmJihGPWQud2FzbUJpbmFyeSk7dmFyIG5vRXhpdFJ1bnRpbWU9ZC5ub0V4aXRSdW50aW1lfHwhMDtcIm9iamVjdFwiIT10eXBlb2YgV2ViQXNzZW1ibHkmJkcoXCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkXCIpO3ZhciBILEksZGE9ITEsSixLLEwsTTtcbmZ1bmN0aW9uIGVhKCl7dmFyIGE9SC5idWZmZXI7ZC5IRUFQOD1KPW5ldyBJbnQ4QXJyYXkoYSk7ZC5IRUFQMTY9bmV3IEludDE2QXJyYXkoYSk7ZC5IRUFQMzI9TD1uZXcgSW50MzJBcnJheShhKTtkLkhFQVBVOD1LPW5ldyBVaW50OEFycmF5KGEpO2QuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYSk7ZC5IRUFQVTMyPU09bmV3IFVpbnQzMkFycmF5KGEpO2QuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGEpO2QuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGEpfXZhciBmYT1bXSxoYT1bXSxpYT1bXTtmdW5jdGlvbiBqYSgpe3ZhciBhPWQucHJlUnVuLnNoaWZ0KCk7ZmEudW5zaGlmdChhKX12YXIgTj0wLE89bnVsbCxQPW51bGw7XG5mdW5jdGlvbiBHKGEpe2lmKGQub25BYm9ydClkLm9uQWJvcnQoYSk7YT1cIkFib3J0ZWQoXCIrYStcIilcIjtFKGEpO2RhPSEwO2E9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihhK1wiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLlwiKTtsKGEpO3Rocm93IGE7fWZ1bmN0aW9uIGthKGEpe3JldHVybiBhLnN0YXJ0c1dpdGgoXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCIpfXZhciBRO1E9XCJvcnQtdHJhaW5pbmctd2FzbS1zaW1kLndhc21cIjtpZigha2EoUSkpe3ZhciBsYT1RO1E9ZC5sb2NhdGVGaWxlP2QubG9jYXRlRmlsZShsYSx5KTp5K2xhfWZ1bmN0aW9uIG1hKGEpe2lmKGE9PVEmJkYpcmV0dXJuIG5ldyBVaW50OEFycmF5KEYpO2lmKEMpcmV0dXJuIEMoYSk7dGhyb3dcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7fVxuZnVuY3Rpb24gbmEoYSl7aWYoIUYmJihhYXx8eCkpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGZldGNoJiYhYS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSlyZXR1cm4gZmV0Y2goYSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihiPT57aWYoIWIub2spdGhyb3dcImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJ1wiK2ErXCInXCI7cmV0dXJuIGIuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKCgpPT5tYShhKSk7aWYoQilyZXR1cm4gbmV3IFByb21pc2UoKGIsYyk9PntCKGEsZj0+YihuZXcgVWludDhBcnJheShmKSksYyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bWEoYSkpfWZ1bmN0aW9uIG9hKGEsYixjKXtyZXR1cm4gbmEoYSkudGhlbihmPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShmLGIpKS50aGVuKGY9PmYpLnRoZW4oYyxmPT57RShcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK2YpO0coZil9KX1cbmZ1bmN0aW9uIHBhKGEsYil7dmFyIGM9UTtyZXR1cm4gRnx8XCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fGthKGMpfHxjLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpfHxiYXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/b2EoYyxhLGIpOmZldGNoKGMse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oZj0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZixhKS50aGVuKGIsZnVuY3Rpb24oZyl7RShcIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiBcIitnKTtFKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7cmV0dXJuIG9hKGMsYSxiKX0pKX12YXIgUixTPWE9Pntmb3IoOzA8YS5sZW5ndGg7KWEuc2hpZnQoKShkKX07XG5mdW5jdGlvbiBxYShhKXt0aGlzLkhhPWEtMjQ7dGhpcy5MYT1mdW5jdGlvbihiKXtNW3RoaXMuSGErND4+Mj4+PjBdPWJ9O3RoaXMuS2E9ZnVuY3Rpb24oYil7TVt0aGlzLkhhKzg+PjI+Pj4wXT1ifTt0aGlzLklhPWZ1bmN0aW9uKGIsYyl7dGhpcy5KYSgpO3RoaXMuTGEoYik7dGhpcy5LYShjKX07dGhpcy5KYT1mdW5jdGlvbigpe01bdGhpcy5IYSsxNj4+Mj4+PjBdPTB9fVxudmFyIHJhPTAsc2E9MCx0YT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp2b2lkIDAsdWE9KGEsYixjKT0+e2I+Pj49MDt2YXIgZj1iK2M7Zm9yKGM9YjthW2NdJiYhKGM+PWYpOykrK2M7aWYoMTY8Yy1iJiZhLmJ1ZmZlciYmdGEpcmV0dXJuIHRhLmRlY29kZShhLnN1YmFycmF5KGIsYykpO2ZvcihmPVwiXCI7YjxjOyl7dmFyIGc9YVtiKytdO2lmKGcmMTI4KXt2YXIgaD1hW2IrK10mNjM7aWYoMTkyPT0oZyYyMjQpKWYrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGcmMzEpPDw2fGgpO2Vsc2V7dmFyIG09YVtiKytdJjYzO2c9MjI0PT0oZyYyNDApPyhnJjE1KTw8MTJ8aDw8NnxtOihnJjcpPDwxOHxoPDwxMnxtPDw2fGFbYisrXSY2Mzs2NTUzNj5nP2YrPVN0cmluZy5mcm9tQ2hhckNvZGUoZyk6KGctPTY1NTM2LGYrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Zz4+MTAsNTYzMjB8ZyYxMDIzKSl9fWVsc2UgZis9U3RyaW5nLmZyb21DaGFyQ29kZShnKX1yZXR1cm4gZn0sXG5UPShhLGIpPT4oYT4+Pj0wKT91YShLLGEsYik6XCJcIixVPWE9Pntmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBmPWEuY2hhckNvZGVBdChjKTsxMjc+PWY/YisrOjIwNDc+PWY/Yis9Mjo1NTI5Njw9ZiYmNTczNDM+PWY/KGIrPTQsKytjKTpiKz0zfXJldHVybiBifSxWPShhLGIsYyxmKT0+e2M+Pj49MDtpZighKDA8ZikpcmV0dXJuIDA7dmFyIGc9YztmPWMrZi0xO2Zvcih2YXIgaD0wO2g8YS5sZW5ndGg7KytoKXt2YXIgbT1hLmNoYXJDb2RlQXQoaCk7aWYoNTUyOTY8PW0mJjU3MzQzPj1tKXt2YXIgcT1hLmNoYXJDb2RlQXQoKytoKTttPTY1NTM2KygobSYxMDIzKTw8MTApfHEmMTAyM31pZigxMjc+PW0pe2lmKGM+PWYpYnJlYWs7YltjKys+Pj4wXT1tfWVsc2V7aWYoMjA0Nz49bSl7aWYoYysxPj1mKWJyZWFrO2JbYysrPj4+MF09MTkyfG0+PjZ9ZWxzZXtpZig2NTUzNT49bSl7aWYoYysyPj1mKWJyZWFrO2JbYysrPj4+MF09MjI0fG0+PjEyfWVsc2V7aWYoYyszPj1cbmYpYnJlYWs7YltjKys+Pj4wXT0yNDB8bT4+MTg7YltjKys+Pj4wXT0xMjh8bT4+MTImNjN9YltjKys+Pj4wXT0xMjh8bT4+NiY2M31iW2MrKz4+PjBdPTEyOHxtJjYzfX1iW2M+Pj4wXT0wO3JldHVybiBjLWd9LFc9YT0+MD09PWElNCYmKDAhPT1hJTEwMHx8MD09PWElNDAwKSx2YT1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSx3YT1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxCYT1hPT57dmFyIGI9VShhKSsxLGM9QWEoYik7YyYmVihhLEssYyxiKTtyZXR1cm4gY30sWD17fSxDYT0oKT0+e2lmKCFZKXt2YXIgYT17VVNFUjpcIndlYl91c2VyXCIsTE9HTkFNRTpcIndlYl91c2VyXCIsUEFUSDpcIi9cIixQV0Q6XCIvXCIsSE9NRTpcIi9ob21lL3dlYl91c2VyXCIsTEFORzooXCJvYmplY3RcIj09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8XCJDXCIpLnJlcGxhY2UoXCItXCIsXG5cIl9cIikrXCIuVVRGLThcIixfOnZ8fFwiLi90aGlzLnByb2dyYW1cIn0sYjtmb3IoYiBpbiBYKXZvaWQgMD09PVhbYl0/ZGVsZXRlIGFbYl06YVtiXT1YW2JdO3ZhciBjPVtdO2ZvcihiIGluIGEpYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtZPWN9cmV0dXJuIFl9LFksRGE9W251bGwsW10sW11dLEVhPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sRmE9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiBHYShhKXt2YXIgYj1BcnJheShVKGEpKzEpO1YoYSxiLDAsYi5sZW5ndGgpO3JldHVybiBifVxuZnVuY3Rpb24gSGEoYSxiLGMsZil7ZnVuY3Rpb24gZyhlLG4scCl7Zm9yKGU9XCJudW1iZXJcIj09dHlwZW9mIGU/ZS50b1N0cmluZygpOmV8fFwiXCI7ZS5sZW5ndGg8bjspZT1wWzBdK2U7cmV0dXJuIGV9ZnVuY3Rpb24gaChlLG4pe3JldHVybiBnKGUsbixcIjBcIil9ZnVuY3Rpb24gbShlLG4pe2Z1bmN0aW9uIHAoeGEpe3JldHVybiAwPnhhPy0xOjA8eGE/MTowfXZhciB6OzA9PT0oej1wKGUuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCkpKSYmMD09PSh6PXAoZS5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSkpJiYoej1wKGUuZ2V0RGF0ZSgpLW4uZ2V0RGF0ZSgpKSk7cmV0dXJuIHp9ZnVuY3Rpb24gcShlKXtzd2l0Y2goZS5nZXREYXkoKSl7Y2FzZSAwOnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBlO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMyk7Y2FzZSAzOnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksXG4wLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIHcoZSl7dmFyIG49ZS5DYTtmb3IoZT1uZXcgRGF0ZSgobmV3IERhdGUoZS5EYSsxOTAwLDAsMSkpLmdldFRpbWUoKSk7MDxuOyl7dmFyIHA9ZS5nZXRNb250aCgpLHo9KFcoZS5nZXRGdWxsWWVhcigpKT9FYTpGYSlbcF07aWYobj56LWUuZ2V0RGF0ZSgpKW4tPXotZS5nZXREYXRlKCkrMSxlLnNldERhdGUoMSksMTE+cD9lLnNldE1vbnRoKHArMSk6KGUuc2V0TW9udGgoMCksZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrMSkpO2Vsc2V7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK24pO2JyZWFrfX1wPW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSsxLDAsNCk7bj1xKG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxcbjAsNCkpO3A9cShwKTtyZXR1cm4gMD49bShuLGUpPzA+PW0ocCxlKT9lLmdldEZ1bGxZZWFyKCkrMTplLmdldEZ1bGxZZWFyKCk6ZS5nZXRGdWxsWWVhcigpLTF9YT4+Pj0wO2I+Pj49MDtjPj4+PTA7Zj4+Pj0wO3ZhciB0PUxbZis0MD4+Mj4+PjBdO2Y9e09hOkxbZj4+Mj4+PjBdLE5hOkxbZis0Pj4yPj4+MF0sRWE6TFtmKzg+PjI+Pj4wXSxHYTpMW2YrMTI+PjI+Pj4wXSxGYTpMW2YrMTY+PjI+Pj4wXSxEYTpMW2YrMjA+PjI+Pj4wXSx4YTpMW2YrMjQ+PjI+Pj4wXSxDYTpMW2YrMjg+PjI+Pj4wXSxRYTpMW2YrMzI+PjI+Pj4wXSxNYTpMW2YrMzY+PjI+Pj4wXSxQYTp0P1QodCk6XCJcIn07Yz1UKGMpO3Q9e1wiJWNcIjpcIiVhICViICVkICVIOiVNOiVTICVZXCIsXCIlRFwiOlwiJW0vJWQvJXlcIixcIiVGXCI6XCIlWS0lbS0lZFwiLFwiJWhcIjpcIiViXCIsXCIlclwiOlwiJUk6JU06JVMgJXBcIixcIiVSXCI6XCIlSDolTVwiLFwiJVRcIjpcIiVIOiVNOiVTXCIsXCIleFwiOlwiJW0vJWQvJXlcIixcIiVYXCI6XCIlSDolTTolU1wiLFwiJUVjXCI6XCIlY1wiLFxuXCIlRUNcIjpcIiVDXCIsXCIlRXhcIjpcIiVtLyVkLyV5XCIsXCIlRVhcIjpcIiVIOiVNOiVTXCIsXCIlRXlcIjpcIiV5XCIsXCIlRVlcIjpcIiVZXCIsXCIlT2RcIjpcIiVkXCIsXCIlT2VcIjpcIiVlXCIsXCIlT0hcIjpcIiVIXCIsXCIlT0lcIjpcIiVJXCIsXCIlT21cIjpcIiVtXCIsXCIlT01cIjpcIiVNXCIsXCIlT1NcIjpcIiVTXCIsXCIlT3VcIjpcIiV1XCIsXCIlT1VcIjpcIiVVXCIsXCIlT1ZcIjpcIiVWXCIsXCIlT3dcIjpcIiV3XCIsXCIlT1dcIjpcIiVXXCIsXCIlT3lcIjpcIiV5XCJ9O2Zvcih2YXIgdSBpbiB0KWM9Yy5yZXBsYWNlKG5ldyBSZWdFeHAodSxcImdcIiksdFt1XSk7dmFyIHlhPVwiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXlcIi5zcGxpdChcIiBcIiksemE9XCJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyXCIuc3BsaXQoXCIgXCIpO3Q9e1wiJWFcIjplPT55YVtlLnhhXS5zdWJzdHJpbmcoMCwzKSxcIiVBXCI6ZT0+eWFbZS54YV0sXCIlYlwiOmU9PlxuemFbZS5GYV0uc3Vic3RyaW5nKDAsMyksXCIlQlwiOmU9PnphW2UuRmFdLFwiJUNcIjplPT5oKChlLkRhKzE5MDApLzEwMHwwLDIpLFwiJWRcIjplPT5oKGUuR2EsMiksXCIlZVwiOmU9PmcoZS5HYSwyLFwiIFwiKSxcIiVnXCI6ZT0+dyhlKS50b1N0cmluZygpLnN1YnN0cmluZygyKSxcIiVHXCI6ZT0+dyhlKSxcIiVIXCI6ZT0+aChlLkVhLDIpLFwiJUlcIjplPT57ZT1lLkVhOzA9PWU/ZT0xMjoxMjxlJiYoZS09MTIpO3JldHVybiBoKGUsMil9LFwiJWpcIjplPT57Zm9yKHZhciBuPTAscD0wO3A8PWUuRmEtMTtuKz0oVyhlLkRhKzE5MDApP0VhOkZhKVtwKytdKTtyZXR1cm4gaChlLkdhK24sMyl9LFwiJW1cIjplPT5oKGUuRmErMSwyKSxcIiVNXCI6ZT0+aChlLk5hLDIpLFwiJW5cIjooKT0+XCJcXG5cIixcIiVwXCI6ZT0+MDw9ZS5FYSYmMTI+ZS5FYT9cIkFNXCI6XCJQTVwiLFwiJVNcIjplPT5oKGUuT2EsMiksXCIldFwiOigpPT5cIlxcdFwiLFwiJXVcIjplPT5lLnhhfHw3LFwiJVVcIjplPT5oKE1hdGguZmxvb3IoKGUuQ2ErNy1lLnhhKS83KSwyKSxcIiVWXCI6ZT0+XG57dmFyIG49TWF0aC5mbG9vcigoZS5DYSs3LShlLnhhKzYpJTcpLzcpOzI+PShlLnhhKzM3MS1lLkNhLTIpJTcmJm4rKztpZihuKTUzPT1uJiYocD0oZS54YSszNzEtZS5DYSklNyw0PT1wfHwzPT1wJiZXKGUuRGEpfHwobj0xKSk7ZWxzZXtuPTUyO3ZhciBwPShlLnhhKzctZS5DYS0xKSU3Oyg0PT1wfHw1PT1wJiZXKGUuRGElNDAwLTEpKSYmbisrfXJldHVybiBoKG4sMil9LFwiJXdcIjplPT5lLnhhLFwiJVdcIjplPT5oKE1hdGguZmxvb3IoKGUuQ2ErNy0oZS54YSs2KSU3KS83KSwyKSxcIiV5XCI6ZT0+KGUuRGErMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXCIlWVwiOmU9PmUuRGErMTkwMCxcIiV6XCI6ZT0+e2U9ZS5NYTt2YXIgbj0wPD1lO2U9TWF0aC5hYnMoZSkvNjA7cmV0dXJuKG4/XCIrXCI6XCItXCIpK1N0cmluZyhcIjAwMDBcIisoZS82MCoxMDArZSU2MCkpLnNsaWNlKC00KX0sXCIlWlwiOmU9PmUuUGEsXCIlJVwiOigpPT5cIiVcIn07Yz1jLnJlcGxhY2UoLyUlL2csXCJcXHgwMFxceDAwXCIpO2Zvcih1IGluIHQpYy5pbmNsdWRlcyh1KSYmXG4oYz1jLnJlcGxhY2UobmV3IFJlZ0V4cCh1LFwiZ1wiKSx0W3VdKGYpKSk7Yz1jLnJlcGxhY2UoL1xcMFxcMC9nLFwiJVwiKTt1PUdhKGMpO2lmKHUubGVuZ3RoPmIpcmV0dXJuIDA7Si5zZXQodSxhPj4+MCk7cmV0dXJuIHUubGVuZ3RoLTF9XG52YXIgSmE9e2E6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDsobmV3IHFhKGEpKS5JYShiPj4+MCxjPj4+MCk7cmE9YTtzYSsrO3Rocm93IHJhO30sZTpmdW5jdGlvbigpe3JldHVybiAwfSxIOmZ1bmN0aW9uKCl7fSx4OmZ1bmN0aW9uKCl7fSx6OmZ1bmN0aW9uKCl7fSxrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LEY6ZnVuY3Rpb24oKXt9LEI6ZnVuY3Rpb24oKXt9LEU6ZnVuY3Rpb24oKXt9LGc6ZnVuY3Rpb24oKXt9LHk6ZnVuY3Rpb24oKXt9LHY6ZnVuY3Rpb24oKXt9LEc6ZnVuY3Rpb24oKXt9LHc6ZnVuY3Rpb24oKXt9LGw6KCk9PiEwLG86ZnVuY3Rpb24oYSxiLGMpe2E9YisyMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO0xbYz4+Mj4+PjBdPWEuZ2V0VVRDU2Vjb25kcygpO0xbYys0Pj4yPj4+MF09YS5nZXRVVENNaW51dGVzKCk7TFtjKzg+PjI+Pj4wXT1hLmdldFVUQ0hvdXJzKCk7TFtjKzEyPj4yPj4+XG4wXT1hLmdldFVUQ0RhdGUoKTtMW2MrMTY+PjI+Pj4wXT1hLmdldFVUQ01vbnRoKCk7TFtjKzIwPj4yPj4+MF09YS5nZXRVVENGdWxsWWVhcigpLTE5MDA7TFtjKzI0Pj4yPj4+MF09YS5nZXRVVENEYXkoKTtMW2MrMjg+PjI+Pj4wXT0oYS5nZXRUaW1lKCktRGF0ZS5VVEMoYS5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSkvODY0RTV8MH0scDpmdW5jdGlvbihhLGIsYyl7YT1iKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFhPyhhPj4+MCkrNDI5NDk2NzI5NipiOk5hTjtjPj4+PTA7YT1uZXcgRGF0ZSgxRTMqYSk7TFtjPj4yPj4+MF09YS5nZXRTZWNvbmRzKCk7TFtjKzQ+PjI+Pj4wXT1hLmdldE1pbnV0ZXMoKTtMW2MrOD4+Mj4+PjBdPWEuZ2V0SG91cnMoKTtMW2MrMTI+PjI+Pj4wXT1hLmdldERhdGUoKTtMW2MrMTY+PjI+Pj4wXT1hLmdldE1vbnRoKCk7TFtjKzIwPj4yPj4+MF09YS5nZXRGdWxsWWVhcigpLTE5MDA7TFtjKzI0Pj4yPj4+MF09YS5nZXREYXkoKTtMW2MrMjg+PjI+Pj5cbjBdPShXKGEuZ2V0RnVsbFllYXIoKSk/dmE6d2EpW2EuZ2V0TW9udGgoKV0rYS5nZXREYXRlKCktMXwwO0xbYyszNj4+Mj4+PjBdPS0oNjAqYS5nZXRUaW1lem9uZU9mZnNldCgpKTtiPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgZj0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCk7TFtjKzMyPj4yPj4+MF09KGIhPWYmJmEuZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4oZixiKSl8MH0scTpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9bmV3IERhdGUoTFthKzIwPj4yPj4+MF0rMTkwMCxMW2ErMTY+PjI+Pj4wXSxMW2ErMTI+PjI+Pj4wXSxMW2ErOD4+Mj4+PjBdLExbYSs0Pj4yPj4+MF0sTFthPj4yPj4+MF0sMCksYz1MW2ErMzI+PjI+Pj4wXSxmPWIuZ2V0VGltZXpvbmVPZmZzZXQoKSxnPShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxcbmg9KG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwwLDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLG09TWF0aC5taW4oaCxnKTswPmM/TFthKzMyPj4yPj4+MF09TnVtYmVyKGchPWgmJm09PWYpOjA8YyE9KG09PWYpJiYoZz1NYXRoLm1heChoLGcpLGIuc2V0VGltZShiLmdldFRpbWUoKSs2RTQqKCgwPGM/bTpnKS1mKSkpO0xbYSsyND4+Mj4+PjBdPWIuZ2V0RGF5KCk7TFthKzI4Pj4yPj4+MF09KFcoYi5nZXRGdWxsWWVhcigpKT92YTp3YSlbYi5nZXRNb250aCgpXStiLmdldERhdGUoKS0xfDA7TFthPj4yPj4+MF09Yi5nZXRTZWNvbmRzKCk7TFthKzQ+PjI+Pj4wXT1iLmdldE1pbnV0ZXMoKTtMW2ErOD4+Mj4+PjBdPWIuZ2V0SG91cnMoKTtMW2ErMTI+PjI+Pj4wXT1iLmdldERhdGUoKTtMW2ErMTY+PjI+Pj4wXT1iLmdldE1vbnRoKCk7TFthKzIwPj4yPj4+MF09Yi5nZXRZZWFyKCk7YT1iLmdldFRpbWUoKS8xRTM7cmV0dXJuIElhKChSPWEsMTw9K01hdGguYWJzKFIpPzA8Uj8rTWF0aC5mbG9vcihSL1xuNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoUi0rKH5+Uj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCkpLGE+Pj4wfSxtOmZ1bmN0aW9uKCl7cmV0dXJuLTUyfSxuOmZ1bmN0aW9uKCl7fSx0OmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBmKHcpe3JldHVybih3PXcudG9UaW1lU3RyaW5nKCkubWF0Y2goL1xcKChbQS1aYS16IF0rKVxcKSQvKSk/d1sxXTpcIkdNVFwifWM+Pj49MDt2YXIgZz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksaD1uZXcgRGF0ZShnLDAsMSksbT1uZXcgRGF0ZShnLDYsMSk7Zz1oLmdldFRpbWV6b25lT2Zmc2V0KCk7dmFyIHE9bS5nZXRUaW1lem9uZU9mZnNldCgpO01bYT4+PjA+PjI+Pj4wXT02MCpNYXRoLm1heChnLHEpO0xbYj4+PjA+PjI+Pj4wXT1OdW1iZXIoZyE9cSk7YT1mKGgpO2I9ZihtKTthPUJhKGEpO2I9QmEoYik7cTxnPyhNW2M+PjI+Pj4wXT1hLE1bYys0Pj4yPj4+MF09Yik6KE1bYz4+Mj4+PjBdPWIsTVtjKzQ+PjI+Pj4wXT1hKX0sZDooKT0+e0coXCJcIil9LFxuaDpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSx1OmZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5MDE3NjB9LGI6KCk9PnBlcmZvcm1hbmNlLm5vdygpLEk6ZnVuY3Rpb24oYSxiLGMpe2I+Pj49MDtyZXR1cm4gSy5jb3B5V2l0aGluKGE+Pj4wPj4+MCxiPj4+MCxiKyhjPj4+MCk+Pj4wKX0sczpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9Sy5sZW5ndGg7aWYoNDI5NDkwMTc2MDxhKXJldHVybiExO2Zvcih2YXIgYz0xOzQ+PWM7Yyo9Mil7dmFyIGY9YiooMSsuMi9jKTtmPU1hdGgubWluKGYsYSsxMDA2NjMyOTYpO3ZhciBnPU1hdGg7Zj1NYXRoLm1heChhLGYpO2E6e2c9Zy5taW4uY2FsbChnLDQyOTQ5MDE3NjAsZisoNjU1MzYtZiU2NTUzNiklNjU1MzYpLUguYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNjt0cnl7SC5ncm93KGcpO2VhKCk7dmFyIGg9MTticmVhayBhfWNhdGNoKG0pe31oPXZvaWQgMH1pZihoKXJldHVybiEwfXJldHVybiExfSxDOmZ1bmN0aW9uKGEsYil7YT4+Pj1cbjA7Yj4+Pj0wO3ZhciBjPTA7Q2EoKS5mb3JFYWNoKGZ1bmN0aW9uKGYsZyl7dmFyIGg9YitjO2c9TVthKzQqZz4+Mj4+PjBdPWg7Zm9yKGg9MDtoPGYubGVuZ3RoOysraClKW2crKz4+MD4+PjBdPWYuY2hhckNvZGVBdChoKTtKW2c+PjA+Pj4wXT0wO2MrPWYubGVuZ3RoKzF9KTtyZXR1cm4gMH0sRDpmdW5jdGlvbihhLGIpe2E+Pj49MDtiPj4+PTA7dmFyIGM9Q2EoKTtNW2E+PjI+Pj4wXT1jLmxlbmd0aDt2YXIgZj0wO2MuZm9yRWFjaChmdW5jdGlvbihnKXtmKz1nLmxlbmd0aCsxfSk7TVtiPj4yPj4+MF09ZjtyZXR1cm4gMH0sZjooKT0+NTIsajpmdW5jdGlvbigpe3JldHVybiA1Mn0scjpmdW5jdGlvbigpe3JldHVybiA3MH0saTpmdW5jdGlvbihhLGIsYyxmKXtiPj4+PTA7Yz4+Pj0wO2Y+Pj49MDtmb3IodmFyIGc9MCxoPTA7aDxjO2grKyl7dmFyIG09TVtiPj4yPj4+MF0scT1NW2IrND4+Mj4+PjBdO2IrPTg7Zm9yKHZhciB3PTA7dzxxO3crKyl7dmFyIHQ9S1ttK3c+Pj4wXSx1PVxuRGFbYV07MD09PXR8fDEwPT09dD8oKDE9PT1hP2NhOkUpKHVhKHUsMCkpLHUubGVuZ3RoPTApOnUucHVzaCh0KX1nKz1xfU1bZj4+Mj4+PjBdPWc7cmV0dXJuIDB9LEE6SGEsYzpmdW5jdGlvbihhLGIsYyxmKXtyZXR1cm4gSGEoYT4+PjAsYj4+PjAsYz4+PjAsZj4+PjApfX07XG4oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMpe2M9Yy5leHBvcnRzO0k9Yz1LYShjKTtIPUkuSjtlYSgpO2hhLnVuc2hpZnQoSS5LKTtOLS07ZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoTik7aWYoMD09TiYmKG51bGwhPT1PJiYoY2xlYXJJbnRlcnZhbChPKSxPPW51bGwpLFApKXt2YXIgZj1QO1A9bnVsbDtmKCl9cmV0dXJuIGN9dmFyIGI9e2E6SmF9O04rKztkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJmQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhOKTtpZihkLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIGQuaW5zdGFudGlhdGVXYXNtKGIsYSl9Y2F0Y2goYyl7RShcIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6IFwiK2MpLGwoYyl9cGEoYixmdW5jdGlvbihjKXthKGMuaW5zdGFuY2UpfSkuY2F0Y2gobCk7cmV0dXJue319KSgpO1xuZC5fT3J0SW5pdD0oYSxiKT0+KGQuX09ydEluaXQ9SS5MKShhLGIpO2QuX09ydEdldExhc3RFcnJvcj0oYSxiKT0+KGQuX09ydEdldExhc3RFcnJvcj1JLk0pKGEsYik7ZC5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnM9KGEsYixjLGYsZyxoLG0scSx3LHQpPT4oZC5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnM9SS5OKShhLGIsYyxmLGcsaCxtLHEsdyx0KTtkLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj0oYSxiKT0+KGQuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyPUkuTykoYSxiKTtkLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9KGEsYixjKT0+KGQuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZT1JLlApKGEsYixjKTtkLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9KGEsYixjKT0+KGQuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeT1JLlEpKGEsYixjKTtkLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9YT0+KGQuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucz1JLlIpKGEpO1xuZC5fT3J0Q3JlYXRlU2Vzc2lvbj0oYSxiLGMpPT4oZC5fT3J0Q3JlYXRlU2Vzc2lvbj1JLlMpKGEsYixjKTtkLl9PcnRSZWxlYXNlU2Vzc2lvbj1hPT4oZC5fT3J0UmVsZWFzZVNlc3Npb249SS5UKShhKTtkLl9PcnRHZXRJbnB1dE91dHB1dENvdW50PShhLGIsYyk9PihkLl9PcnRHZXRJbnB1dE91dHB1dENvdW50PUkuVSkoYSxiLGMpO2QuX09ydEdldElucHV0TmFtZT0oYSxiKT0+KGQuX09ydEdldElucHV0TmFtZT1JLlYpKGEsYik7ZC5fT3J0R2V0T3V0cHV0TmFtZT0oYSxiKT0+KGQuX09ydEdldE91dHB1dE5hbWU9SS5XKShhLGIpO2QuX09ydEZyZWU9YT0+KGQuX09ydEZyZWU9SS5YKShhKTtkLl9PcnRDcmVhdGVUZW5zb3I9KGEsYixjLGYsZyxoKT0+KGQuX09ydENyZWF0ZVRlbnNvcj1JLlkpKGEsYixjLGYsZyxoKTtkLl9PcnRHZXRUZW5zb3JEYXRhPShhLGIsYyxmLGcpPT4oZC5fT3J0R2V0VGVuc29yRGF0YT1JLlopKGEsYixjLGYsZyk7XG5kLl9PcnRSZWxlYXNlVGVuc29yPWE9PihkLl9PcnRSZWxlYXNlVGVuc29yPUkuXykoYSk7ZC5fT3J0Q3JlYXRlUnVuT3B0aW9ucz0oYSxiLGMsZik9PihkLl9PcnRDcmVhdGVSdW5PcHRpb25zPUkuJCkoYSxiLGMsZik7ZC5fT3J0QWRkUnVuQ29uZmlnRW50cnk9KGEsYixjKT0+KGQuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PUkuYWEpKGEsYixjKTtkLl9PcnRSZWxlYXNlUnVuT3B0aW9ucz1hPT4oZC5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9SS5iYSkoYSk7ZC5fT3J0Q3JlYXRlQmluZGluZz1hPT4oZC5fT3J0Q3JlYXRlQmluZGluZz1JLmNhKShhKTtkLl9PcnRCaW5kSW5wdXQ9KGEsYixjKT0+KGQuX09ydEJpbmRJbnB1dD1JLmRhKShhLGIsYyk7ZC5fT3J0QmluZE91dHB1dD0oYSxiLGMsZik9PihkLl9PcnRCaW5kT3V0cHV0PUkuZWEpKGEsYixjLGYpO2QuX09ydENsZWFyQm91bmRPdXRwdXRzPWE9PihkLl9PcnRDbGVhckJvdW5kT3V0cHV0cz1JLmZhKShhKTtcbmQuX09ydFJlbGVhc2VCaW5kaW5nPWE9PihkLl9PcnRSZWxlYXNlQmluZGluZz1JLmdhKShhKTtkLl9PcnRSdW5XaXRoQmluZGluZz0oYSxiLGMsZixnKT0+KGQuX09ydFJ1bldpdGhCaW5kaW5nPUkuaGEpKGEsYixjLGYsZyk7ZC5fT3J0UnVuPShhLGIsYyxmLGcsaCxtLHEpPT4oZC5fT3J0UnVuPUkuaWEpKGEsYixjLGYsZyxoLG0scSk7ZC5fT3J0RW5kUHJvZmlsaW5nPWE9PihkLl9PcnRFbmRQcm9maWxpbmc9SS5qYSkoYSk7ZC5fT3J0VHJhaW5pbmdMb2FkQ2hlY2twb2ludD0oYSxiKT0+KGQuX09ydFRyYWluaW5nTG9hZENoZWNrcG9pbnQ9SS5rYSkoYSxiKTtkLl9PcnRUcmFpbmluZ1JlbGVhc2VDaGVja3BvaW50PWE9PihkLl9PcnRUcmFpbmluZ1JlbGVhc2VDaGVja3BvaW50PUkubGEpKGEpO2QuX09ydFRyYWluaW5nQ3JlYXRlU2Vzc2lvbj0oYSxiLGMsZixnLGgsbSxxKT0+KGQuX09ydFRyYWluaW5nQ3JlYXRlU2Vzc2lvbj1JLm1hKShhLGIsYyxmLGcsaCxtLHEpO1xuZC5fT3J0VHJhaW5pbmdMYXp5UmVzZXRHcmFkPWE9PihkLl9PcnRUcmFpbmluZ0xhenlSZXNldEdyYWQ9SS5uYSkoYSk7ZC5fT3J0VHJhaW5pbmdSdW5UcmFpblN0ZXA9KGEsYixjLGYsZyxoKT0+KGQuX09ydFRyYWluaW5nUnVuVHJhaW5TdGVwPUkub2EpKGEsYixjLGYsZyxoKTtkLl9PcnRUcmFpbmluZ09wdGltaXplclN0ZXA9KGEsYik9PihkLl9PcnRUcmFpbmluZ09wdGltaXplclN0ZXA9SS5wYSkoYSxiKTtkLl9PcnRUcmFpbmluZ0V2YWxTdGVwPShhLGIsYyxmLGcsaCk9PihkLl9PcnRUcmFpbmluZ0V2YWxTdGVwPUkucWEpKGEsYixjLGYsZyxoKTtkLl9PcnRUcmFpbmluZ0dldFBhcmFtZXRlcnNTaXplPShhLGIsYyk9PihkLl9PcnRUcmFpbmluZ0dldFBhcmFtZXRlcnNTaXplPUkucmEpKGEsYixjKTtkLl9PcnRUcmFpbmluZ0NvcHlQYXJhbWV0ZXJzVG9CdWZmZXI9KGEsYixjLGYpPT4oZC5fT3J0VHJhaW5pbmdDb3B5UGFyYW1ldGVyc1RvQnVmZmVyPUkuc2EpKGEsYixjLGYpO1xuZC5fT3J0VHJhaW5pbmdDb3B5UGFyYW1ldGVyc0Zyb21CdWZmZXI9KGEsYixjLGYpPT4oZC5fT3J0VHJhaW5pbmdDb3B5UGFyYW1ldGVyc0Zyb21CdWZmZXI9SS50YSkoYSxiLGMsZik7ZC5fT3J0VHJhaW5pbmdSZWxlYXNlU2Vzc2lvbj1hPT4oZC5fT3J0VHJhaW5pbmdSZWxlYXNlU2Vzc2lvbj1JLnVhKShhKTt2YXIgQWE9ZC5fbWFsbG9jPWE9PihBYT1kLl9tYWxsb2M9SS52YSkoYSk7ZC5fZnJlZT1hPT4oZC5fZnJlZT1JLndhKShhKTt2YXIgSWE9YT0+KElhPUkueWEpKGEpLExhPSgpPT4oTGE9SS56YSkoKSxNYT1hPT4oTWE9SS5BYSkoYSksTmE9YT0+KE5hPUkuQmEpKGEpO1xuZnVuY3Rpb24gS2EoYSl7YT1PYmplY3QuYXNzaWduKHt9LGEpO3ZhciBiPWY9PigpPT5mKCk+Pj4wLGM9Zj0+Zz0+ZihnKT4+PjA7YS5fX2Vycm5vX2xvY2F0aW9uPWIoYS5fX2Vycm5vX2xvY2F0aW9uKTthLm1hbGxvYz1jKGEubWFsbG9jKTthLnN0YWNrU2F2ZT1iKGEuc3RhY2tTYXZlKTthLnN0YWNrQWxsb2M9YyhhLnN0YWNrQWxsb2MpO3JldHVybiBhfWQuc3RhY2tBbGxvYz1OYTtkLnN0YWNrU2F2ZT1MYTtkLnN0YWNrUmVzdG9yZT1NYTtkLlVURjhUb1N0cmluZz1UO2Quc3RyaW5nVG9VVEY4PShhLGIsYyk9PlYoYSxLLGIsYyk7ZC5sZW5ndGhCeXRlc1VURjg9VTt2YXIgWjtQPWZ1bmN0aW9uIE9hKCl7Wnx8UGEoKTtafHwoUD1PYSl9O1xuZnVuY3Rpb24gUGEoKXtmdW5jdGlvbiBhKCl7aWYoIVomJihaPSEwLGQuY2FsbGVkUnVuPSEwLCFkYSkpe1MoaGEpO2soZCk7aWYoZC5vblJ1bnRpbWVJbml0aWFsaXplZClkLm9uUnVudGltZUluaXRpYWxpemVkKCk7aWYoZC5wb3N0UnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkLnBvc3RSdW4mJihkLnBvc3RSdW49W2QucG9zdFJ1bl0pO2QucG9zdFJ1bi5sZW5ndGg7KXt2YXIgYj1kLnBvc3RSdW4uc2hpZnQoKTtpYS51bnNoaWZ0KGIpfVMoaWEpfX1pZighKDA8Tikpe2lmKGQucHJlUnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkLnByZVJ1biYmKGQucHJlUnVuPVtkLnByZVJ1bl0pO2QucHJlUnVuLmxlbmd0aDspamEoKTtTKGZhKTswPE58fChkLnNldFN0YXR1cz8oZC5zZXRTdGF0dXMoXCJSdW5uaW5nLi4uXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5zZXRTdGF0dXMoXCJcIil9LDEpO2EoKX0sMSkpOmEoKSl9fVxuaWYoZC5wcmVJbml0KWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkLnByZUluaXQmJihkLnByZUluaXQ9W2QucHJlSW5pdF0pOzA8ZC5wcmVJbml0Lmxlbmd0aDspZC5wcmVJbml0LnBvcCgpKCk7UGEoKTtcblxuXG4gIHJldHVybiBtb2R1bGVBcmcucmVhZHlcbn1cblxuKTtcbn0pKCk7XG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuICBtb2R1bGUuZXhwb3J0cyA9IG9ydFdhc207XG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXG4gIGRlZmluZShbXSwgKCkgPT4gb3J0V2FzbSk7XG4iLCAiIiwgIiIsICJleHBvcnQgY29uc3QgY3B1cyA9IHVuZGVmaW5lZDsiLCAiXG52YXIgb3J0V2FzbVRocmVhZGVkID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSAndW5kZWZpbmVkJykgX3NjcmlwdERpciA9IF9zY3JpcHREaXIgfHwgX19maWxlbmFtZTtcbiAgcmV0dXJuIChcbmZ1bmN0aW9uKG1vZHVsZUFyZyA9IHt9KSB7XG5cbmZ1bmN0aW9uIGFhKCl7ZC5idWZmZXIhPWwuYnVmZmVyJiZtKCk7cmV0dXJuIGx9ZnVuY3Rpb24gbigpe2QuYnVmZmVyIT1sLmJ1ZmZlciYmbSgpO3JldHVybiBiYX1mdW5jdGlvbiBwKCl7ZC5idWZmZXIhPWwuYnVmZmVyJiZtKCk7cmV0dXJuIGNhfWZ1bmN0aW9uIHIoKXtkLmJ1ZmZlciE9bC5idWZmZXImJm0oKTtyZXR1cm4gZGF9ZnVuY3Rpb24gZWEoKXtkLmJ1ZmZlciE9bC5idWZmZXImJm0oKTtyZXR1cm4gZmF9dmFyIHc9bW9kdWxlQXJnLGhhLHg7dy5yZWFkeT1uZXcgUHJvbWlzZSgoYSxiKT0+e2hhPWE7eD1ifSk7XG52YXIgaWE9T2JqZWN0LmFzc2lnbih7fSx3KSxqYT1cIi4vdGhpcy5wcm9ncmFtXCIsej0oYSxiKT0+e3Rocm93IGI7fSxrYT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LEE9XCJmdW5jdGlvblwiPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxCPVwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmXCJzdHJpbmdcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSxEPXcuRU5WSVJPTk1FTlRfSVNfUFRIUkVBRHx8ITEsRT1cIlwiO2Z1bmN0aW9uIGxhKGEpe3JldHVybiB3LmxvY2F0ZUZpbGU/dy5sb2NhdGVGaWxlKGEsRSk6RSthfXZhciBtYSxGLEg7XG5pZihCKXt2YXIgZnM9cmVxdWlyZShcImZzXCIpLG5hPXJlcXVpcmUoXCJwYXRoXCIpO0U9QT9uYS5kaXJuYW1lKEUpK1wiL1wiOl9fZGlybmFtZStcIi9cIjttYT0oYixjKT0+e2I9Yi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9uZXcgVVJMKGIpOm5hLm5vcm1hbGl6ZShiKTtyZXR1cm4gZnMucmVhZEZpbGVTeW5jKGIsYz92b2lkIDA6XCJ1dGY4XCIpfTtIPWI9PntiPW1hKGIsITApO2IuYnVmZmVyfHwoYj1uZXcgVWludDhBcnJheShiKSk7cmV0dXJuIGJ9O0Y9KGIsYyxlLGg9ITApPT57Yj1iLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpP25ldyBVUkwoYik6bmEubm9ybWFsaXplKGIpO2ZzLnJlYWRGaWxlKGIsaD92b2lkIDA6XCJ1dGY4XCIsKGcsayk9PntnP2UoZyk6YyhoP2suYnVmZmVyOmspfSl9OyF3LnRoaXNQcm9ncmFtJiYxPHByb2Nlc3MuYXJndi5sZW5ndGgmJihqYT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFxcXC9nLFwiL1wiKSk7cHJvY2Vzcy5hcmd2LnNsaWNlKDIpO3o9KGIsYyk9Pntwcm9jZXNzLmV4aXRDb2RlPVxuYjt0aHJvdyBjO307dy5pbnNwZWN0PSgpPT5cIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdXCI7bGV0IGE7dHJ5e2E9cmVxdWlyZShcIndvcmtlcl90aHJlYWRzXCIpfWNhdGNoKGIpe3Rocm93IGNvbnNvbGUuZXJyb3IoJ1RoZSBcIndvcmtlcl90aHJlYWRzXCIgbW9kdWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBub2RlLmpzIGJ1aWxkIC0gcGVyaGFwcyBhIG5ld2VyIHZlcnNpb24gaXMgbmVlZGVkPycpLGI7fWdsb2JhbC5Xb3JrZXI9YS5Xb3JrZXJ9ZWxzZSBpZihrYXx8QSlBP0U9c2VsZi5sb2NhdGlvbi5ocmVmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKEU9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLCh0eXBlb2YgX3NjcmlwdERpciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfc2NyaXB0RGlyKSYmKEU9X3NjcmlwdERpciksMCE9PUUuaW5kZXhPZihcImJsb2I6XCIpP0U9RS5zdWJzdHIoMCxFLnJlcGxhY2UoL1s/I10uKi8sXCJcIikubGFzdEluZGV4T2YoXCIvXCIpKzEpOkU9XCJcIixCfHwobWE9YT0+e3ZhciBiPVxubmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2Iuc2VuZChudWxsKTtyZXR1cm4gYi5yZXNwb25zZVRleHR9LEEmJihIPWE9Pnt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO2Iuc2VuZChudWxsKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYi5yZXNwb25zZSl9KSxGPShhLGIsYyk9Pnt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5vcGVuKFwiR0VUXCIsYSwhMCk7ZS5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO2Uub25sb2FkPSgpPT57MjAwPT1lLnN0YXR1c3x8MD09ZS5zdGF0dXMmJmUucmVzcG9uc2U/YihlLnJlc3BvbnNlKTpjKCl9O2Uub25lcnJvcj1jO2Uuc2VuZChudWxsKX0pO0ImJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmKGdsb2JhbC5wZXJmb3JtYW5jZT1yZXF1aXJlKFwicGVyZl9ob29rc1wiKS5wZXJmb3JtYW5jZSk7XG52YXIgb2E9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxwYT1jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7QiYmKG9hPSguLi5hKT0+ZnMud3JpdGVTeW5jKDEsYS5qb2luKFwiIFwiKStcIlxcblwiKSxwYT0oLi4uYSk9PmZzLndyaXRlU3luYygyLGEuam9pbihcIiBcIikrXCJcXG5cIikpO3ZhciBxYT13LnByaW50fHxvYSxJPXcucHJpbnRFcnJ8fHBhO09iamVjdC5hc3NpZ24odyxpYSk7aWE9bnVsbDt3LnRoaXNQcm9ncmFtJiYoamE9dy50aGlzUHJvZ3JhbSk7dy5xdWl0JiYoej13LnF1aXQpO3ZhciBKO3cud2FzbUJpbmFyeSYmKEo9dy53YXNtQmluYXJ5KTt2YXIgbm9FeGl0UnVudGltZT13Lm5vRXhpdFJ1bnRpbWV8fCEwO1wib2JqZWN0XCIhPXR5cGVvZiBXZWJBc3NlbWJseSYmSyhcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIik7dmFyIGQsTCxyYSxNPSExLE4sbCxiYSxjYSxkYSxmYTtcbmZ1bmN0aW9uIG0oKXt2YXIgYT1kLmJ1ZmZlcjt3LkhFQVA4PWw9bmV3IEludDhBcnJheShhKTt3LkhFQVAxNj1uZXcgSW50MTZBcnJheShhKTt3LkhFQVAzMj1jYT1uZXcgSW50MzJBcnJheShhKTt3LkhFQVBVOD1iYT1uZXcgVWludDhBcnJheShhKTt3LkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGEpO3cuSEVBUFUzMj1kYT1uZXcgVWludDMyQXJyYXkoYSk7dy5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYSk7dy5IRUFQRjY0PWZhPW5ldyBGbG9hdDY0QXJyYXkoYSl9dmFyIE89dy5JTklUSUFMX01FTU9SWXx8MTY3NzcyMTY7NTI0Mjg4MDw9T3x8SyhcIklOSVRJQUxfTUVNT1JZIHNob3VsZCBiZSBsYXJnZXIgdGhhbiBTVEFDS19TSVpFLCB3YXMgXCIrTytcIiEgKFNUQUNLX1NJWkU9NTI0Mjg4MClcIik7XG5pZihEKWQ9dy53YXNtTWVtb3J5O2Vsc2UgaWYody53YXNtTWVtb3J5KWQ9dy53YXNtTWVtb3J5O2Vsc2UgaWYoZD1uZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOk8vNjU1MzYsbWF4aW11bTo2NTUzNixzaGFyZWQ6ITB9KSwhKGQuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpKXRocm93IEkoXCJyZXF1ZXN0ZWQgYSBzaGFyZWQgV2ViQXNzZW1ibHkuTWVtb3J5IGJ1dCB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIG5vdCBhIFNoYXJlZEFycmF5QnVmZmVyLCBpbmRpY2F0aW5nIHRoYXQgd2hpbGUgdGhlIGJyb3dzZXIgaGFzIFNoYXJlZEFycmF5QnVmZmVyIGl0IGRvZXMgbm90IGhhdmUgV2ViQXNzZW1ibHkgdGhyZWFkcyBzdXBwb3J0IC0geW91IG1heSBuZWVkIHRvIHNldCBhIGZsYWdcIiksQiYmSShcIihvbiBub2RlIHlvdSBtYXkgbmVlZDogLS1leHBlcmltZW50YWwtd2FzbS10aHJlYWRzIC0tZXhwZXJpbWVudGFsLXdhc20tYnVsay1tZW1vcnkgYW5kL29yIHJlY2VudCB2ZXJzaW9uKVwiKSxcbkVycm9yKFwiYmFkIG1lbW9yeVwiKTttKCk7Tz1kLmJ1ZmZlci5ieXRlTGVuZ3RoO3ZhciBzYSx0YT1bXSx1YT1bXSx2YT1bXSx3YT0wO2Z1bmN0aW9uIFAoKXtyZXR1cm4gbm9FeGl0UnVudGltZXx8MDx3YX12YXIgUT0wLHhhPW51bGwsUj1udWxsO2Z1bmN0aW9uIHlhKCl7USsrO3cubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFEpfWZ1bmN0aW9uIHphKCl7US0tO3cubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFEpO2lmKDA9PVEmJihudWxsIT09eGEmJihjbGVhckludGVydmFsKHhhKSx4YT1udWxsKSxSKSl7dmFyIGE9UjtSPW51bGw7YSgpfX1cbmZ1bmN0aW9uIEsoYSl7aWYody5vbkFib3J0KXcub25BYm9ydChhKTthPVwiQWJvcnRlZChcIithK1wiKVwiO0koYSk7TT0hMDtOPTE7YT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGErXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCIpO3goYSk7dGhyb3cgYTt9ZnVuY3Rpb24gQWEoYSl7cmV0dXJuIGEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIil9dmFyIFM7Uz1cIm9ydC13YXNtLXRocmVhZGVkLndhc21cIjtBYShTKXx8KFM9bGEoUykpO2Z1bmN0aW9uIEJhKGEpe2lmKGE9PVMmJkopcmV0dXJuIG5ldyBVaW50OEFycmF5KEopO2lmKEgpcmV0dXJuIEgoYSk7dGhyb3dcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7fVxuZnVuY3Rpb24gQ2EoYSl7aWYoIUomJihrYXx8QSkpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGZldGNoJiYhYS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSlyZXR1cm4gZmV0Y2goYSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihiPT57aWYoIWIub2spdGhyb3dcImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJ1wiK2ErXCInXCI7cmV0dXJuIGIuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKCgpPT5CYShhKSk7aWYoRilyZXR1cm4gbmV3IFByb21pc2UoKGIsYyk9PntGKGEsZT0+YihuZXcgVWludDhBcnJheShlKSksYyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QmEoYSkpfWZ1bmN0aW9uIERhKGEsYixjKXtyZXR1cm4gQ2EoYSkudGhlbihlPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShlLGIpKS50aGVuKGU9PmUpLnRoZW4oYyxlPT57SShcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK2UpO0soZSl9KX1cbmZ1bmN0aW9uIEVhKGEsYil7dmFyIGM9UztyZXR1cm4gSnx8XCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fEFhKGMpfHxjLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpfHxCfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBmZXRjaD9EYShjLGEsYik6ZmV0Y2goYyx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihlPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhlLGEpLnRoZW4oYixmdW5jdGlvbihoKXtJKFwid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6IFwiK2gpO0koXCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvblwiKTtyZXR1cm4gRGEoYyxhLGIpfSkpfXZhciBUO2Z1bmN0aW9uIFUoYSl7dGhpcy5uYW1lPVwiRXhpdFN0YXR1c1wiO3RoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2F9KWA7dGhpcy5zdGF0dXM9YX1cbmZ1bmN0aW9uIEZhKGEpe2EudGVybWluYXRlKCk7YS5vbm1lc3NhZ2U9KCk9Pnt9fWZ1bmN0aW9uIEdhKGEpeyhhPVYuTGFbYV0pfHxLKCk7Vi5sYihhKX1mdW5jdGlvbiBIYShhKXt2YXIgYj1WLmZiKCk7aWYoIWIpcmV0dXJuIDY7Vi5PYS5wdXNoKGIpO1YuTGFbYS5OYV09YjtiLk5hPWEuTmE7dmFyIGM9e2NtZDpcInJ1blwiLHN0YXJ0X3JvdXRpbmU6YS5tYixhcmc6YS5lYixwdGhyZWFkX3B0cjphLk5hfTtCJiZiLnVucmVmKCk7Yi5wb3N0TWVzc2FnZShjLGEuc2IpO3JldHVybiAwfVxudmFyIElhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpOnZvaWQgMCxKYT0oYSxiLGMpPT57Yj4+Pj0wO3ZhciBlPWIrYztmb3IoYz1iO2FbY10mJiEoYz49ZSk7KSsrYztpZigxNjxjLWImJmEuYnVmZmVyJiZJYSlyZXR1cm4gSWEuZGVjb2RlKGEuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/YS5zbGljZShiLGMpOmEuc3ViYXJyYXkoYixjKSk7Zm9yKGU9XCJcIjtiPGM7KXt2YXIgaD1hW2IrK107aWYoaCYxMjgpe3ZhciBnPWFbYisrXSY2MztpZigxOTI9PShoJjIyNCkpZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoaCYzMSk8PDZ8Zyk7ZWxzZXt2YXIgaz1hW2IrK10mNjM7aD0yMjQ9PShoJjI0MCk/KGgmMTUpPDwxMnxnPDw2fGs6KGgmNyk8PDE4fGc8PDEyfGs8PDZ8YVtiKytdJjYzOzY1NTM2Pmg/ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShoKTooaC09NjU1MzYsZSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxoPj5cbjEwLDU2MzIwfGgmMTAyMykpfX1lbHNlIGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoaCl9cmV0dXJuIGV9LEthPShhLGIpPT4oYT4+Pj0wKT9KYShuKCksYSxiKTpcIlwiO2Z1bmN0aW9uIExhKGEpe2lmKEQpcmV0dXJuIFcoMSwxLGEpO049YTtpZighUCgpKXtWLm5iKCk7aWYody5vbkV4aXQpdy5vbkV4aXQoYSk7TT0hMH16KGEsbmV3IFUoYSkpfVxudmFyIE5hPWE9PntOPWE7aWYoRCl0aHJvdyBNYShhKSxcInVud2luZFwiO0xhKGEpfSxWPXtSYTpbXSxPYTpbXSxaYTpbXSxMYTp7fSxWYTpmdW5jdGlvbigpe0Q/Vi5oYigpOlYuZ2IoKX0sZ2I6ZnVuY3Rpb24oKXt0YS51bnNoaWZ0KCgpPT57eWEoKTtWLmliKCgpPT56YSgpKX0pfSxoYjpmdW5jdGlvbigpe1YucmVjZWl2ZU9iamVjdFRyYW5zZmVyPVYua2I7Vi50aHJlYWRJbml0VExTPVYuWWE7Vi5zZXRFeGl0U3RhdHVzPVYuWGE7bm9FeGl0UnVudGltZT0hMX0sWGE6ZnVuY3Rpb24oYSl7Tj1hfSx4YjpbXCIkdGVybWluYXRlV29ya2VyXCJdLG5iOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIG9mIFYuT2EpRmEoYSk7Zm9yKGEgb2YgVi5SYSlGYShhKTtWLlJhPVtdO1YuT2E9W107Vi5MYT1bXX0sbGI6ZnVuY3Rpb24oYSl7dmFyIGI9YS5OYTtkZWxldGUgVi5MYVtiXTtWLlJhLnB1c2goYSk7Vi5PYS5zcGxpY2UoVi5PYS5pbmRleE9mKGEpLDEpO2EuTmE9MDtPYShiKX0sa2I6ZnVuY3Rpb24oKXt9LFxuWWE6ZnVuY3Rpb24oKXtWLlphLmZvckVhY2goYT0+YSgpKX0samI6YT0+bmV3IFByb21pc2UoYj0+e2Eub25tZXNzYWdlPWc9PntnPWcuZGF0YTt2YXIgaz1nLmNtZDtpZihnLnRhcmdldFRocmVhZCYmZy50YXJnZXRUaHJlYWQhPVgoKSl7dmFyIHQ9Vi5MYVtnLndiXTt0P3QucG9zdE1lc3NhZ2UoZyxnLnRyYW5zZmVyTGlzdCk6SSgnSW50ZXJuYWwgZXJyb3IhIFdvcmtlciBzZW50IGEgbWVzc2FnZSBcIicraysnXCIgdG8gdGFyZ2V0IHB0aHJlYWQgJytnLnRhcmdldFRocmVhZCtcIiwgYnV0IHRoYXQgdGhyZWFkIG5vIGxvbmdlciBleGlzdHMhXCIpfWVsc2UgaWYoXCJjaGVja01haWxib3hcIj09PWspWSgpO2Vsc2UgaWYoXCJzcGF3blRocmVhZFwiPT09aylIYShnKTtlbHNlIGlmKFwiY2xlYW51cFRocmVhZFwiPT09aylHYShnLnRocmVhZCk7ZWxzZSBpZihcImtpbGxUaHJlYWRcIj09PWspZz1nLnRocmVhZCxrPVYuTGFbZ10sZGVsZXRlIFYuTGFbZ10sRmEoayksT2EoZyksVi5PYS5zcGxpY2UoVi5PYS5pbmRleE9mKGspLFxuMSksay5OYT0wO2Vsc2UgaWYoXCJjYW5jZWxUaHJlYWRcIj09PWspVi5MYVtnLnRocmVhZF0ucG9zdE1lc3NhZ2Uoe2NtZDpcImNhbmNlbFwifSk7ZWxzZSBpZihcImxvYWRlZFwiPT09aylhLmxvYWRlZD0hMCxiKGEpO2Vsc2UgaWYoXCJhbGVydFwiPT09aylhbGVydChcIlRocmVhZCBcIitnLnRocmVhZElkK1wiOiBcIitnLnRleHQpO2Vsc2UgaWYoXCJzZXRpbW1lZGlhdGVcIj09PWcudGFyZ2V0KWEucG9zdE1lc3NhZ2UoZyk7ZWxzZSBpZihcImNhbGxIYW5kbGVyXCI9PT1rKXdbZy5oYW5kbGVyXSguLi5nLmFyZ3MpO2Vsc2UgayYmSShcIndvcmtlciBzZW50IGFuIHVua25vd24gY29tbWFuZCBcIitrKX07YS5vbmVycm9yPWc9PntJKFwid29ya2VyIHNlbnQgYW4gZXJyb3IhIFwiK2cuZmlsZW5hbWUrXCI6XCIrZy5saW5lbm8rXCI6IFwiK2cubWVzc2FnZSk7dGhyb3cgZzt9O0ImJihhLm9uKFwibWVzc2FnZVwiLGZ1bmN0aW9uKGcpe2Eub25tZXNzYWdlKHtkYXRhOmd9KX0pLGEub24oXCJlcnJvclwiLGZ1bmN0aW9uKGcpe2Eub25lcnJvcihnKX0pKTtcbnZhciBjPVtdLGU9W1wib25FeGl0XCIsXCJvbkFib3J0XCIsXCJwcmludFwiLFwicHJpbnRFcnJcIl0saDtmb3IoaCBvZiBlKXcuaGFzT3duUHJvcGVydHkoaCkmJmMucHVzaChoKTthLnBvc3RNZXNzYWdlKHtjbWQ6XCJsb2FkXCIsaGFuZGxlcnM6Yyx1cmxPckJsb2I6dy5tYWluU2NyaXB0VXJsT3JCbG9ifHxfc2NyaXB0RGlyLHdhc21NZW1vcnk6ZCx3YXNtTW9kdWxlOnJhfSl9KSxpYjpmdW5jdGlvbihhKXthKCl9LGNiOmZ1bmN0aW9uKCl7dmFyIGE9bGEoXCJvcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanNcIik7YT1uZXcgV29ya2VyKGEpO1YuUmEucHVzaChhKX0sZmI6ZnVuY3Rpb24oKXswPT1WLlJhLmxlbmd0aCYmKFYuY2IoKSxWLmpiKFYuUmFbMF0pKTtyZXR1cm4gVi5SYS5wb3AoKX19O3cuUFRocmVhZD1WO3ZhciBQYT1hPT57Zm9yKDswPGEubGVuZ3RoOylhLnNoaWZ0KCkodyl9O1xudy5lc3RhYmxpc2hTdGFja1NwYWNlPWZ1bmN0aW9uKCl7dmFyIGE9WCgpLGI9cCgpW2ErNTI+PjI+Pj4wXTthPXAoKVthKzU2Pj4yPj4+MF07UWEoYixiLWEpO1JhKGIpfTtmdW5jdGlvbiBNYShhKXtpZihEKXJldHVybiBXKDIsMCxhKTtOYShhKX12YXIgU2E9W107dy5pbnZva2VFbnRyeVBvaW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9U2FbYV07Y3x8KGE+PVNhLmxlbmd0aCYmKFNhLmxlbmd0aD1hKzEpLFNhW2FdPWM9c2EuZ2V0KGEpKTthPWMoYik7UCgpP1YuWGEoYSk6VGEoYSl9O2Z1bmN0aW9uIFVhKGEpe3RoaXMuVWE9YS0yNDt0aGlzLmJiPWZ1bmN0aW9uKGIpe3IoKVt0aGlzLlVhKzQ+PjI+Pj4wXT1ifTt0aGlzLmFiPWZ1bmN0aW9uKGIpe3IoKVt0aGlzLlVhKzg+PjI+Pj4wXT1ifTt0aGlzLlZhPWZ1bmN0aW9uKGIsYyl7dGhpcy4kYSgpO3RoaXMuYmIoYik7dGhpcy5hYihjKX07dGhpcy4kYT1mdW5jdGlvbigpe3IoKVt0aGlzLlVhKzE2Pj4yPj4+MF09MH19XG52YXIgVmE9MCxXYT0wO2Z1bmN0aW9uIFhhKGEsYixjLGUpe3JldHVybiBEP1coMywxLGEsYixjLGUpOllhKGEsYixjLGUpfWZ1bmN0aW9uIFlhKGEsYixjLGUpe2E+Pj49MDtiPj4+PTA7Yz4+Pj0wO2U+Pj49MDtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIpcmV0dXJuIEkoXCJDdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgU2hhcmVkQXJyYXlCdWZmZXIsIHB0aHJlYWRzIGFyZSBub3QgYXZhaWxhYmxlIVwiKSw2O3ZhciBoPVtdO2lmKEQmJjA9PT1oLmxlbmd0aClyZXR1cm4gWGEoYSxiLGMsZSk7YT17bWI6YyxOYTphLGViOmUsc2I6aH07cmV0dXJuIEQ/KGEudWI9XCJzcGF3blRocmVhZFwiLHBvc3RNZXNzYWdlKGEsaCksMCk6SGEoYSl9ZnVuY3Rpb24gWmEoYSxiLGMpe3JldHVybiBEP1coNCwxLGEsYixjKTowfWZ1bmN0aW9uICRhKGEsYil7aWYoRClyZXR1cm4gVyg1LDEsYSxiKX1cbnZhciBhYj1hPT57Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZT1hLmNoYXJDb2RlQXQoYyk7MTI3Pj1lP2IrKzoyMDQ3Pj1lP2IrPTI6NTUyOTY8PWUmJjU3MzQzPj1lPyhiKz00LCsrYyk6Yis9M31yZXR1cm4gYn0sYmI9KGEsYixjLGUpPT57Yz4+Pj0wO2lmKCEoMDxlKSlyZXR1cm4gMDt2YXIgaD1jO2U9YytlLTE7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDsrK2cpe3ZhciBrPWEuY2hhckNvZGVBdChnKTtpZig1NTI5Njw9ayYmNTczNDM+PWspe3ZhciB0PWEuY2hhckNvZGVBdCgrK2cpO2s9NjU1MzYrKChrJjEwMjMpPDwxMCl8dCYxMDIzfWlmKDEyNz49ayl7aWYoYz49ZSlicmVhaztiW2MrKz4+PjBdPWt9ZWxzZXtpZigyMDQ3Pj1rKXtpZihjKzE+PWUpYnJlYWs7YltjKys+Pj4wXT0xOTJ8az4+Nn1lbHNle2lmKDY1NTM1Pj1rKXtpZihjKzI+PWUpYnJlYWs7YltjKys+Pj4wXT0yMjR8az4+MTJ9ZWxzZXtpZihjKzM+PWUpYnJlYWs7YltjKys+Pj4wXT0yNDB8az4+XG4xODtiW2MrKz4+PjBdPTEyOHxrPj4xMiY2M31iW2MrKz4+PjBdPTEyOHxrPj42JjYzfWJbYysrPj4+MF09MTI4fGsmNjN9fWJbYz4+PjBdPTA7cmV0dXJuIGMtaH0sY2I9KGEsYixjKT0+YmIoYSxuKCksYixjKTtmdW5jdGlvbiBkYihhLGIpe2lmKEQpcmV0dXJuIFcoNiwxLGEsYil9ZnVuY3Rpb24gZWIoYSxiLGMpe2lmKEQpcmV0dXJuIFcoNywxLGEsYixjKX1mdW5jdGlvbiBmYihhLGIsYyl7cmV0dXJuIEQ/Vyg4LDEsYSxiLGMpOjB9ZnVuY3Rpb24gZ2IoYSxiKXtpZihEKXJldHVybiBXKDksMSxhLGIpfWZ1bmN0aW9uIGhiKGEsYixjKXtpZihEKXJldHVybiBXKDEwLDEsYSxiLGMpfWZ1bmN0aW9uIGliKGEsYixjLGUpe2lmKEQpcmV0dXJuIFcoMTEsMSxhLGIsYyxlKX1mdW5jdGlvbiBqYihhLGIsYyxlKXtpZihEKXJldHVybiBXKDEyLDEsYSxiLGMsZSl9ZnVuY3Rpb24ga2IoYSxiLGMsZSl7aWYoRClyZXR1cm4gVygxMywxLGEsYixjLGUpfVxuZnVuY3Rpb24gbGIoYSl7aWYoRClyZXR1cm4gVygxNCwxLGEpfWZ1bmN0aW9uIG1iKGEsYil7aWYoRClyZXR1cm4gVygxNSwxLGEsYil9ZnVuY3Rpb24gbmIoYSxiLGMpe2lmKEQpcmV0dXJuIFcoMTYsMSxhLGIsYyl9dmFyIG9iPWE9PntpZighTSl0cnl7aWYoYSgpLCFQKCkpdHJ5e0Q/VGEoTik6TmEoTil9Y2F0Y2goYil7YiBpbnN0YW5jZW9mIFV8fFwidW53aW5kXCI9PWJ8fHooMSxiKX19Y2F0Y2goYil7YiBpbnN0YW5jZW9mIFV8fFwidW53aW5kXCI9PWJ8fHooMSxiKX19O2Z1bmN0aW9uIHBiKGEpe2E+Pj49MDtcImZ1bmN0aW9uXCI9PT10eXBlb2YgQXRvbWljcy50YiYmKEF0b21pY3MudGIocCgpLGE+PjIsYSkudmFsdWUudGhlbihZKSxhKz0xMjgsQXRvbWljcy5zdG9yZShwKCksYT4+MiwxKSl9dy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXQ9cGI7ZnVuY3Rpb24gWSgpe3ZhciBhPVgoKTthJiYocGIoYSksb2IoKCk9PnFiKCkpKX13LmNoZWNrTWFpbGJveD1ZO1xudmFyIFo9YT0+MD09PWElNCYmKDAhPT1hJTEwMHx8MD09PWElNDAwKSxyYj1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSxzYj1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XTtmdW5jdGlvbiB0YihhLGIsYyxlLGgsZyxrLHQpe3JldHVybiBEP1coMTcsMSxhLGIsYyxlLGgsZyxrLHQpOi01Mn1mdW5jdGlvbiB1YihhLGIsYyxlLGgsZyxrKXtpZihEKXJldHVybiBXKDE4LDEsYSxiLGMsZSxoLGcsayl9dmFyIHdiPWE9Pnt2YXIgYj1hYihhKSsxLGM9dmIoYik7YyYmY2IoYSxjLGIpO3JldHVybiBjfSx5Yj1hPT57dmFyIGI9eGIoKTthPWEoKTtSYShiKTtyZXR1cm4gYX07XG5mdW5jdGlvbiBXKGEsYil7dmFyIGM9YXJndW1lbnRzLmxlbmd0aC0yLGU9YXJndW1lbnRzO3JldHVybiB5YigoKT0+e2Zvcih2YXIgaD16Yig4KmMpLGc9aD4+MyxrPTA7azxjO2srKyl7dmFyIHQ9ZVsyK2tdO2VhKClbZytrPj4+MF09dH1yZXR1cm4gQWIoYSxjLGgsYil9KX1cbnZhciBCYj1bXSxDYj17fSxFYj0oKT0+e2lmKCFEYil7dmFyIGE9e1VTRVI6XCJ3ZWJfdXNlclwiLExPR05BTUU6XCJ3ZWJfdXNlclwiLFBBVEg6XCIvXCIsUFdEOlwiL1wiLEhPTUU6XCIvaG9tZS93ZWJfdXNlclwiLExBTkc6KFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fFwiQ1wiKS5yZXBsYWNlKFwiLVwiLFwiX1wiKStcIi5VVEYtOFwiLF86amF8fFwiLi90aGlzLnByb2dyYW1cIn0sYjtmb3IoYiBpbiBDYil2b2lkIDA9PT1DYltiXT9kZWxldGUgYVtiXTphW2JdPUNiW2JdO3ZhciBjPVtdO2ZvcihiIGluIGEpYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtEYj1jfXJldHVybiBEYn0sRGI7XG5mdW5jdGlvbiBGYihhLGIpe2lmKEQpcmV0dXJuIFcoMTksMSxhLGIpO2E+Pj49MDtiPj4+PTA7dmFyIGM9MDtFYigpLmZvckVhY2goZnVuY3Rpb24oZSxoKXt2YXIgZz1iK2M7aD1yKClbYSs0Kmg+PjI+Pj4wXT1nO2ZvcihnPTA7ZzxlLmxlbmd0aDsrK2cpYWEoKVtoKys+PjA+Pj4wXT1lLmNoYXJDb2RlQXQoZyk7YWEoKVtoPj4wPj4+MF09MDtjKz1lLmxlbmd0aCsxfSk7cmV0dXJuIDB9ZnVuY3Rpb24gR2IoYSxiKXtpZihEKXJldHVybiBXKDIwLDEsYSxiKTthPj4+PTA7Yj4+Pj0wO3ZhciBjPUViKCk7cigpW2E+PjI+Pj4wXT1jLmxlbmd0aDt2YXIgZT0wO2MuZm9yRWFjaChmdW5jdGlvbihoKXtlKz1oLmxlbmd0aCsxfSk7cigpW2I+PjI+Pj4wXT1lO3JldHVybiAwfWZ1bmN0aW9uIEhiKGEpe3JldHVybiBEP1coMjEsMSxhKTo1Mn1mdW5jdGlvbiBMYihhLGIsYyxlKXtyZXR1cm4gRD9XKDIyLDEsYSxiLGMsZSk6NTJ9XG5mdW5jdGlvbiBNYihhLGIsYyxlLGgpe3JldHVybiBEP1coMjMsMSxhLGIsYyxlLGgpOjcwfXZhciBOYj1bbnVsbCxbXSxbXV07ZnVuY3Rpb24gT2IoYSxiLGMsZSl7aWYoRClyZXR1cm4gVygyNCwxLGEsYixjLGUpO2I+Pj49MDtjPj4+PTA7ZT4+Pj0wO2Zvcih2YXIgaD0wLGc9MDtnPGM7ZysrKXt2YXIgaz1yKClbYj4+Mj4+PjBdLHQ9cigpW2IrND4+Mj4+PjBdO2IrPTg7Zm9yKHZhciBDPTA7Qzx0O0MrKyl7dmFyIHY9bigpW2srQz4+PjBdLHk9TmJbYV07MD09PXZ8fDEwPT09dj8oKDE9PT1hP3FhOkkpKEphKHksMCkpLHkubGVuZ3RoPTApOnkucHVzaCh2KX1oKz10fXIoKVtlPj4yPj4+MF09aDtyZXR1cm4gMH12YXIgUGI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxRYj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO2Z1bmN0aW9uIFJiKGEpe3ZhciBiPUFycmF5KGFiKGEpKzEpO2JiKGEsYiwwLGIubGVuZ3RoKTtyZXR1cm4gYn1cbnZhciBTYj0oYSxiKT0+e2FhKCkuc2V0KGEsYj4+PjApfTtcbmZ1bmN0aW9uIFRiKGEsYixjLGUpe2Z1bmN0aW9uIGgoZixxLHUpe2ZvcihmPVwibnVtYmVyXCI9PXR5cGVvZiBmP2YudG9TdHJpbmcoKTpmfHxcIlwiO2YubGVuZ3RoPHE7KWY9dVswXStmO3JldHVybiBmfWZ1bmN0aW9uIGcoZixxKXtyZXR1cm4gaChmLHEsXCIwXCIpfWZ1bmN0aW9uIGsoZixxKXtmdW5jdGlvbiB1KEliKXtyZXR1cm4gMD5JYj8tMTowPEliPzE6MH12YXIgRzswPT09KEc9dShmLmdldEZ1bGxZZWFyKCktcS5nZXRGdWxsWWVhcigpKSkmJjA9PT0oRz11KGYuZ2V0TW9udGgoKS1xLmdldE1vbnRoKCkpKSYmKEc9dShmLmdldERhdGUoKS1xLmdldERhdGUoKSkpO3JldHVybiBHfWZ1bmN0aW9uIHQoZil7c3dpdGNoKGYuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gZjtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLFxuMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKGYuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLTEsMTEsMzEpO2Nhc2UgNjpyZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBDKGYpe3ZhciBxPWYuUGE7Zm9yKGY9bmV3IERhdGUoKG5ldyBEYXRlKGYuUWErMTkwMCwwLDEpKS5nZXRUaW1lKCkpOzA8cTspe3ZhciB1PWYuZ2V0TW9udGgoKSxHPShaKGYuZ2V0RnVsbFllYXIoKSk/UGI6UWIpW3VdO2lmKHE+Ry1mLmdldERhdGUoKSlxLT1HLWYuZ2V0RGF0ZSgpKzEsZi5zZXREYXRlKDEpLDExPnU/Zi5zZXRNb250aCh1KzEpOihmLnNldE1vbnRoKDApLGYuc2V0RnVsbFllYXIoZi5nZXRGdWxsWWVhcigpKzEpKTtlbHNle2Yuc2V0RGF0ZShmLmdldERhdGUoKStxKTticmVha319dT1uZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCkrMSwwLDQpO3E9dChuZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCksXG4wLDQpKTt1PXQodSk7cmV0dXJuIDA+PWsocSxmKT8wPj1rKHUsZik/Zi5nZXRGdWxsWWVhcigpKzE6Zi5nZXRGdWxsWWVhcigpOmYuZ2V0RnVsbFllYXIoKS0xfWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO2U+Pj49MDt2YXIgdj1wKClbZSs0MD4+Mj4+PjBdO2U9e3FiOnAoKVtlPj4yPj4+MF0scGI6cCgpW2UrND4+Mj4+PjBdLFNhOnAoKVtlKzg+PjI+Pj4wXSxXYTpwKClbZSsxMj4+Mj4+PjBdLFRhOnAoKVtlKzE2Pj4yPj4+MF0sUWE6cCgpW2UrMjA+PjI+Pj4wXSxNYTpwKClbZSsyND4+Mj4+PjBdLFBhOnAoKVtlKzI4Pj4yPj4+MF0seWI6cCgpW2UrMzI+PjI+Pj4wXSxvYjpwKClbZSszNj4+Mj4+PjBdLHJiOnY/S2Eodik6XCJcIn07Yz1LYShjKTt2PXtcIiVjXCI6XCIlYSAlYiAlZCAlSDolTTolUyAlWVwiLFwiJURcIjpcIiVtLyVkLyV5XCIsXCIlRlwiOlwiJVktJW0tJWRcIixcIiVoXCI6XCIlYlwiLFwiJXJcIjpcIiVJOiVNOiVTICVwXCIsXCIlUlwiOlwiJUg6JU1cIixcIiVUXCI6XCIlSDolTTolU1wiLFwiJXhcIjpcIiVtLyVkLyV5XCIsXG5cIiVYXCI6XCIlSDolTTolU1wiLFwiJUVjXCI6XCIlY1wiLFwiJUVDXCI6XCIlQ1wiLFwiJUV4XCI6XCIlbS8lZC8leVwiLFwiJUVYXCI6XCIlSDolTTolU1wiLFwiJUV5XCI6XCIleVwiLFwiJUVZXCI6XCIlWVwiLFwiJU9kXCI6XCIlZFwiLFwiJU9lXCI6XCIlZVwiLFwiJU9IXCI6XCIlSFwiLFwiJU9JXCI6XCIlSVwiLFwiJU9tXCI6XCIlbVwiLFwiJU9NXCI6XCIlTVwiLFwiJU9TXCI6XCIlU1wiLFwiJU91XCI6XCIldVwiLFwiJU9VXCI6XCIlVVwiLFwiJU9WXCI6XCIlVlwiLFwiJU93XCI6XCIld1wiLFwiJU9XXCI6XCIlV1wiLFwiJU95XCI6XCIleVwifTtmb3IodmFyIHkgaW4gdiljPWMucmVwbGFjZShuZXcgUmVnRXhwKHksXCJnXCIpLHZbeV0pO3ZhciBKYj1cIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLEtiPVwiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlclwiLnNwbGl0KFwiIFwiKTt2PXtcIiVhXCI6Zj0+SmJbZi5NYV0uc3Vic3RyaW5nKDAsMyksXG5cIiVBXCI6Zj0+SmJbZi5NYV0sXCIlYlwiOmY9PktiW2YuVGFdLnN1YnN0cmluZygwLDMpLFwiJUJcIjpmPT5LYltmLlRhXSxcIiVDXCI6Zj0+ZygoZi5RYSsxOTAwKS8xMDB8MCwyKSxcIiVkXCI6Zj0+ZyhmLldhLDIpLFwiJWVcIjpmPT5oKGYuV2EsMixcIiBcIiksXCIlZ1wiOmY9PkMoZikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXCIlR1wiOmY9PkMoZiksXCIlSFwiOmY9PmcoZi5TYSwyKSxcIiVJXCI6Zj0+e2Y9Zi5TYTswPT1mP2Y9MTI6MTI8ZiYmKGYtPTEyKTtyZXR1cm4gZyhmLDIpfSxcIiVqXCI6Zj0+e2Zvcih2YXIgcT0wLHU9MDt1PD1mLlRhLTE7cSs9KFooZi5RYSsxOTAwKT9QYjpRYilbdSsrXSk7cmV0dXJuIGcoZi5XYStxLDMpfSxcIiVtXCI6Zj0+ZyhmLlRhKzEsMiksXCIlTVwiOmY9PmcoZi5wYiwyKSxcIiVuXCI6KCk9PlwiXFxuXCIsXCIlcFwiOmY9PjA8PWYuU2EmJjEyPmYuU2E/XCJBTVwiOlwiUE1cIixcIiVTXCI6Zj0+ZyhmLnFiLDIpLFwiJXRcIjooKT0+XCJcXHRcIixcIiV1XCI6Zj0+Zi5NYXx8NyxcIiVVXCI6Zj0+ZyhNYXRoLmZsb29yKChmLlBhK1xuNy1mLk1hKS83KSwyKSxcIiVWXCI6Zj0+e3ZhciBxPU1hdGguZmxvb3IoKGYuUGErNy0oZi5NYSs2KSU3KS83KTsyPj0oZi5NYSszNzEtZi5QYS0yKSU3JiZxKys7aWYocSk1Mz09cSYmKHU9KGYuTWErMzcxLWYuUGEpJTcsND09dXx8Mz09dSYmWihmLlFhKXx8KHE9MSkpO2Vsc2V7cT01Mjt2YXIgdT0oZi5NYSs3LWYuUGEtMSklNzsoND09dXx8NT09dSYmWihmLlFhJTQwMC0xKSkmJnErK31yZXR1cm4gZyhxLDIpfSxcIiV3XCI6Zj0+Zi5NYSxcIiVXXCI6Zj0+ZyhNYXRoLmZsb29yKChmLlBhKzctKGYuTWErNiklNykvNyksMiksXCIleVwiOmY9PihmLlFhKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJVlcIjpmPT5mLlFhKzE5MDAsXCIlelwiOmY9PntmPWYub2I7dmFyIHE9MDw9ZjtmPU1hdGguYWJzKGYpLzYwO3JldHVybihxP1wiK1wiOlwiLVwiKStTdHJpbmcoXCIwMDAwXCIrKGYvNjAqMTAwK2YlNjApKS5zbGljZSgtNCl9LFwiJVpcIjpmPT5mLnJiLFwiJSVcIjooKT0+XCIlXCJ9O2M9Yy5yZXBsYWNlKC8lJS9nLFxuXCJcXHgwMFxceDAwXCIpO2Zvcih5IGluIHYpYy5pbmNsdWRlcyh5KSYmKGM9Yy5yZXBsYWNlKG5ldyBSZWdFeHAoeSxcImdcIiksdlt5XShlKSkpO2M9Yy5yZXBsYWNlKC9cXDBcXDAvZyxcIiVcIik7eT1SYihjKTtpZih5Lmxlbmd0aD5iKXJldHVybiAwO1NiKHksYSk7cmV0dXJuIHkubGVuZ3RoLTF9Vi5WYSgpO1xudmFyIFViPVtudWxsLExhLE1hLFhhLFphLCRhLGRiLGViLGZiLGdiLGhiLGliLGpiLGtiLGxiLG1iLG5iLHRiLHViLEZiLEdiLEhiLExiLE1iLE9iXSxYYj17YjpmdW5jdGlvbihhLGIsYyl7YT4+Pj0wOyhuZXcgVWEoYSkpLlZhKGI+Pj4wLGM+Pj4wKTtWYT1hO1dhKys7dGhyb3cgVmE7fSxOOmZ1bmN0aW9uKGEpe1ZiKGE+Pj4wLCFBLDEsIWthLDEzMTA3MiwhMSk7Vi5ZYSgpfSxqOmZ1bmN0aW9uKGEpe2E+Pj49MDtEP3Bvc3RNZXNzYWdlKHtjbWQ6XCJjbGVhbnVwVGhyZWFkXCIsdGhyZWFkOmF9KTpHYShhKX0sSTpZYSxoOlphLFQ6JGEsRDpkYixGOmViLFU6ZmIsUjpnYixKOmhiLFE6aWIsbjpqYixFOmtiLEI6bGIsUzptYixDOm5iLHE6KCk9PiEwLHo6ZnVuY3Rpb24oYSxiKXthPj4+PTA7YT09Yj4+PjA/c2V0VGltZW91dCgoKT0+WSgpKTpEP3Bvc3RNZXNzYWdlKHt0YXJnZXRUaHJlYWQ6YSxjbWQ6XCJjaGVja01haWxib3hcIn0pOihhPVYuTGFbYV0pJiZhLnBvc3RNZXNzYWdlKHtjbWQ6XCJjaGVja01haWxib3hcIn0pfSxcbkw6ZnVuY3Rpb24oKXtyZXR1cm4tMX0sTTpwYixwOmZ1bmN0aW9uKGEpe0ImJlYuTGFbYT4+PjBdLnJlZigpfSx0OmZ1bmN0aW9uKGEsYixjKXthPWIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWE/KGE+Pj4wKSs0Mjk0OTY3Mjk2KmI6TmFOO2M+Pj49MDthPW5ldyBEYXRlKDFFMyphKTtwKClbYz4+Mj4+PjBdPWEuZ2V0VVRDU2Vjb25kcygpO3AoKVtjKzQ+PjI+Pj4wXT1hLmdldFVUQ01pbnV0ZXMoKTtwKClbYys4Pj4yPj4+MF09YS5nZXRVVENIb3VycygpO3AoKVtjKzEyPj4yPj4+MF09YS5nZXRVVENEYXRlKCk7cCgpW2MrMTY+PjI+Pj4wXT1hLmdldFVUQ01vbnRoKCk7cCgpW2MrMjA+PjI+Pj4wXT1hLmdldFVUQ0Z1bGxZZWFyKCktMTkwMDtwKClbYysyND4+Mj4+PjBdPWEuZ2V0VVRDRGF5KCk7YT0oYS5nZXRUaW1lKCktRGF0ZS5VVEMoYS5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSkvODY0RTV8MDtwKClbYysyOD4+Mj4+PjBdPWF9LHU6ZnVuY3Rpb24oYSxiLGMpe2E9YitcbjIwOTcxNTI+Pj4wPDQxOTQzMDUtISFhPyhhPj4+MCkrNDI5NDk2NzI5NipiOk5hTjtjPj4+PTA7YT1uZXcgRGF0ZSgxRTMqYSk7cCgpW2M+PjI+Pj4wXT1hLmdldFNlY29uZHMoKTtwKClbYys0Pj4yPj4+MF09YS5nZXRNaW51dGVzKCk7cCgpW2MrOD4+Mj4+PjBdPWEuZ2V0SG91cnMoKTtwKClbYysxMj4+Mj4+PjBdPWEuZ2V0RGF0ZSgpO3AoKVtjKzE2Pj4yPj4+MF09YS5nZXRNb250aCgpO3AoKVtjKzIwPj4yPj4+MF09YS5nZXRGdWxsWWVhcigpLTE5MDA7cCgpW2MrMjQ+PjI+Pj4wXT1hLmdldERheSgpO2I9KFooYS5nZXRGdWxsWWVhcigpKT9yYjpzYilbYS5nZXRNb250aCgpXSthLmdldERhdGUoKS0xfDA7cCgpW2MrMjg+PjI+Pj4wXT1iO3AoKVtjKzM2Pj4yPj4+MF09LSg2MCphLmdldFRpbWV6b25lT2Zmc2V0KCkpO2I9KG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSw2LDEpKS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBlPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksMCwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbmE9KGIhPWUmJmEuZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4oZSxiKSl8MDtwKClbYyszMj4+Mj4+PjBdPWF9LHY6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPW5ldyBEYXRlKHAoKVthKzIwPj4yPj4+MF0rMTkwMCxwKClbYSsxNj4+Mj4+PjBdLHAoKVthKzEyPj4yPj4+MF0scCgpW2ErOD4+Mj4+PjBdLHAoKVthKzQ+PjI+Pj4wXSxwKClbYT4+Mj4+PjBdLDApLGM9cCgpW2ErMzI+PjI+Pj4wXSxlPWIuZ2V0VGltZXpvbmVPZmZzZXQoKSxoPShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxnPShuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksMCwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxrPU1hdGgubWluKGcsaCk7MD5jP3AoKVthKzMyPj4yPj4+MF09TnVtYmVyKGghPWcmJms9PWUpOjA8YyE9KGs9PWUpJiYoaD1NYXRoLm1heChnLGgpLGIuc2V0VGltZShiLmdldFRpbWUoKSs2RTQqKCgwPGM/azpoKS1lKSkpO3AoKVthKzI0Pj4yPj4+XG4wXT1iLmdldERheSgpO2M9KFooYi5nZXRGdWxsWWVhcigpKT9yYjpzYilbYi5nZXRNb250aCgpXStiLmdldERhdGUoKS0xfDA7cCgpW2ErMjg+PjI+Pj4wXT1jO3AoKVthPj4yPj4+MF09Yi5nZXRTZWNvbmRzKCk7cCgpW2ErND4+Mj4+PjBdPWIuZ2V0TWludXRlcygpO3AoKVthKzg+PjI+Pj4wXT1iLmdldEhvdXJzKCk7cCgpW2ErMTI+PjI+Pj4wXT1iLmdldERhdGUoKTtwKClbYSsxNj4+Mj4+PjBdPWIuZ2V0TW9udGgoKTtwKClbYSsyMD4+Mj4+PjBdPWIuZ2V0WWVhcigpO2E9Yi5nZXRUaW1lKCkvMUUzO3JldHVybiBXYigoVD1hLDE8PStNYXRoLmFicyhUKT8wPFQ/K01hdGguZmxvb3IoVC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChULSsofn5UPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKSksYT4+PjB9LHI6dGIsczp1Yix5OmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBlKHYpe3JldHVybih2PXYudG9UaW1lU3RyaW5nKCkubWF0Y2goL1xcKChbQS1aYS16IF0rKVxcKSQvKSk/XG52WzFdOlwiR01UXCJ9YT4+Pj0wO2I+Pj49MDtjPj4+PTA7dmFyIGg9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGc9bmV3IERhdGUoaCwwLDEpLGs9bmV3IERhdGUoaCw2LDEpO2g9Zy5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciB0PWsuZ2V0VGltZXpvbmVPZmZzZXQoKSxDPU1hdGgubWF4KGgsdCk7cigpW2E+PjI+Pj4wXT02MCpDO3AoKVtiPj4yPj4+MF09TnVtYmVyKGghPXQpO2E9ZShnKTtiPWUoayk7YT13YihhKTtiPXdiKGIpO3Q8aD8ocigpW2M+PjI+Pj4wXT1hLHIoKVtjKzQ+PjI+Pj4wXT1iKToocigpW2M+PjI+Pj4wXT1iLHIoKVtjKzQ+PjI+Pj4wXT1hKX0sYzooKT0+e0soXCJcIil9LGs6ZnVuY3Rpb24oKXt9LGk6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sbzooKT0+e3dhKz0xO3Rocm93XCJ1bndpbmRcIjt9LEE6ZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDkwMTc2MH0sZTooKT0+cGVyZm9ybWFuY2UudGltZU9yaWdpbitwZXJmb3JtYW5jZS5ub3coKSxmOmZ1bmN0aW9uKCl7cmV0dXJuIEI/XG5yZXF1aXJlKFwib3NcIikuY3B1cygpLmxlbmd0aDpuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeX0sSzpmdW5jdGlvbihhLGIsYyxlKXtWLnZiPWI+Pj4wO0JiLmxlbmd0aD1jO2I9ZT4+PjA+PjM7Zm9yKGU9MDtlPGM7ZSsrKUJiW2VdPWVhKClbYitlPj4+MF07cmV0dXJuIFViW2FdLmFwcGx5KG51bGwsQmIpfSx4OmZ1bmN0aW9uKGEpe2E+Pj49MDt2YXIgYj1uKCkubGVuZ3RoO2lmKGE8PWJ8fDQyOTQ5MDE3NjA8YSlyZXR1cm4hMTtmb3IodmFyIGM9MTs0Pj1jO2MqPTIpe3ZhciBlPWIqKDErLjIvYyk7ZT1NYXRoLm1pbihlLGErMTAwNjYzMjk2KTt2YXIgaD1NYXRoO2U9TWF0aC5tYXgoYSxlKTthOntoPWgubWluLmNhbGwoaCw0Mjk0OTAxNzYwLGUrKDY1NTM2LWUlNjU1MzYpJTY1NTM2KS1kLmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTY7dHJ5e2QuZ3JvdyhoKTttKCk7dmFyIGc9MTticmVhayBhfWNhdGNoKGspe31nPXZvaWQgMH1pZihnKXJldHVybiEwfXJldHVybiExfSxcbk86RmIsUDpHYixIOk5hLGc6SGIsbTpMYix3Ok1iLGw6T2IsYTpkfHx3Lndhc21NZW1vcnksRzpUYixkOmZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBUYihhPj4+MCxiPj4+MCxjPj4+MCxlPj4+MCl9fTsoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsZSl7Yz1jLmV4cG9ydHM7TD1jPVliKGMpO1YuWmEucHVzaChMLnlhKTtzYT1MLnphO3VhLnVuc2hpZnQoTC5WKTtyYT1lO3phKCk7cmV0dXJuIGN9dmFyIGI9e2E6WGJ9O3lhKCk7aWYody5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiB3Lmluc3RhbnRpYXRlV2FzbShiLGEpfWNhdGNoKGMpe0koXCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiBcIitjKSx4KGMpfUVhKGIsZnVuY3Rpb24oYyl7YShjLmluc3RhbmNlLGMubW9kdWxlKX0pLmNhdGNoKHgpO3JldHVybnt9fSkoKTt3Ll9PcnRJbml0PShhLGIpPT4ody5fT3J0SW5pdD1MLlcpKGEsYik7XG53Ll9PcnRHZXRMYXN0RXJyb3I9KGEsYik9Pih3Ll9PcnRHZXRMYXN0RXJyb3I9TC5YKShhLGIpO3cuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPShhLGIsYyxlLGgsZyxrLHQsQyx2KT0+KHcuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPUwuWSkoYSxiLGMsZSxoLGcsayx0LEMsdik7dy5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9KGEsYik9Pih3Ll9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj1MLlopKGEsYik7dy5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlPShhLGIsYyk9Pih3Ll9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9TC5fKShhLGIsYyk7dy5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PShhLGIsYyk9Pih3Ll9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9TC4kKShhLGIsYyk7dy5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPWE9Pih3Ll9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9TC5hYSkoYSk7XG53Ll9PcnRDcmVhdGVTZXNzaW9uPShhLGIsYyk9Pih3Ll9PcnRDcmVhdGVTZXNzaW9uPUwuYmEpKGEsYixjKTt3Ll9PcnRSZWxlYXNlU2Vzc2lvbj1hPT4ody5fT3J0UmVsZWFzZVNlc3Npb249TC5jYSkoYSk7dy5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD0oYSxiLGMpPT4ody5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD1MLmRhKShhLGIsYyk7dy5fT3J0R2V0SW5wdXROYW1lPShhLGIpPT4ody5fT3J0R2V0SW5wdXROYW1lPUwuZWEpKGEsYik7dy5fT3J0R2V0T3V0cHV0TmFtZT0oYSxiKT0+KHcuX09ydEdldE91dHB1dE5hbWU9TC5mYSkoYSxiKTt3Ll9PcnRGcmVlPWE9Pih3Ll9PcnRGcmVlPUwuZ2EpKGEpO3cuX09ydENyZWF0ZVRlbnNvcj0oYSxiLGMsZSxoLGcpPT4ody5fT3J0Q3JlYXRlVGVuc29yPUwuaGEpKGEsYixjLGUsaCxnKTt3Ll9PcnRHZXRUZW5zb3JEYXRhPShhLGIsYyxlLGgpPT4ody5fT3J0R2V0VGVuc29yRGF0YT1MLmlhKShhLGIsYyxlLGgpO1xudy5fT3J0UmVsZWFzZVRlbnNvcj1hPT4ody5fT3J0UmVsZWFzZVRlbnNvcj1MLmphKShhKTt3Ll9PcnRDcmVhdGVSdW5PcHRpb25zPShhLGIsYyxlKT0+KHcuX09ydENyZWF0ZVJ1bk9wdGlvbnM9TC5rYSkoYSxiLGMsZSk7dy5fT3J0QWRkUnVuQ29uZmlnRW50cnk9KGEsYixjKT0+KHcuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PUwubGEpKGEsYixjKTt3Ll9PcnRSZWxlYXNlUnVuT3B0aW9ucz1hPT4ody5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9TC5tYSkoYSk7dy5fT3J0Q3JlYXRlQmluZGluZz1hPT4ody5fT3J0Q3JlYXRlQmluZGluZz1MLm5hKShhKTt3Ll9PcnRCaW5kSW5wdXQ9KGEsYixjKT0+KHcuX09ydEJpbmRJbnB1dD1MLm9hKShhLGIsYyk7dy5fT3J0QmluZE91dHB1dD0oYSxiLGMsZSk9Pih3Ll9PcnRCaW5kT3V0cHV0PUwucGEpKGEsYixjLGUpO3cuX09ydENsZWFyQm91bmRPdXRwdXRzPWE9Pih3Ll9PcnRDbGVhckJvdW5kT3V0cHV0cz1MLnFhKShhKTtcbncuX09ydFJlbGVhc2VCaW5kaW5nPWE9Pih3Ll9PcnRSZWxlYXNlQmluZGluZz1MLnJhKShhKTt3Ll9PcnRSdW5XaXRoQmluZGluZz0oYSxiLGMsZSxoKT0+KHcuX09ydFJ1bldpdGhCaW5kaW5nPUwuc2EpKGEsYixjLGUsaCk7dy5fT3J0UnVuPShhLGIsYyxlLGgsZyxrLHQpPT4ody5fT3J0UnVuPUwudGEpKGEsYixjLGUsaCxnLGssdCk7dy5fT3J0RW5kUHJvZmlsaW5nPWE9Pih3Ll9PcnRFbmRQcm9maWxpbmc9TC51YSkoYSk7dmFyIFg9dy5fcHRocmVhZF9zZWxmPSgpPT4oWD13Ll9wdGhyZWFkX3NlbGY9TC52YSkoKSx2Yj13Ll9tYWxsb2M9YT0+KHZiPXcuX21hbGxvYz1MLndhKShhKTt3Ll9mcmVlPWE9Pih3Ll9mcmVlPUwueGEpKGEpO3cuX19lbXNjcmlwdGVuX3Rsc19pbml0PSgpPT4ody5fX2Vtc2NyaXB0ZW5fdGxzX2luaXQ9TC55YSkoKTtcbnZhciBWYj13Ll9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdD0oYSxiLGMsZSxoLGcpPT4oVmI9dy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXQ9TC5BYSkoYSxiLGMsZSxoLGcpO3cuX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkPSgpPT4ody5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWQ9TC5CYSkoKTt2YXIgQWI9KGEsYixjLGUpPT4oQWI9TC5DYSkoYSxiLGMsZSksT2E9YT0+KE9hPUwuRGEpKGEpLFRhPXcuX19lbXNjcmlwdGVuX3RocmVhZF9leGl0PWE9PihUYT13Ll9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdD1MLkVhKShhKSxxYj13Ll9fZW1zY3JpcHRlbl9jaGVja19tYWlsYm94PSgpPT4ocWI9dy5fX2Vtc2NyaXB0ZW5fY2hlY2tfbWFpbGJveD1MLkZhKSgpLFdiPWE9PihXYj1MLkdhKShhKSxRYT0oYSxiKT0+KFFhPUwuSGEpKGEsYikseGI9KCk9Pih4Yj1MLklhKSgpLFJhPWE9PihSYT1MLkphKShhKSx6Yj1hPT4oemI9TC5LYSkoYSk7XG5mdW5jdGlvbiBZYihhKXthPU9iamVjdC5hc3NpZ24oe30sYSk7dmFyIGI9ZT0+KCk9PmUoKT4+PjAsYz1lPT5oPT5lKGgpPj4+MDthLl9fZXJybm9fbG9jYXRpb249YihhLl9fZXJybm9fbG9jYXRpb24pO2EucHRocmVhZF9zZWxmPWIoYS5wdGhyZWFkX3NlbGYpO2EubWFsbG9jPWMoYS5tYWxsb2MpO2Euc3RhY2tTYXZlPWIoYS5zdGFja1NhdmUpO2Euc3RhY2tBbGxvYz1jKGEuc3RhY2tBbGxvYyk7cmV0dXJuIGF9dy5rZWVwUnVudGltZUFsaXZlPVA7dy53YXNtTWVtb3J5PWQ7dy5zdGFja0FsbG9jPXpiO3cuc3RhY2tTYXZlPXhiO3cuc3RhY2tSZXN0b3JlPVJhO3cuVVRGOFRvU3RyaW5nPUthO3cuc3RyaW5nVG9VVEY4PWNiO3cubGVuZ3RoQnl0ZXNVVEY4PWFiO3cuRXhpdFN0YXR1cz1VO3cuUFRocmVhZD1WO3ZhciBaYjtSPWZ1bmN0aW9uICRiKCl7WmJ8fGFjKCk7WmJ8fChSPSRiKX07XG5mdW5jdGlvbiBhYygpe2Z1bmN0aW9uIGEoKXtpZighWmImJihaYj0hMCx3LmNhbGxlZFJ1bj0hMCwhTSkpe0R8fFBhKHVhKTtoYSh3KTtpZih3Lm9uUnVudGltZUluaXRpYWxpemVkKXcub25SdW50aW1lSW5pdGlhbGl6ZWQoKTtpZighRCl7aWYody5wb3N0UnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiB3LnBvc3RSdW4mJih3LnBvc3RSdW49W3cucG9zdFJ1bl0pO3cucG9zdFJ1bi5sZW5ndGg7KXt2YXIgYj13LnBvc3RSdW4uc2hpZnQoKTt2YS51bnNoaWZ0KGIpfVBhKHZhKX19fWlmKCEoMDxRKSlpZihEKWhhKHcpLER8fFBhKHVhKSxzdGFydFdvcmtlcih3KTtlbHNle2lmKHcucHJlUnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiB3LnByZVJ1biYmKHcucHJlUnVuPVt3LnByZVJ1bl0pO3cucHJlUnVuLmxlbmd0aDspdGEudW5zaGlmdCh3LnByZVJ1bi5zaGlmdCgpKTtQYSh0YSk7MDxRfHwody5zZXRTdGF0dXM/KHcuc2V0U3RhdHVzKFwiUnVubmluZy4uLlwiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3cuc2V0U3RhdHVzKFwiXCIpfSxcbjEpO2EoKX0sMSkpOmEoKSl9fWlmKHcucHJlSW5pdClmb3IoXCJmdW5jdGlvblwiPT10eXBlb2Ygdy5wcmVJbml0JiYody5wcmVJbml0PVt3LnByZUluaXRdKTswPHcucHJlSW5pdC5sZW5ndGg7KXcucHJlSW5pdC5wb3AoKSgpO2FjKCk7XG5cblxuICByZXR1cm4gbW9kdWxlQXJnLnJlYWR5XG59XG5cbik7XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtVGhyZWFkZWQ7XG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXG4gIGRlZmluZShbXSwgKCkgPT4gb3J0V2FzbVRocmVhZGVkKTtcbiIsICJcInVzZSBzdHJpY3RcIjt2YXIgTW9kdWxlPXt9O3ZhciBFTlZJUk9OTUVOVF9JU19OT0RFPXR5cGVvZiBwcm9jZXNzPT1cIm9iamVjdFwiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09XCJzdHJpbmdcIjtpZihFTlZJUk9OTUVOVF9JU19OT0RFKXt2YXIgbm9kZVdvcmtlclRocmVhZHM9cmVxdWlyZShcIndvcmtlcl90aHJlYWRzXCIpO3ZhciBwYXJlbnRQb3J0PW5vZGVXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7cGFyZW50UG9ydC5vbihcIm1lc3NhZ2VcIixkYXRhPT5vbm1lc3NhZ2Uoe2RhdGE6ZGF0YX0pKTt2YXIgZnM9cmVxdWlyZShcImZzXCIpO09iamVjdC5hc3NpZ24oZ2xvYmFsLHtzZWxmOmdsb2JhbCxyZXF1aXJlOnJlcXVpcmUsTW9kdWxlOk1vZHVsZSxsb2NhdGlvbjp7aHJlZjpfX2ZpbGVuYW1lfSxXb3JrZXI6bm9kZVdvcmtlclRocmVhZHMuV29ya2VyLGltcG9ydFNjcmlwdHM6Zj0+KDAsZXZhbCkoZnMucmVhZEZpbGVTeW5jKGYsXCJ1dGY4XCIpK1wiLy8jIHNvdXJjZVVSTD1cIitmKSxwb3N0TWVzc2FnZTptc2c9PnBhcmVudFBvcnQucG9zdE1lc3NhZ2UobXNnKSxwZXJmb3JtYW5jZTpnbG9iYWwucGVyZm9ybWFuY2V8fHtub3c6RGF0ZS5ub3d9fSl9dmFyIGluaXRpYWxpemVkSlM9ZmFsc2U7ZnVuY3Rpb24gdGhyZWFkUHJpbnRFcnIoKXt2YXIgdGV4dD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO2lmKEVOVklST05NRU5UX0lTX05PREUpe2ZzLndyaXRlU3luYygyLHRleHQrXCJcXG5cIik7cmV0dXJufWNvbnNvbGUuZXJyb3IodGV4dCl9ZnVuY3Rpb24gdGhyZWFkQWxlcnQoKXt2YXIgdGV4dD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO3Bvc3RNZXNzYWdlKHtjbWQ6XCJhbGVydFwiLHRleHQ6dGV4dCx0aHJlYWRJZDpNb2R1bGVbXCJfcHRocmVhZF9zZWxmXCJdKCl9KX12YXIgZXJyPXRocmVhZFByaW50RXJyO3NlbGYuYWxlcnQ9dGhyZWFkQWxlcnQ7TW9kdWxlW1wiaW5zdGFudGlhdGVXYXNtXCJdPShpbmZvLHJlY2VpdmVJbnN0YW5jZSk9Pnt2YXIgbW9kdWxlPU1vZHVsZVtcIndhc21Nb2R1bGVcIl07TW9kdWxlW1wid2FzbU1vZHVsZVwiXT1udWxsO3ZhciBpbnN0YW5jZT1uZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLGluZm8pO3JldHVybiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UpfTtzZWxmLm9udW5oYW5kbGVkcmVqZWN0aW9uPWU9Pnt0aHJvdyBlLnJlYXNvbj8/ZX07ZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShlKXt0cnl7aWYoZS5kYXRhLmNtZD09PVwibG9hZFwiKXtsZXQgbWVzc2FnZVF1ZXVlPVtdO3NlbGYub25tZXNzYWdlPWU9Pm1lc3NhZ2VRdWV1ZS5wdXNoKGUpO3NlbGYuc3RhcnRXb3JrZXI9aW5zdGFuY2U9PntNb2R1bGU9aW5zdGFuY2U7cG9zdE1lc3NhZ2Uoe1wiY21kXCI6XCJsb2FkZWRcIn0pO2ZvcihsZXQgbXNnIG9mIG1lc3NhZ2VRdWV1ZSl7aGFuZGxlTWVzc2FnZShtc2cpfXNlbGYub25tZXNzYWdlPWhhbmRsZU1lc3NhZ2V9O01vZHVsZVtcIndhc21Nb2R1bGVcIl09ZS5kYXRhLndhc21Nb2R1bGU7Zm9yKGNvbnN0IGhhbmRsZXIgb2YgZS5kYXRhLmhhbmRsZXJzKXtNb2R1bGVbaGFuZGxlcl09KC4uLmFyZ3MpPT57cG9zdE1lc3NhZ2Uoe2NtZDpcImNhbGxIYW5kbGVyXCIsaGFuZGxlcjpoYW5kbGVyLGFyZ3M6YXJnc30pfX1Nb2R1bGVbXCJ3YXNtTWVtb3J5XCJdPWUuZGF0YS53YXNtTWVtb3J5O01vZHVsZVtcImJ1ZmZlclwiXT1Nb2R1bGVbXCJ3YXNtTWVtb3J5XCJdLmJ1ZmZlcjtNb2R1bGVbXCJFTlZJUk9OTUVOVF9JU19QVEhSRUFEXCJdPXRydWU7aWYodHlwZW9mIGUuZGF0YS51cmxPckJsb2I9PVwic3RyaW5nXCIpe2ltcG9ydFNjcmlwdHMoZS5kYXRhLnVybE9yQmxvYil9ZWxzZXt2YXIgb2JqZWN0VXJsPVVSTC5jcmVhdGVPYmplY3RVUkwoZS5kYXRhLnVybE9yQmxvYik7aW1wb3J0U2NyaXB0cyhvYmplY3RVcmwpO1VSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKX1vcnRXYXNtVGhyZWFkZWQoTW9kdWxlKX1lbHNlIGlmKGUuZGF0YS5jbWQ9PT1cInJ1blwiKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXRcIl0oZS5kYXRhLnB0aHJlYWRfcHRyLC8qaXNNYWluQnJvd3NlclRocmVhZD0qLzAsLyppc01haW5SdW50aW1lVGhyZWFkPSovMCwvKmNhbkJsb2NrPSovMSk7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9tYWlsYm94X2F3YWl0XCJdKGUuZGF0YS5wdGhyZWFkX3B0cik7TW9kdWxlW1wiZXN0YWJsaXNoU3RhY2tTcGFjZVwiXSgpO01vZHVsZVtcIlBUaHJlYWRcIl0ucmVjZWl2ZU9iamVjdFRyYW5zZmVyKGUuZGF0YSk7TW9kdWxlW1wiUFRocmVhZFwiXS50aHJlYWRJbml0VExTKCk7aWYoIWluaXRpYWxpemVkSlMpe2luaXRpYWxpemVkSlM9dHJ1ZX10cnl7TW9kdWxlW1wiaW52b2tlRW50cnlQb2ludFwiXShlLmRhdGEuc3RhcnRfcm91dGluZSxlLmRhdGEuYXJnKX1jYXRjaChleCl7aWYoZXghPVwidW53aW5kXCIpe3Rocm93IGV4fX19ZWxzZSBpZihlLmRhdGEuY21kPT09XCJjYW5jZWxcIil7aWYoTW9kdWxlW1wiX3B0aHJlYWRfc2VsZlwiXSgpKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXRcIl0oLTEpfX1lbHNlIGlmKGUuZGF0YS50YXJnZXQ9PT1cInNldGltbWVkaWF0ZVwiKXt9ZWxzZSBpZihlLmRhdGEuY21kPT09XCJjaGVja01haWxib3hcIil7aWYoaW5pdGlhbGl6ZWRKUyl7TW9kdWxlW1wiY2hlY2tNYWlsYm94XCJdKCl9fWVsc2UgaWYoZS5kYXRhLmNtZCl7ZXJyKFwid29ya2VyLmpzIHJlY2VpdmVkIHVua25vd24gY29tbWFuZCBcIitlLmRhdGEuY21kKTtlcnIoZS5kYXRhKX19Y2F0Y2goZXgpe2lmKE1vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZFwiXSl7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkXCJdKCl9dGhyb3cgZXh9fXNlbGYub25tZXNzYWdlPWhhbmRsZU1lc3NhZ2U7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7RW52fSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge09ydFdhc21Nb2R1bGV9IGZyb20gJy4vYmluZGluZy9vcnQtd2FzbSc7XG5pbXBvcnQge09ydFdhc21UaHJlYWRlZE1vZHVsZX0gZnJvbSAnLi9iaW5kaW5nL29ydC13YXNtLXRocmVhZGVkJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xubGV0IG9ydFdhc21GYWN0b3J5OiBFbXNjcmlwdGVuTW9kdWxlRmFjdG9yeTxPcnRXYXNtTW9kdWxlPjtcblxuaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfVFJBSU5JTkcpIHtcbiAgb3J0V2FzbUZhY3RvcnkgPSByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXRyYWluaW5nLXdhc20tc2ltZC5qcycpO1xufSBlbHNlIHtcbiAgb3J0V2FzbUZhY3RvcnkgPVxuICAgICAgQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSA/IHJlcXVpcmUoJy4vYmluZGluZy9vcnQtd2FzbS5qcycpIDogcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLXNpbWQuanNlcC5qcycpO1xufVxuXG5jb25zdCBvcnRXYXNtRmFjdG9yeVRocmVhZGVkOiBFbXNjcmlwdGVuTW9kdWxlRmFjdG9yeTxPcnRXYXNtTW9kdWxlPiA9ICFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9USFJFQUQgP1xuICAgIChCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVID8gcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLXRocmVhZGVkLmpzJykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLXNpbWQtdGhyZWFkZWQuanNlcC5qcycpKSA6XG4gICAgb3J0V2FzbUZhY3Rvcnk7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cblxubGV0IHdhc206IE9ydFdhc21Nb2R1bGV8dW5kZWZpbmVkO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5sZXQgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG5sZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG5jb25zdCBpc011bHRpVGhyZWFkU3VwcG9ydGVkID0gKG51bVRocmVhZHM6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICAvLyBXZWJBc3NlbWJseSB0aHJlYWRzIGFyZSBzZXQgdG8gMSAoc2luZ2xlIHRocmVhZCkuXG4gIGlmIChudW1UaHJlYWRzID09PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgJ1NoYXJlZEFycmF5QnVmZmVyJyBpcyBub3QgYXZhaWxhYmxlLCBXZWJBc3NlbWJseSB0aHJlYWRzIHdpbGwgbm90IHdvcmsuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiAhc2VsZi5jcm9zc09yaWdpbklzb2xhdGVkKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdlbnYud2FzbS5udW1UaHJlYWRzIGlzIHNldCB0byAnICsgbnVtVGhyZWFkcyArXG4gICAgICAgICAgJywgYnV0IHRoaXMgd2lsbCBub3Qgd29yayB1bmxlc3MgeW91IGVuYWJsZSBjcm9zc09yaWdpbklzb2xhdGVkIG1vZGUuICcgK1xuICAgICAgICAgICdTZWUgaHR0cHM6Ly93ZWIuZGV2L2Nyb3NzLW9yaWdpbi1pc29sYXRpb24tZ3VpZGUvIGZvciBtb3JlIGluZm8uJyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG9ubnhydW50aW1lLXdlYiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpLXRocmVhZHMgaW4gTm9kZS5qcy5cbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKFxuICAgICAgICAnZW52Lndhc20ubnVtVGhyZWFkcyBpcyBzZXQgdG8gJyArIG51bVRocmVhZHMgK1xuICAgICAgICAnLCBob3dldmVyLCBjdXJyZW50bHkgb25ueHJ1bnRpbWUtd2ViIGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdGhyZWFkcyBpbiBOb2RlLmpzLiAnICtcbiAgICAgICAgJ1BsZWFzZSBjb25zaWRlciB1c2luZyBvbm54cnVudGltZS1ub2RlIGZvciBwZXJmb3JtYW5jZSBjcml0aWNhbCBzY2VuYXJpb3MuJyk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRlc3QgZm9yIHRyYW5zZmVyYWJpbGl0eSBvZiBTQUJzIChmb3IgYnJvd3NlcnMuIG5lZWRlZCBmb3IgRmlyZWZveClcbiAgICAvLyBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhbXNnL21vemlsbGEuZGV2LnBsYXRmb3JtL0lIa0JabEhFVHBBL2R3c01OY2hXRVFBSlxuICAgIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuZXcgTWVzc2FnZUNoYW5uZWwoKS5wb3J0MS5wb3N0TWVzc2FnZShuZXcgU2hhcmVkQXJyYXlCdWZmZXIoMSkpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgZm9yIFdlYkFzc2VtYmx5IHRocmVhZHMgY2FwYWJpbGl0eSAoZm9yIGJvdGggYnJvd3NlcnMgYW5kIE5vZGUuanMpXG4gICAgLy8gVGhpcyB0eXBlZCBhcnJheSBpcyBhIFdlYkFzc2VtYmx5IHByb2dyYW0gY29udGFpbmluZyB0aHJlYWRlZCBpbnN0cnVjdGlvbnMuXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDAsIDk3LCAxMTUsIDEwOSwgMSwgMCwgIDAsICAwLCAxLCA0LCAxLCAgOTYsIDAsICAgMCwgIDMsIDIsIDEsICAwLCA1LFxuICAgICAgNCwgMSwgIDMsICAgMSwgICAxLCAxMCwgMTEsIDEsIDksIDAsIDY1LCAwLCAgMjU0LCAxNiwgMiwgMCwgMjYsIDExXG4gICAgXSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBpc1NpbWRTdXBwb3J0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgLy8gVGVzdCBmb3IgV2ViQXNzZW1ibHkgU0lNRCBjYXBhYmlsaXR5IChmb3IgYm90aCBicm93c2VycyBhbmQgTm9kZS5qcylcbiAgICAvLyBUaGlzIHR5cGVkIGFycmF5IGlzIGEgV2ViQXNzZW1ibHkgcHJvZ3JhbSBjb250YWluaW5nIFNJTUQgaW5zdHJ1Y3Rpb25zLlxuXG4gICAgLy8gVGhlIGJpbmFyeSBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgY29kZSBieSB3YXQyd2FzbTpcbiAgICAvL1xuICAgIC8vIChtb2R1bGVcbiAgICAvLyAgICh0eXBlICR0MCAoZnVuYykpXG4gICAgLy8gICAoZnVuYyAkZjAgKHR5cGUgJHQwKVxuICAgIC8vICAgICAoZHJvcFxuICAgIC8vICAgICAgIChpMzJ4NC5kb3RfaTE2eDhfc1xuICAgIC8vICAgICAgICAgKGk4eDE2LnNwbGF0XG4gICAgLy8gICAgICAgICAgIChpMzIuY29uc3QgMCkpXG4gICAgLy8gICAgICAgICAodjEyOC5jb25zdCBpMzJ4NCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwKSkpKSlcblxuICAgIHJldHVybiBXZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbXG4gICAgICAwLCAgIDk3LCAxMTUsIDEwOSwgMSwgMCwgMCwgMCwgMSwgNCwgMSwgOTYsIDAsIDAsIDMsIDIsIDEsIDAsIDEwLCAzMCwgMSwgICAyOCwgIDAsIDY1LCAwLFxuICAgICAgMjUzLCAxNSwgMjUzLCAxMiwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgMCwgIDI1MywgMTg2LCAxLCAyNiwgMTFcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGdldFdhc21GaWxlTmFtZSA9ICh1c2VTaW1kOiBib29sZWFuLCB1c2VUaHJlYWRzOiBib29sZWFuKSA9PiB7XG4gIGlmICh1c2VTaW1kKSB7XG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfVFJBSU5JTkcpIHtcbiAgICAgIHJldHVybiAnb3J0LXRyYWluaW5nLXdhc20tc2ltZC53YXNtJztcbiAgICB9XG4gICAgcmV0dXJuIHVzZVRocmVhZHMgPyAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtJyA6ICdvcnQtd2FzbS1zaW1kLndhc20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1c2VUaHJlYWRzID8gJ29ydC13YXNtLXRocmVhZGVkLndhc20nIDogJ29ydC13YXNtLndhc20nO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5ID0gYXN5bmMoZmxhZ3M6IEVudi5XZWJBc3NlbWJseUZsYWdzKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmIChpbml0aWFsaXplZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICBpZiAoaW5pdGlhbGl6aW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aXBsZSBjYWxscyB0byBcXCdpbml0aWFsaXplV2ViQXNzZW1ibHkoKVxcJyBkZXRlY3RlZC4nKTtcbiAgfVxuICBpZiAoYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJldmlvdXMgY2FsbCB0byBcXCdpbml0aWFsaXplV2ViQXNzZW1ibHkoKVxcJyBmYWlsZWQuJyk7XG4gIH1cblxuICBpbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gIC8vIHdhc20gZmxhZ3MgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAgY29uc3QgdGltZW91dCA9IGZsYWdzLmluaXRUaW1lb3V0ITtcbiAgY29uc3QgbnVtVGhyZWFkcyA9IGZsYWdzLm51bVRocmVhZHMhO1xuICBjb25zdCBzaW1kID0gZmxhZ3Muc2ltZCE7XG5cbiAgY29uc3QgdXNlVGhyZWFkcyA9IGlzTXVsdGlUaHJlYWRTdXBwb3J0ZWQobnVtVGhyZWFkcyk7XG4gIGNvbnN0IHVzZVNpbWQgPSBzaW1kICYmIGlzU2ltZFN1cHBvcnRlZCgpO1xuXG4gIGNvbnN0IHdhc21QYXRocyA9IGZsYWdzLndhc21QYXRocztcbiAgY29uc3Qgd2FzbVByZWZpeE92ZXJyaWRlID0gdHlwZW9mIHdhc21QYXRocyA9PT0gJ3N0cmluZycgPyB3YXNtUGF0aHMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHdhc21GaWxlTmFtZSA9IGdldFdhc21GaWxlTmFtZSh1c2VTaW1kLCB1c2VUaHJlYWRzKTtcbiAgY29uc3Qgd2FzbVBhdGhPdmVycmlkZSA9IHR5cGVvZiB3YXNtUGF0aHMgPT09ICdvYmplY3QnID8gd2FzbVBhdGhzW3dhc21GaWxlTmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgbGV0IGlzVGltZW91dCA9IGZhbHNlO1xuXG4gIGNvbnN0IHRhc2tzOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdO1xuXG4gIC8vIHByb21pc2UgZm9yIHRpbWVvdXRcbiAgaWYgKHRpbWVvdXQgPiAwKSB7XG4gICAgdGFza3MucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlzVGltZW91dCA9IHRydWU7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8vIHByb21pc2UgZm9yIG1vZHVsZSBpbml0aWFsaXphdGlvblxuICB0YXNrcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdXNlVGhyZWFkcyA/IG9ydFdhc21GYWN0b3J5VGhyZWFkZWQgOiBvcnRXYXNtRmFjdG9yeTtcbiAgICBjb25zdCBjb25maWc6IFBhcnRpYWw8T3J0V2FzbU1vZHVsZT4gPSB7XG4gICAgICBsb2NhdGVGaWxlOiAoZmlsZU5hbWU6IHN0cmluZywgc2NyaXB0RGlyZWN0b3J5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9USFJFQUQgJiYgdXNlVGhyZWFkcyAmJiBmaWxlTmFtZS5lbmRzV2l0aCgnLndvcmtlci5qcycpICYmXG4gICAgICAgICAgICB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZSgpIGZ1bmN0aW9uIGlzIGhhbmRsZWQgYnkgZXNidWlsZCBwbHVnaW4gdG8gbG9hZCBmaWxlIGNvbnRlbnQgYXMgc3RyaW5nLlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLXRocmVhZGVkLndvcmtlci5qcycpXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aCgnLndhc20nKSkge1xuICAgICAgICAgIGlmICh3YXNtUGF0aE92ZXJyaWRlKSB7XG4gICAgICAgICAgICByZXR1cm4gd2FzbVBhdGhPdmVycmlkZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwcmVmaXggPSB3YXNtUHJlZml4T3ZlcnJpZGUgPz8gc2NyaXB0RGlyZWN0b3J5O1xuXG4gICAgICAgICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVKSB7XG4gICAgICAgICAgICBpZiAod2FzbUZpbGVOYW1lID09PSAnb3J0LXdhc20tc2ltZC53YXNtJykge1xuICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgJ29ydC13YXNtLXNpbWQuanNlcC53YXNtJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2FzbUZpbGVOYW1lID09PSAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtJykge1xuICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgJ29ydC13YXNtLXNpbWQtdGhyZWFkZWQuanNlcC53YXNtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJlZml4ICsgd2FzbUZpbGVOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjcmlwdERpcmVjdG9yeSArIGZpbGVOYW1lO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCAmJiB1c2VUaHJlYWRzKSB7XG4gICAgICBjb25maWcubnVtVGhyZWFkcyA9IG51bVRocmVhZHM7XG4gICAgICBpZiAodHlwZW9mIEJsb2IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ29ydC13YXNtLXRocmVhZGVkLmpzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2VDb2RlID0gYHZhciBvcnRXYXNtVGhyZWFkZWQ9JHtmYWN0b3J5LnRvU3RyaW5nKCl9O2A7XG4gICAgICAgIGNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gbmV3IEJsb2IoW3NjcmlwdFNvdXJjZUNvZGVdLCB7dHlwZTogJ3RleHQvamF2YXNjcmlwdCd9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmYWN0b3J5KGNvbmZpZykudGhlbihcbiAgICAgICAgLy8gd2FzbSBtb2R1bGUgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgIG1vZHVsZSA9PiB7XG4gICAgICAgICAgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIHdhc20gPSBtb2R1bGU7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyB3YXNtIG1vZHVsZSBmYWlsZWQgdG8gaW5pdGlhbGl6ZVxuICAgICAgICAod2hhdCkgPT4ge1xuICAgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlamVjdCh3aGF0KTtcbiAgICAgICAgfSk7XG4gIH0pKTtcblxuICBhd2FpdCBQcm9taXNlLnJhY2UodGFza3MpO1xuXG4gIGlmIChpc1RpbWVvdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlYkFzc2VtYmx5IGJhY2tlbmQgaW5pdGlhbGl6aW5nIGZhaWxlZCBkdWUgdG8gdGltZW91dDogJHt0aW1lb3V0fW1zYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbnN0YW5jZSA9ICgpOiBPcnRXYXNtTW9kdWxlID0+IHtcbiAgaWYgKGluaXRpYWxpemVkICYmIHdhc20pIHtcbiAgICByZXR1cm4gd2FzbTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignV2ViQXNzZW1ibHkgaXMgbm90IGluaXRpYWxpemVkIHlldC4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwb3NlID0gKCk6IHZvaWQgPT4ge1xuICBpZiAoaW5pdGlhbGl6ZWQgJiYgIWluaXRpYWxpemluZyAmJiAhYWJvcnRlZCkge1xuICAgIGluaXRpYWxpemluZyA9IHRydWU7XG5cbiAgICAod2FzbSBhcyBPcnRXYXNtVGhyZWFkZWRNb2R1bGUpLlBUaHJlYWQ/LnRlcm1pbmF0ZUFsbFRocmVhZHMoKTtcbiAgICB3YXNtID0gdW5kZWZpbmVkO1xuXG4gICAgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuXG5leHBvcnQgY29uc3QgYWxsb2NXYXNtU3RyaW5nID0gKGRhdGE6IHN0cmluZywgYWxsb2NzOiBudW1iZXJbXSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gIGNvbnN0IGRhdGFMZW5ndGggPSB3YXNtLmxlbmd0aEJ5dGVzVVRGOChkYXRhKSArIDE7XG4gIGNvbnN0IGRhdGFPZmZzZXQgPSB3YXNtLl9tYWxsb2MoZGF0YUxlbmd0aCk7XG4gIHdhc20uc3RyaW5nVG9VVEY4KGRhdGEsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xuICBhbGxvY3MucHVzaChkYXRhT2Zmc2V0KTtcblxuICByZXR1cm4gZGF0YU9mZnNldDtcbn07XG5cbmludGVyZmFjZSBFeHRyYU9wdGlvbnNIYW5kbGVyIHtcbiAgKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRlRXh0cmFPcHRpb25zID1cbiAgICAob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByZWZpeDogc3RyaW5nLCBzZWVuOiBXZWFrU2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgICAgaGFuZGxlcjogRXh0cmFPcHRpb25zSGFuZGxlcik6IHZvaWQgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlZW4uaGFzKG9wdGlvbnMpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgaW4gb3B0aW9ucycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZW4uYWRkKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gKHByZWZpeCkgPyBwcmVmaXggKyBrZXkgOiBrZXk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZSArICcuJywgc2VlbiwgaGFuZGxlcik7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgaGFuZGxlcihuYW1lLCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIGhhbmRsZXIobmFtZSwgKHZhbHVlKSA/ICcxJyA6ICcwJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYW5kbGUgZXh0cmEgY29uZmlnIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4vKipcbiAqIGNoZWNrIHdlYiBhc3NlbWJseSBBUEkncyBsYXN0IGVycm9yIGFuZCB0aHJvdyBlcnJvciBpZiBhbnkgZXJyb3Igb2NjdXJyZWQuXG4gKiBAcGFyYW0gbWVzc2FnZSBhIG1lc3NhZ2UgdXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycmVkLlxuICovXG5leHBvcnQgY29uc3QgY2hlY2tMYXN0RXJyb3IgPSAobWVzc2FnZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gIGNvbnN0IHN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJhbXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoOCk7XG4gICAgd2FzbS5fT3J0R2V0TGFzdEVycm9yKHBhcmFtc09mZnNldCwgcGFyYW1zT2Zmc2V0ICsgNCk7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5IRUFQMzJbcGFyYW1zT2Zmc2V0IC8gNF07XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlUG9pbnRlciA9IHdhc20uSEVBUFUzMltwYXJhbXNPZmZzZXQgLyA0ICsgMV07XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlUG9pbnRlciA/IHdhc20uVVRGOFRvU3RyaW5nKGVycm9yTWVzc2FnZVBvaW50ZXIpIDogJyc7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21lc3NhZ2V9IEVSUk9SX0NPREU6ICR7ZXJyb3JDb2RlfSwgRVJST1JfTUVTU0FHRTogJHtlcnJvck1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgd2FzbS5zdGFja1Jlc3RvcmUoc3RhY2spO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb259IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7Z2V0SW5zdGFuY2V9IGZyb20gJy4vd2FzbS1mYWN0b3J5JztcbmltcG9ydCB7YWxsb2NXYXNtU3RyaW5nLCBjaGVja0xhc3RFcnJvciwgaXRlcmF0ZUV4dHJhT3B0aW9uc30gZnJvbSAnLi93YXNtLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IHNldFJ1bk9wdGlvbnMgPSAob3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogW251bWJlciwgbnVtYmVyW11dID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGxldCBydW5PcHRpb25zSGFuZGxlID0gMDtcbiAgY29uc3QgYWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IHJ1bk9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucz8ubG9nU2V2ZXJpdHlMZXZlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydW5PcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPSAyOyAgLy8gRGVmYXVsdCB0byB3YXJuaW5nXG4gICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dTZXZlcml0eUxldmVsKSB8fFxuICAgICAgICBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPCAwIHx8IG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHNlcnZlcml0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7b3B0aW9ucy5sb2dTZXZlcml0eUxldmVsfWApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5sb2dWZXJib3NpdHlMZXZlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydW5PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsID0gMDsgIC8vIERlZmF1bHQgdG8gMFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGxvZyB2ZXJib3NpdHkgbGV2ZWwgaXMgbm90IHZhbGlkOiAke29wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LnRlcm1pbmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydW5PcHRpb25zLnRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGxldCB0YWdEYXRhT2Zmc2V0ID0gMDtcbiAgICBpZiAob3B0aW9ucz8udGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhZ0RhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcob3B0aW9ucy50YWcsIGFsbG9jcyk7XG4gICAgfVxuXG4gICAgcnVuT3B0aW9uc0hhbmRsZSA9IHdhc20uX09ydENyZWF0ZVJ1bk9wdGlvbnMoXG4gICAgICAgIHJ1bk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCEsIHJ1bk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwhLCAhIXJ1bk9wdGlvbnMudGVybWluYXRlISwgdGFnRGF0YU9mZnNldCk7XG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgPT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGNyZWF0ZSBydW4gb3B0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uZXh0cmEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhvcHRpb25zLmV4dHJhLCAnJywgbmV3IFdlYWtTZXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCksIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoa2V5LCBhbGxvY3MpO1xuICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcodmFsdWUsIGFsbG9jcyk7XG5cbiAgICAgICAgaWYgKHdhc20uX09ydEFkZFJ1bkNvbmZpZ0VudHJ5KHJ1bk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgcnVuIGNvbmZpZyBlbnRyeTogJHtrZXl9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBbcnVuT3B0aW9uc0hhbmRsZSwgYWxsb2NzXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChydW5PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlUnVuT3B0aW9ucyhydW5PcHRpb25zSGFuZGxlKTtcbiAgICB9XG4gICAgYWxsb2NzLmZvckVhY2goYWxsb2MgPT4gd2FzbS5fZnJlZShhbGxvYykpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yLCBpdGVyYXRlRXh0cmFPcHRpb25zfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuXG5jb25zdCBnZXRHcmFwaE9wdGltemF0aW9uTGV2ZWwgPSAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbDogc3RyaW5nfHVua25vd24pOiBudW1iZXIgPT4ge1xuICBzd2l0Y2ggKGdyYXBoT3B0aW1pemF0aW9uTGV2ZWwpIHtcbiAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICByZXR1cm4gMDtcbiAgICBjYXNlICdiYXNpYyc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICdleHRlbmRlZCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdhbGwnOlxuICAgICAgcmV0dXJuIDk5O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGdyYXBoIG9wdGltaXphdGlvbiBsZXZlbDogJHtncmFwaE9wdGltaXphdGlvbkxldmVsfWApO1xuICB9XG59O1xuXG5jb25zdCBnZXRFeGVjdXRpb25Nb2RlID0gKGV4ZWN1dGlvbk1vZGU6ICdzZXF1ZW50aWFsJ3wncGFyYWxsZWwnKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChleGVjdXRpb25Nb2RlKSB7XG4gICAgY2FzZSAnc2VxdWVudGlhbCc6XG4gICAgICByZXR1cm4gMDtcbiAgICBjYXNlICdwYXJhbGxlbCc6XG4gICAgICByZXR1cm4gMTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBleGVjdXRpb24gbW9kZTogJHtleGVjdXRpb25Nb2RlfWApO1xuICB9XG59O1xuXG5jb25zdCBhcHBlbmREZWZhdWx0T3B0aW9ucyA9IChvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogdm9pZCA9PiB7XG4gIGlmICghb3B0aW9ucy5leHRyYSkge1xuICAgIG9wdGlvbnMuZXh0cmEgPSB7fTtcbiAgfVxuICBpZiAoIW9wdGlvbnMuZXh0cmEuc2Vzc2lvbikge1xuICAgIG9wdGlvbnMuZXh0cmEuc2Vzc2lvbiA9IHt9O1xuICB9XG4gIGNvbnN0IHNlc3Npb24gPSBvcHRpb25zLmV4dHJhLnNlc3Npb24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaWYgKCFzZXNzaW9uLnVzZV9vcnRfbW9kZWxfYnl0ZXNfZGlyZWN0bHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gICAgc2Vzc2lvbi51c2Vfb3J0X21vZGVsX2J5dGVzX2RpcmVjdGx5ID0gJzEnO1xuICB9XG5cbiAgLy8gaWYgdXNpbmcgSlNFUCB3aXRoIFdlYkdQVSwgYWx3YXlzIGRpc2FibGUgbWVtb3J5IHBhdHRlcm5cbiAgaWYgKG9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzICYmXG4gICAgICBvcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycy5zb21lKGVwID0+ICh0eXBlb2YgZXAgPT09ICdzdHJpbmcnID8gZXAgOiBlcC5uYW1lKSA9PT0gJ3dlYmdwdScpKSB7XG4gICAgb3B0aW9ucy5lbmFibGVNZW1QYXR0ZXJuID0gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IHNldEV4ZWN1dGlvblByb3ZpZGVycyA9XG4gICAgKHNlc3Npb25PcHRpb25zSGFuZGxlOiBudW1iZXIsIGV4ZWN1dGlvblByb3ZpZGVyczogcmVhZG9ubHkgSW5mZXJlbmNlU2Vzc2lvbi5FeGVjdXRpb25Qcm92aWRlckNvbmZpZ1tdLFxuICAgICBhbGxvY3M6IG51bWJlcltdKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVwIG9mIGV4ZWN1dGlvblByb3ZpZGVycykge1xuICAgICAgICBsZXQgZXBOYW1lID0gdHlwZW9mIGVwID09PSAnc3RyaW5nJyA/IGVwIDogZXAubmFtZTtcblxuICAgICAgICAvLyBjaGVjayBFUCBuYW1lXG4gICAgICAgIHN3aXRjaCAoZXBOYW1lKSB7XG4gICAgICAgICAgY2FzZSAnd2Vibm4nOlxuICAgICAgICAgICAgZXBOYW1lID0gJ1dFQk5OJztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdlYm5uT3B0aW9ucyA9IGVwIGFzIEluZmVyZW5jZVNlc3Npb24uV2ViTk5FeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICAgICAgICAgICAgaWYgKHdlYm5uT3B0aW9ucz8uZGV2aWNlVHlwZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ2RldmljZVR5cGUnLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJubk9wdGlvbnMuZGV2aWNlVHlwZSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PVxuICAgICAgICAgICAgICAgICAgICAwKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdkZXZpY2VUeXBlJyAtICR7d2Vibm5PcHRpb25zLmRldmljZVR5cGV9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5udW1UaHJlYWRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG51bVRocmVhZHMgPSB3ZWJubk9wdGlvbnMubnVtVGhyZWFkcztcbiAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9yZSBpbnZhbGlkIHdlYm5uT3B0aW9ucy5udW1UaHJlYWRzLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtVGhyZWFkcyAhPSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihudW1UaHJlYWRzKSB8fCBudW1UaHJlYWRzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgbnVtVGhyZWFkcyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ251bVRocmVhZHMnLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhudW1UaHJlYWRzLnRvU3RyaW5nKCksIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT1cbiAgICAgICAgICAgICAgICAgICAgMCkge1xuICAgICAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAnbnVtVGhyZWFkcycgLSAke3dlYm5uT3B0aW9ucy5udW1UaHJlYWRzfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHdlYm5uT3B0aW9ucz8ucG93ZXJQcmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygncG93ZXJQcmVmZXJlbmNlJywgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcod2Vibm5PcHRpb25zLnBvd2VyUHJlZmVyZW5jZSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PVxuICAgICAgICAgICAgICAgICAgICAwKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdwb3dlclByZWZlcmVuY2UnIC0gJHt3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3dlYmdwdSc6XG4gICAgICAgICAgICBlcE5hbWUgPSAnSlMnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd2ViZ3B1T3B0aW9ucyA9IGVwIGFzIEluZmVyZW5jZVNlc3Npb24uV2ViR3B1RXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgICAgICAgICAgIGlmICh3ZWJncHVPcHRpb25zPy5wcmVmZXJyZWRMYXlvdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAod2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXQgIT09ICdOQ0hXJyAmJiB3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCAhPT0gJ05IV0MnKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZWZlcnJlZExheW91dCBtdXN0IGJlIGVpdGhlciAnTkNIVycgb3IgJ05IV0MnOiAke3dlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0fWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKCdwcmVmZXJyZWRMYXlvdXQnLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PVxuICAgICAgICAgICAgICAgICAgICAwKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdwcmVmZXJyZWRMYXlvdXQnIC0gJHt3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dH0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd3YXNtJzpcbiAgICAgICAgICBjYXNlICdjcHUnOlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IHN1cHBvcnRlZCBleGVjdXRpb24gcHJvdmlkZXI6ICR7ZXBOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXBOYW1lRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhlcE5hbWUsIGFsbG9jcyk7XG4gICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcihzZXNzaW9uT3B0aW9uc0hhbmRsZSwgZXBOYW1lRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYXBwZW5kIGV4ZWN1dGlvbiBwcm92aWRlcjogJHtlcE5hbWV9LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb25PcHRpb25zID0gKG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogW251bWJlciwgbnVtYmVyW11dID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGxldCBzZXNzaW9uT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGNvbnN0IGFsbG9jczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBzZXNzaW9uT3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGFwcGVuZERlZmF1bHRPcHRpb25zKHNlc3Npb25PcHRpb25zKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGdyYXBoT3B0aW1pemF0aW9uTGV2ZWwgPSBnZXRHcmFwaE9wdGltemF0aW9uTGV2ZWwoc2Vzc2lvbk9wdGlvbnMuZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCA/PyAnYWxsJyk7XG4gICAgY29uc3QgZXhlY3V0aW9uTW9kZSA9IGdldEV4ZWN1dGlvbk1vZGUoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uTW9kZSA/PyAnc2VxdWVudGlhbCcpO1xuICAgIGNvbnN0IGxvZ0lkRGF0YU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBzZXNzaW9uT3B0aW9ucy5sb2dJZCA9PT0gJ3N0cmluZycgPyBhbGxvY1dhc21TdHJpbmcoc2Vzc2lvbk9wdGlvbnMubG9nSWQsIGFsbG9jcykgOiAwO1xuXG4gICAgY29uc3QgbG9nU2V2ZXJpdHlMZXZlbCA9IHNlc3Npb25PcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPz8gMjsgIC8vIERlZmF1bHQgdG8gMiAtIHdhcm5pbmdcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobG9nU2V2ZXJpdHlMZXZlbCkgfHwgbG9nU2V2ZXJpdHlMZXZlbCA8IDAgfHwgbG9nU2V2ZXJpdHlMZXZlbCA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHNlcnZlcml0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7bG9nU2V2ZXJpdHlMZXZlbH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dWZXJib3NpdHlMZXZlbCA9IHNlc3Npb25PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsID8/IDA7ICAvLyBEZWZhdWx0IHRvIDAgLSB2ZXJib3NlXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGxvZ1ZlcmJvc2l0eUxldmVsKSB8fCBsb2dWZXJib3NpdHlMZXZlbCA8IDAgfHwgbG9nVmVyYm9zaXR5TGV2ZWwgPiA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGxvZyB2ZXJib3NpdHkgbGV2ZWwgaXMgbm90IHZhbGlkOiAke2xvZ1ZlcmJvc2l0eUxldmVsfWApO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGltaXplZE1vZGVsRmlsZVBhdGhPZmZzZXQgPSB0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMub3B0aW1pemVkTW9kZWxGaWxlUGF0aCA9PT0gJ3N0cmluZycgP1xuICAgICAgICBhbGxvY1dhc21TdHJpbmcoc2Vzc2lvbk9wdGlvbnMub3B0aW1pemVkTW9kZWxGaWxlUGF0aCwgYWxsb2NzKSA6XG4gICAgICAgIDA7XG5cbiAgICBzZXNzaW9uT3B0aW9uc0hhbmRsZSA9IHdhc20uX09ydENyZWF0ZVNlc3Npb25PcHRpb25zKFxuICAgICAgICBncmFwaE9wdGltaXphdGlvbkxldmVsLCAhIXNlc3Npb25PcHRpb25zLmVuYWJsZUNwdU1lbUFyZW5hLCAhIXNlc3Npb25PcHRpb25zLmVuYWJsZU1lbVBhdHRlcm4sIGV4ZWN1dGlvbk1vZGUsXG4gICAgICAgICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlUHJvZmlsaW5nLCAwLCBsb2dJZERhdGFPZmZzZXQsIGxvZ1NldmVyaXR5TGV2ZWwsIGxvZ1ZlcmJvc2l0eUxldmVsLFxuICAgICAgICBvcHRpbWl6ZWRNb2RlbEZpbGVQYXRoT2Zmc2V0KTtcbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnNIYW5kbGUgPT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGNyZWF0ZSBzZXNzaW9uIG9wdGlvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25PcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycykge1xuICAgICAgc2V0RXhlY3V0aW9uUHJvdmlkZXJzKHNlc3Npb25PcHRpb25zSGFuZGxlLCBzZXNzaW9uT3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMsIGFsbG9jcyk7XG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZW5hYmxlR3JhcGhDYXB0dXJlIG11c3QgYmUgYSBib29sZWFuIHZhbHVlOiAke3Nlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ2VuYWJsZUdyYXBoQ2FwdHVyZScsIGFsbG9jcyk7XG4gICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlLnRvU3RyaW5nKCksIGFsbG9jcyk7XG4gICAgICBpZiAod2FzbS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAnZW5hYmxlR3JhcGhDYXB0dXJlJyAtICR7c2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlfS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZnJlZURpbWVuc2lvbk92ZXJyaWRlcykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlc3Npb25PcHRpb25zLmZyZWVEaW1lbnNpb25PdmVycmlkZXMpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZzogJHtuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlIHZhbHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcjogJHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG5hbWUsIGFsbG9jcyk7XG4gICAgICAgIGlmICh3YXNtLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGUoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIG5hbWVPZmZzZXQsIHZhbHVlKSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBmcmVlIGRpbWVuc2lvbiBvdmVycmlkZTogJHtuYW1lfSAtICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25PcHRpb25zLmV4dHJhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGl0ZXJhdGVFeHRyYU9wdGlvbnMoc2Vzc2lvbk9wdGlvbnMuZXh0cmEsICcnLCBuZXcgV2Vha1NldDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhrZXksIGFsbG9jcyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh2YWx1ZSwgYWxsb2NzKTtcblxuICAgICAgICBpZiAod2FzbS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAke2tleX0gLSAke3ZhbHVlfS5gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtzZXNzaW9uT3B0aW9uc0hhbmRsZSwgYWxsb2NzXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zKHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICB9XG4gICAgYWxsb2NzLmZvckVhY2goYWxsb2MgPT4gd2FzbS5fZnJlZShhbGxvYykpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG4vLyBhIGR1bW15IHR5cGUgZGVjbGFyYXRpb24gZm9yIEZsb2F0MTZBcnJheSBpbiBjYXNlIGFueSBwb2x5ZmlsbCBpcyBhdmFpbGFibGUuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgRmxvYXQxNkFycmF5OiBhbnk7XG59XG5cbi8vIFRoaXMgZmlsZSBpbmNsdWRlcyBjb21tb24gZGVmaW5pdGlvbnMuIFRoZXkgZG8gTk9UIGhhdmUgZGVwZW5kZW5jeSBvbiB0aGUgV2ViQXNzZW1ibHkgaW5zdGFuY2UuXG5cbi8qKlxuICogQ29waWVkIGZyb20gT05OWCBkZWZpbml0aW9uLiBVc2UgdGhpcyB0byBkcm9wIGRlcGVuZGVuY3kgJ29ubnhfcHJvdG8nIHRvIGRlY3JlYXNlIGNvbXBpbGVkIC5qcyBmaWxlIHNpemUuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIERhdGFUeXBlIHtcbiAgdW5kZWZpbmVkID0gMCxcbiAgZmxvYXQgPSAxLFxuICB1aW50OCA9IDIsXG4gIGludDggPSAzLFxuICB1aW50MTYgPSA0LFxuICBpbnQxNiA9IDUsXG4gIGludDMyID0gNixcbiAgaW50NjQgPSA3LFxuICBzdHJpbmcgPSA4LFxuICBib29sID0gOSxcbiAgZmxvYXQxNiA9IDEwLFxuICBkb3VibGUgPSAxMSxcbiAgdWludDMyID0gMTIsXG4gIHVpbnQ2NCA9IDEzLFxuICBjb21wbGV4NjQgPSAxNCxcbiAgY29tcGxleDEyOCA9IDE1LFxuICBiZmxvYXQxNiA9IDE2XG59XG5cbi8qKlxuICogTWFwIHN0cmluZyB0ZW5zb3IgZGF0YSB0byBlbnVtIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bSA9ICh0eXBlOiBzdHJpbmcpOiBEYXRhVHlwZSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2ludDgnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDg7XG4gICAgY2FzZSAndWludDgnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQ4O1xuICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmJvb2w7XG4gICAgY2FzZSAnaW50MTYnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDE2O1xuICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDE2O1xuICAgIGNhc2UgJ2ludDMyJzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5pbnQzMjtcbiAgICBjYXNlICd1aW50MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQzMjtcbiAgICBjYXNlICdmbG9hdDE2JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5mbG9hdDE2O1xuICAgIGNhc2UgJ2Zsb2F0MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmZsb2F0O1xuICAgIGNhc2UgJ2Zsb2F0NjQnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmRvdWJsZTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnN0cmluZztcbiAgICBjYXNlICdpbnQ2NCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50NjQ7XG4gICAgY2FzZSAndWludDY0JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS51aW50NjQ7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBkYXRhIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBNYXAgZW51bSB2YWx1ZSB0byBzdHJpbmcgdGVuc29yIGRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nID0gKHR5cGVQcm90bzogRGF0YVR5cGUpOiBUZW5zb3IuVHlwZSA9PiB7XG4gIHN3aXRjaCAodHlwZVByb3RvKSB7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQ4OlxuICAgICAgcmV0dXJuICdpbnQ4JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQ4OlxuICAgICAgcmV0dXJuICd1aW50OCc7XG4gICAgY2FzZSBEYXRhVHlwZS5ib29sOlxuICAgICAgcmV0dXJuICdib29sJztcbiAgICBjYXNlIERhdGFUeXBlLmludDE2OlxuICAgICAgcmV0dXJuICdpbnQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MTY6XG4gICAgICByZXR1cm4gJ3VpbnQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQzMjpcbiAgICAgIHJldHVybiAnaW50MzInO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDMyOlxuICAgICAgcmV0dXJuICd1aW50MzInO1xuICAgIGNhc2UgRGF0YVR5cGUuZmxvYXQxNjpcbiAgICAgIHJldHVybiAnZmxvYXQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS5mbG9hdDpcbiAgICAgIHJldHVybiAnZmxvYXQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS5kb3VibGU6XG4gICAgICByZXR1cm4gJ2Zsb2F0NjQnO1xuICAgIGNhc2UgRGF0YVR5cGUuc3RyaW5nOlxuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50NjQ6XG4gICAgICByZXR1cm4gJ2ludDY0JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQ2NDpcbiAgICAgIHJldHVybiAndWludDY0JztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlUHJvdG99YCk7XG4gIH1cbn07XG5cbi8qKlxuICogZ2V0IHRlbnNvciBlbGVtZW50IHNpemUgaW4gYnl0ZXMgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICogQHJldHVybnMgc2l6ZSBpbiBpbnRlZ2VyIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRlbnNvckVsZW1lbnRTaXplID0gKGRhdGVUeXBlOiBudW1iZXIpOiBudW1iZXJ8XG4gICAgdW5kZWZpbmVkID0+IFt1bmRlZmluZWQsIDQsIDEsIDEsIDIsIDIsIDQsIDgsIHVuZGVmaW5lZCwgMSwgMiwgOCwgNCwgOCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1bZGF0ZVR5cGVdO1xuXG4vKipcbiAqIGdldCB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciBieSB0aGUgZ2l2ZW4gdGVuc29yIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3RvciA9ICh0eXBlOiBUZW5zb3IuVHlwZSk6IEZsb2F0MzJBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBJbnQ4QXJyYXlDb25zdHJ1Y3RvcnxVaW50MTZBcnJheUNvbnN0cnVjdG9yfEludDE2QXJyYXlDb25zdHJ1Y3RvcnxJbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnSW50NjRBcnJheUNvbnN0cnVjdG9yfFxuICAgIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcnxVaW50MzJBcnJheUNvbnN0cnVjdG9yfEJpZ1VpbnQ2NEFycmF5Q29uc3RydWN0b3IgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Zsb2F0MTYnOlxuICAgICAgICAgIC8vIGFsbG93IEZsb2F0MTZBcnJheSBwb2x5ZmlsbC5cbiAgICAgICAgICByZXR1cm4gdHlwZW9mIEZsb2F0MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgRmxvYXQxNkFycmF5LmZyb20gPyBGbG9hdDE2QXJyYXkgOiBVaW50MTZBcnJheTtcbiAgICAgICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICAgICAgcmV0dXJuIEZsb2F0MzJBcnJheTtcbiAgICAgICAgY2FzZSAndWludDgnOlxuICAgICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgICAgICBjYXNlICdpbnQ4JzpcbiAgICAgICAgICByZXR1cm4gSW50OEFycmF5O1xuICAgICAgICBjYXNlICd1aW50MTYnOlxuICAgICAgICAgIHJldHVybiBVaW50MTZBcnJheTtcbiAgICAgICAgY2FzZSAnaW50MTYnOlxuICAgICAgICAgIHJldHVybiBJbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdpbnQzMic6XG4gICAgICAgICAgcmV0dXJuIEludDMyQXJyYXk7XG4gICAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgICAgICBjYXNlICdmbG9hdDY0JzpcbiAgICAgICAgICByZXR1cm4gRmxvYXQ2NEFycmF5O1xuICAgICAgICBjYXNlICd1aW50MzInOlxuICAgICAgICAgIHJldHVybiBVaW50MzJBcnJheTtcbiAgICAgICAgY2FzZSAnaW50NjQnOlxuICAgICAgICAgIHJldHVybiBCaWdJbnQ2NEFycmF5O1xuICAgICAgICBjYXNlICd1aW50NjQnOlxuICAgICAgICAgIHJldHVybiBCaWdVaW50NjRBcnJheTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9O1xuXG4vKipcbiAqIE1hcCBzdHJpbmcgbG9nIGxldmVsIHRvIGludGVnZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ0xldmVsU3RyaW5nVG9FbnVtID0gKGxvZ0xldmVsPzogJ3ZlcmJvc2UnfCdpbmZvJ3wnd2FybmluZyd8J2Vycm9yJ3wnZmF0YWwnKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChsb2dMZXZlbCkge1xuICAgIGNhc2UgJ3ZlcmJvc2UnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnaW5mbyc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGNhc2UgJ2ZhdGFsJzpcbiAgICAgIHJldHVybiA0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvZ2dpbmcgbGV2ZWw6ICR7bG9nTGV2ZWx9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdGVuc29yIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IEdQVSBidWZmZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSA9ICh0eXBlOiBUZW5zb3IuVHlwZSk6IHR5cGUgaXMgVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcyA9PiB0eXBlID09PSAnZmxvYXQzMicgfHxcbiAgICB0eXBlID09PSAnZmxvYXQxNicgfHwgdHlwZSA9PT0gJ2ludDMyJyB8fCB0eXBlID09PSAnaW50NjQnIHx8IHR5cGUgPT09ICd1aW50MzInIHx8IHR5cGUgPT09ICd1aW50OCcgfHxcbiAgICB0eXBlID09PSAnYm9vbCc7XG5cbi8qKlxuICogTWFwIHN0cmluZyBkYXRhIGxvY2F0aW9uIHRvIGludGVnZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bSA9IChsb2NhdGlvbjogVGVuc29yLkRhdGFMb2NhdGlvbik6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAobG9jYXRpb24pIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ2NwdSc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICdjcHUtcGlubmVkJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ3RleHR1cmUnOlxuICAgICAgcmV0dXJuIDM7XG4gICAgY2FzZSAnZ3B1LWJ1ZmZlcic6XG4gICAgICByZXR1cm4gNDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBkYXRhIGxvY2F0aW9uOiAke2xvY2F0aW9ufWApO1xuICB9XG59O1xuXG4vKipcbiAqIE1hcCBpbnRlZ2VyIGRhdGEgbG9jYXRpb24gdG8gc3RyaW5nIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhTG9jYXRpb25FbnVtVG9TdHJpbmcgPSAobG9jYXRpb246IG51bWJlcik6IFRlbnNvci5EYXRhTG9jYXRpb258dW5kZWZpbmVkID0+XG4gICAgKFsnbm9uZScsICdjcHUnLCAnY3B1LXBpbm5lZCcsICd0ZXh0dXJlJywgJ2dwdS1idWZmZXInXSBhcyBjb25zdClbbG9jYXRpb25dO1xuIiwgImV4cG9ydCBjb25zdCByZWFkRmlsZSA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgcmVhZEZpbGVTeW5jID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCBjcmVhdGVSZWFkU3RyZWFtID0gdW5kZWZpbmVkOyIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHtyZWFkRmlsZX0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbi8qKlxuICogTG9hZCBhIGZpbGUgaW50byBhIFVpbnQ4QXJyYXkuXG4gKlxuICogQHBhcmFtIGZpbGUgLSB0aGUgZmlsZSB0byBsb2FkLiBDYW4gYmUgYSBVUkwvcGF0aCwgYSBCbG9iLCBhbiBBcnJheUJ1ZmZlciwgb3IgYSBVaW50OEFycmF5LlxuICogQHJldHVybnMgYSBVaW50OEFycmF5IGNvbnRhaW5pbmcgdGhlIGZpbGUgZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlID0gYXN5bmMoZmlsZTogc3RyaW5nfEJsb2J8QXJyYXlCdWZmZXJMaWtlfFVpbnQ4QXJyYXkpOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgaWYgKHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAgIC8vIGxvYWQgZmlsZSBpbnRvIEFycmF5QnVmZmVyIGluIE5vZGUuanNcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCByZWFkRmlsZShmaWxlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLmNvZGUgPT09ICdFUlJfRlNfRklMRV9UT09fTEFSR0UnKSB7XG4gICAgICAgICAgLy8gZmlsZSBpcyB0b28gbGFyZ2UsIHVzZSBmcy5jcmVhdGVSZWFkU3RyZWFtIGluc3RlYWRcbiAgICAgICAgICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGUpO1xuICAgICAgICAgIGNvbnN0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9hZCBmaWxlIGludG8gQXJyYXlCdWZmZXIgaW4gYnJvd3NlcnNcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGF0YSBmaWxlOiAke2ZpbGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyk7XG4gICAgICBjb25zdCBmaWxlU2l6ZSA9IGNvbnRlbnRMZW5ndGhIZWFkZXIgPyBwYXJzZUludChjb250ZW50TGVuZ3RoSGVhZGVyLCAxMCkgOiAwO1xuICAgICAgaWYgKGZpbGVTaXplIDwgMTA3Mzc0MTgyNCAvKiAxR0IgKi8pIHtcbiAgICAgICAgLy8gd2hlbiBDb250ZW50LUxlbmd0aCBoZWFkZXIgaXMgbm90IHNldCwgd2UgY2Fubm90IGRldGVybWluZSB0aGUgZmlsZSBzaXplLiBXZSBhc3N1bWUgaXQgaXMgc21hbGwgZW5vdWdoIHRvXG4gICAgICAgIC8vIGxvYWQgaW50byBtZW1vcnkuXG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZpbGUgaXMgdG9vIGxhcmdlLCB1c2Ugc3RyZWFtIGluc3RlYWRcbiAgICAgICAgaWYgKCFyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBkYXRhIGZpbGU6ICR7ZmlsZX0sIG5vIHJlc3BvbnNlIGJvZHkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcblxuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBjcmVhdGUgQXJyYXlCdWZmZXIgZGlyZWN0bHlcbiAgICAgICAgICBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoZmlsZVNpemUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7XG4gICAgICAgICAgICAvLyB1c2UgV2ViQXNzZW1ibHkgTWVtb3J5IHRvIGFsbG9jYXRlIGxhcmdlciBBcnJheUJ1ZmZlclxuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwoZmlsZVNpemUgLyA2NTUzNik7XG4gICAgICAgICAgICBidWZmZXIgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOiBwYWdlcywgbWF4aW11bTogcGFnZXN9KS5idWZmZXI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBuZXcgVWludDhBcnJheShidWZmZXIsIG9mZnNldCwgY2h1bmtTaXplKTtcbiAgICAgICAgICBjaHVuay5zZXQodmFsdWUpO1xuICAgICAgICAgIG9mZnNldCArPSBjaHVua1NpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgMCwgZmlsZVNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSk7XG4gIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gZmlsZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZmlsZSk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RW52LCBJbmZlcmVuY2VTZXNzaW9uLCBUZW5zb3J9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7U2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXIsIFNlcmlhbGl6YWJsZVNlc3Npb25NZXRhZGF0YSwgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGEsIFRlbnNvck1ldGFkYXRhfSBmcm9tICcuL3Byb3h5LW1lc3NhZ2VzJztcbmltcG9ydCB7c2V0UnVuT3B0aW9uc30gZnJvbSAnLi9ydW4tb3B0aW9ucyc7XG5pbXBvcnQge3NldFNlc3Npb25PcHRpb25zfSBmcm9tICcuL3Nlc3Npb24tb3B0aW9ucyc7XG5pbXBvcnQge2RhdGFMb2NhdGlvblN0cmluZ1RvRW51bSwgZ2V0VGVuc29yRWxlbWVudFNpemUsIGlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSwgbG9nTGV2ZWxTdHJpbmdUb0VudW0sIHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nLCB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bSwgdGVuc29yVHlwZVRvVHlwZWRBcnJheUNvbnN0cnVjdG9yfSBmcm9tICcuL3dhc20tY29tbW9uJztcbmltcG9ydCB7Z2V0SW5zdGFuY2V9IGZyb20gJy4vd2FzbS1mYWN0b3J5JztcbmltcG9ydCB7YWxsb2NXYXNtU3RyaW5nLCBjaGVja0xhc3RFcnJvcn0gZnJvbSAnLi93YXNtLXV0aWxzJztcbmltcG9ydCB7bG9hZEZpbGV9IGZyb20gJy4vd2FzbS11dGlscy1sb2FkLWZpbGUnO1xuXG4vLyAjcmVnaW9uIEluaXRpYWxpemF0aW9uc1xuXG4vKipcbiAqIFRoZXJlIGFyZSA0IGRpZmZlcmVudCBcImluaXRpYWxpemF0aW9uXCIgc3RlcHMgZm9yIE9SVC4gVGhleSBoYXBwZW4gaW4gZGlmZmVyZW50IHBsYWNlcyBhbmQgZGlmZmVyZW50IHRpbWUuXG4gKlxuICogMS4gSmF2YVNjcmlwdCBpbml0aWFsaXphdGlvbiBmb3Igb25ueHJ1bnRpbWUtY29tbW9uIGFuZCBvbm54cnVudGltZS13ZWIuXG4gKiAgICBUaGlzIGlzIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzdGVwLiBJbiB0aGlzIHN0ZXAsIG9ubnhydW50aW1lLXdlYiBjYWxscyBvbm54cnVudGltZS1jb21tb24ncyByZWdpc3RlckJhY2tlbmQoKVxuICogZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgdG8gcmVnaXN0ZXIgYWxsIHRoZSBhdmFpbGFibGUgYmFja2VuZHMuIFRoZSBiYWNrZW5kIHJlZ2lzdHJhdGlvbiBpcyB2ZXJ5IGZhc3QuIEl0IG9ubHlcbiAqIHJlZ2lzdGVycyB0aGUgYmFja2VuZCBuYW1lIHdpdGggdGhlIHVuaW5pdGlhbGl6ZWQgYmFja2VuZCBvYmplY3QuIE5vIGhlYXZ5IGluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gdGhpcyBzdGVwLlxuICogICAgUmVmZXIgdG8gd2ViL2xpYi9pbmRleC50cyBmb3IgdGhlIGJhY2tlbmQgcmVnaXN0cmF0aW9uLlxuICpcbiAqIDIuIFdlYkFzc2VtYmx5IGFydGlmYWN0IGluaXRpYWxpemF0aW9uLlxuICogICAgVGhpcyBoYXBwZW5zIHdoZW4gYW55IHJlZ2lzdGVyZWQgd2FzbSBiYWNrZW5kIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCB0aW1lIChpZS4gYG9ydC5JbmZlcmVuY2VTZXNzaW9uLmNyZWF0ZSgpYCBvclxuICogYG9ydC5UcmFpbmluZ1Nlc3Npb24uY3JlYXRlKClgIGlzIGNhbGxlZCkuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIGRvZXMgdGhlIGZvbGxvd2luZ3M6XG4gKiAgICAgLSBjcmVhdGUgYSBwcm94eSB3b3JrZXIgYW5kIG1ha2Ugc3VyZSB0aGUgcHJveHkgd29ya2VyIGlzIHJlYWR5IHRvIHJlY2VpdmUgbWVzc2FnZXMsIGlmIHByb3h5IGlzIGVuYWJsZWQuXG4gKiAgICAgLSBwZXJmb3JtIGZlYXR1cmUgZGV0ZWN0aW9uLCBsb2NhdGUgY29ycmVjdCBXZWJBc3NlbWJseSBhcnRpZmFjdCBwYXRoIGFuZCBjYWxsIHRoZSBFbXNjcmlwdGVuIGdlbmVyYXRlZFxuICogSmF2YVNjcmlwdCBjb2RlIHRvIGluaXRpYWxpemUgdGhlIFdlYkFzc2VtYmx5IHJ1bnRpbWUuXG4gKiAgICAgICAgIC0gaWYgcHJveHkgaXMgZW5hYmxlZCwgdGhpcyBzdGVwIGhhcHBlbnMgaW4gdGhlIHByb3h5IHdvcmtlciB1c2luZyBtZXNzYWdlICdpbml0LXdhc20nLlxuICogICAgICAgICAtIGRvd25sb2FkaW5nIHRoZSAnb3J0LXdhc217Li4ufS53YXNtJyBmaWxlIGlzIGRvbmUgaW4gdGhpcyBzdGVwLlxuICogICAgICAgICAtIGlmIG11bHRpLXRocmVhZCBpcyBlbmFibGVkLCBvbmUgb3IgbW9yZSB3ZWJ3b3JrZXIgd2lsbCBiZSBjcmVhdGVkIHRvIGluaXRpYWxpemUgdGhlIFBUaHJlYWQgdGhyZWFkcG9vbC5cbiAqXG4gKiAzLiBPUlQgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgYWZ0ZXIgc3RlcCAyLiBJbiB0aGlzIHN0ZXAsIG9ubnhydW50aW1lLXdlYiBwZXJmb3JtcyBPTk5YIFJ1bnRpbWUgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24uXG4gKiBGdW5jdGlvbiBgX09ydEluaXQoKWAgaXMgY2FsbGVkIGluIHRoaXMgc3RlcC5cbiAqICAgICAtIGlmIHByb3h5IGlzIGVuYWJsZWQsIHRoaXMgc3RlcCBoYXBwZW5zIGluIHRoZSBwcm94eSB3b3JrZXIgdXNpbmcgbWVzc2FnZSAnaW5pdC1vcnQnLlxuICogICAgIC0gbG9nZ2luZyBsZXZlbCAob3J0LmVudi5sb2dMZXZlbCkgYW5kIHRocmVhZCBudW1iZXIgKG9ydC5lbnYud2FzbS5udW1UaHJlYWRzKSBhcmUgc2V0IGluIHRoaXMgc3RlcC5cbiAqXG4gKiA0LiBTZXNzaW9uIGluaXRpYWxpemF0aW9uLlxuICogICAgVGhpcyBoYXBwZW5zIHdoZW4gYG9ydC5JbmZlcmVuY2VTZXNzaW9uLmNyZWF0ZSgpYCBvciBgb3J0LlRyYWluaW5nU2Vzc2lvbi5jcmVhdGUoKWAgaXMgY2FsbGVkLiBVbmxpa2UgdGhlIGZpcnN0IDNcbiAqIHN0ZXBzICh0aGV5IG9ubHkgY2FsbGVkIG9uY2UpLCB0aGlzIHN0ZXAgd2lsbCBiZSBkb25lIGZvciBlYWNoIHNlc3Npb24uIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIGRvZXMgdGhlXG4gKiBmb2xsb3dpbmdzOlxuICogICAgSWYgdGhlIHBhcmFtZXRlciBpcyBhIFVSTDpcbiAqICAgIC0gZG93bmxvYWQgdGhlIG1vZGVsIGRhdGEgZnJvbSB0aGUgVVJMLlxuICogICAgLSBjb3B5IHRoZSBtb2RlbCBkYXRhIHRvIHRoZSBXQVNNIGhlYXAuIChwcm94eTogJ2NvcHktZnJvbScpXG4gKiAgICAtIGRlcmVmZXJlbmNlIHRoZSBtb2RlbCBidWZmZXIuIFRoaXMgc3RlcCBhbGxvd3MgdGhlIG9yaWdpbmFsIEFycmF5QnVmZmVyIHRvIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuICogICAgLSBjYWxsIGBfT3J0Q3JlYXRlU2Vzc2lvbigpYCB0byBjcmVhdGUgdGhlIHNlc3Npb24uIChwcm94eTogJ2NyZWF0ZScpXG4gKlxuICogICAgSWYgdGhlIHBhcmFtZXRlciBpcyBhIFVpbnQ4QXJyYXkgb2JqZWN0OlxuICogICAgLSBjb3B5IHRoZSBtb2RlbCBkYXRhIHRvIHRoZSBXQVNNIGhlYXAuIChwcm94eTogJ2NvcHktZnJvbScpXG4gKiAgICAtIGNhbGwgYF9PcnRDcmVhdGVTZXNzaW9uKClgIHRvIGNyZWF0ZSB0aGUgc2Vzc2lvbi4gKHByb3h5OiAnY3JlYXRlJylcbiAqXG4gKlxuICovXG5cbi8qKlxuICogaW5pdGlhbGl6ZSBPUlQgZW52aXJvbm1lbnQuXG4gKlxuICogQHBhcmFtIG51bVRocmVhZHMgU2V0R2xvYmFsSW50cmFPcE51bVRocmVhZHMobnVtVGhyZWFkcylcbiAqIEBwYXJhbSBsb2dnaW5nTGV2ZWwgQ3JlYXRlRW52KHN0YXRpY19jYXN0PE9ydExvZ2dpbmdMZXZlbD4obG9nZ2luZ19sZXZlbCkpXG4gKi9cbmNvbnN0IGluaXRPcnQgPSAobnVtVGhyZWFkczogbnVtYmVyLCBsb2dnaW5nTGV2ZWw6IG51bWJlcik6IHZvaWQgPT4ge1xuICBjb25zdCBlcnJvckNvZGUgPSBnZXRJbnN0YW5jZSgpLl9PcnRJbml0KG51bVRocmVhZHMsIGxvZ2dpbmdMZXZlbCk7XG4gIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBpbml0aWFsaXplIG9ubnhydW50aW1lLicpO1xuICB9XG59O1xuXG4vKipcbiAqIGludGlhbGl6ZSBydW50aW1lIGVudmlyb25tZW50LlxuICogQHBhcmFtIGVudiBwYXNzZWQgaW4gdGhlIGVudmlyb25tZW50IGNvbmZpZyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0UnVudGltZSA9IGFzeW5jKGVudjogRW52KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIC8vIGluaXQgT1JUXG4gIGluaXRPcnQoZW52Lndhc20ubnVtVGhyZWFkcyEsIGxvZ0xldmVsU3RyaW5nVG9FbnVtKGVudi5sb2dMZXZlbCkpO1xufTtcblxuLyoqXG4gKiBwZXJmb3JtIEVQIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIEBwYXJhbSBlbnZcbiAqIEBwYXJhbSBlcE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGluaXRFcCA9IGFzeW5jKGVudjogRW52LCBlcE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IGluaXRKc2VwID0gcmVxdWlyZSgnLi9qc2VwL2luaXQnKS5pbml0O1xuXG4gICAgaWYgKGVwTmFtZSA9PT0gJ3dlYmdwdScpIHtcbiAgICAgIC8vIHBlcmZvcm0gV2ViR1BVIGF2YWlsYWJpbGl0eSBjaGVja1xuICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8ICFuYXZpZ2F0b3IuZ3B1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViR1BVIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBlbnZpcm9ubWVudCcpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWRhcHRlciA9IGVudi53ZWJncHUuYWRhcHRlciBhcyBHUFVBZGFwdGVyIHwgbnVsbDtcbiAgICAgIGlmICghYWRhcHRlcikge1xuICAgICAgICAvLyBpZiBhZGFwdGVyIGlzIG5vdCBzZXQsIHJlcXVlc3QgYSBuZXcgYWRhcHRlci5cbiAgICAgICAgY29uc3QgcG93ZXJQcmVmZXJlbmNlID0gZW52LndlYmdwdS5wb3dlclByZWZlcmVuY2U7XG4gICAgICAgIGlmIChwb3dlclByZWZlcmVuY2UgIT09IHVuZGVmaW5lZCAmJiBwb3dlclByZWZlcmVuY2UgIT09ICdsb3ctcG93ZXInICYmXG4gICAgICAgICAgICBwb3dlclByZWZlcmVuY2UgIT09ICdoaWdoLXBlcmZvcm1hbmNlJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3dlclByZWZlcmVuY2Ugc2V0dGluZzogXCIke3Bvd2VyUHJlZmVyZW5jZX1cImApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcmNlRmFsbGJhY2tBZGFwdGVyID0gZW52LndlYmdwdS5mb3JjZUZhbGxiYWNrQWRhcHRlcjtcbiAgICAgICAgaWYgKGZvcmNlRmFsbGJhY2tBZGFwdGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGZvcmNlRmFsbGJhY2tBZGFwdGVyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9yY2VGYWxsYmFja0FkYXB0ZXIgc2V0dGluZzogXCIke2ZvcmNlRmFsbGJhY2tBZGFwdGVyfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoe3Bvd2VyUHJlZmVyZW5jZSwgZm9yY2VGYWxsYmFja0FkYXB0ZXJ9KTtcbiAgICAgICAgaWYgKCFhZGFwdGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdldCBHUFUgYWRhcHRlci4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IG5lZWQgdG8gZW5hYmxlIGZsYWcgXCItLWVuYWJsZS11bnNhZmUtd2ViZ3B1XCIgaWYgeW91IGFyZSB1c2luZyBDaHJvbWUuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIGFkYXB0ZXIgaXMgc2V0LCB2YWxpZGF0ZSBpdC5cbiAgICAgICAgaWYgKHR5cGVvZiBhZGFwdGVyLmxpbWl0cyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGFkYXB0ZXIuZmVhdHVyZXMgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICB0eXBlb2YgYWRhcHRlci5yZXF1ZXN0RGV2aWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEdQVSBhZGFwdGVyIHNldCBpbiBgZW52LndlYmdwdS5hZGFwdGVyYC4gSXQgbXVzdCBiZSBhIEdQVUFkYXB0ZXIgb2JqZWN0LicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZW52Lndhc20uc2ltZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnTm90IHN1cHBvcnRlZCBmb3IgV2ViR1BVPU9OIGFuZCBTSU1EPU9GRi4gUGxlYXNlIHNldCBgZW52Lndhc20uc2ltZGAgdG8gdHJ1ZSB3aGVuIHVzaW5nIGB3ZWJncHVgIEVQJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGluaXRKc2VwKCd3ZWJncHUnLCBnZXRJbnN0YW5jZSgpLCBlbnYsIGFkYXB0ZXIpO1xuICAgIH1cbiAgICBpZiAoZXBOYW1lID09PSAnd2Vibm4nKSB7XG4gICAgICAvLyBwZXJmb3JtIFdlYk5OIGF2YWlsYWJpbGl0eSBjaGVja1xuICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8ICEobmF2aWdhdG9yIGFzIHVua25vd24gYXMge21sOiB1bmtub3dufSkubWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJOTiBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgaW5pdEpzZXAoJ3dlYm5uJywgZ2V0SW5zdGFuY2UoKSwgZW52KTtcbiAgICB9XG4gIH1cbn07XG5cbi8vICNlbmRyZWdpb24gSW5pdGlhbGl6YXRpb25zXG5cbi8qKlxuICogdmFsaWQgZGF0YSBsb2NhdGlvbnMgZm9yIGlucHV0L291dHB1dCB0ZW5zb3JzLlxuICovXG50eXBlIFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0ID0gJ2NwdSd8J2NwdS1waW5uZWQnfCdncHUtYnVmZmVyJztcblxudHlwZSBJT0JpbmRpbmdTdGF0ZSA9IHtcbiAgLyoqXG4gICAqIHRoZSBoYW5kbGUgb2YgSU8gYmluZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGZvciBlYWNoIG91dHB1dCB0ZW5zb3IuXG4gICAqXG4gICAqIHZhbHVlIGlzIG9uZSBvZiAnY3B1JywgJ2NwdS1waW5uZWQnLCAnZ3B1LWJ1ZmZlcicuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnM6IHJlYWRvbmx5IFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0W107XG5cbiAgLyoqXG4gICAqIGVudW0gdmFsdWUgb2YgdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBmb3IgZWFjaCBvdXRwdXQgdGVuc29yLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZDogcmVhZG9ubHkgbnVtYmVyW107XG59O1xuXG4vKipcbiAqICB0dXBsZSBlbGVtZW50cyBhcmU6IEluZmVyZW5jZVNlc3Npb24gSUQ7IGlucHV0TmFtZXNVVEY4RW5jb2RlZDsgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZDsgYmluZGluZ1N0YXRlXG4gKi9cbnR5cGUgU2Vzc2lvbk1ldGFkYXRhID0gW1xuICBpbmZlcmVuY2VTZXNzaW9uSWQ6IG51bWJlciwgaW5wdXROYW1lc1VURjhFbmNvZGVkOiBudW1iZXJbXSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZDogbnVtYmVyW10sXG4gIGJpbmRpbmdTdGF0ZTogSU9CaW5kaW5nU3RhdGV8bnVsbCwgZW5hYmxlR3JhcGhDYXB0dXJlOiBib29sZWFuLCBpbnB1dE91dHB1dEJvdW5kOiBib29sZWFuXG5dO1xuXG5jb25zdCBhY3RpdmVTZXNzaW9ucyA9IG5ldyBNYXA8bnVtYmVyLCBTZXNzaW9uTWV0YWRhdGE+KCk7XG5cbi8qKlxuICogZ2V0IHRoZSBpbnB1dC9vdXRwdXQgY291bnQgb2YgdGhlIHNlc3Npb24uXG4gKiBAcGFyYW0gc2Vzc2lvbkhhbmRsZSB0aGUgaGFuZGxlIHJlcHJlc2VudGluZyB0aGUgc2Vzc2lvbi4gc2hvdWxkIGJlIG5vbi16ZXJvLlxuICogQHJldHVybnMgYSB0dXBsZSBpbmNsdWRpbmcgMiBudW1iZXJzLCByZXByZXNlbnRpbmcgdGhlIGlucHV0IGNvdW50IGFuZCBvdXRwdXQgY291bnQuXG4gKi9cbmNvbnN0IGdldFNlc3Npb25JbnB1dE91dHB1dENvdW50ID0gKHNlc3Npb25IYW5kbGU6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoOCk7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudChzZXNzaW9uSGFuZGxlLCBkYXRhT2Zmc2V0LCBkYXRhT2Zmc2V0ICsgNCk7XG4gICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IHNlc3Npb24gaW5wdXQvb3V0cHV0IGNvdW50LicpO1xuICAgIH1cbiAgICByZXR1cm4gW3dhc20uSEVBUDMyW2RhdGFPZmZzZXQgLyA0XSwgd2FzbS5IRUFQMzJbZGF0YU9mZnNldCAvIDQgKyAxXV07XG4gIH0gZmluYWxseSB7XG4gICAgd2FzbS5zdGFja1Jlc3RvcmUoc3RhY2spO1xuICB9XG59O1xuXG4vKipcbiAqIGFsbG9jYXRlIHRoZSBtZW1vcnkgYW5kIG1lbWNweSB0aGUgZXh0ZXJuYWwgYnVmZmVyLlxuICpcbiAqIEBwYXJhbSBtb2RlbCAtIHRoZSBleHRlcm5hbCBidWZmZXIgY29udGFpbmluZyB0aGUgbW9kZWwgZGF0YS4gTXVzdCBub3QgYmUgdGhlIHNhbWUgYnVmZmVyIGFzIHRoZSBXQVNNIGhlYXAuXG4gKiBAcmV0dXJucyBhIDItZWxlbWVudHMgdHVwbGUgLSB0aGUgcG9pbnRlciBhbmQgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlclxuICovXG5leHBvcnQgY29uc3QgY29weUZyb21FeHRlcm5hbEJ1ZmZlciA9IChtb2RlbDogVWludDhBcnJheSk6IFtudW1iZXIsIG51bWJlcl0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3QgbW9kZWxEYXRhT2Zmc2V0ID0gd2FzbS5fbWFsbG9jKG1vZGVsLmJ5dGVMZW5ndGgpO1xuICBpZiAobW9kZWxEYXRhT2Zmc2V0ID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBjcmVhdGUgYSBzZXNzaW9uLiBmYWlsZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIgb2Ygc2l6ZSAke21vZGVsLmJ5dGVMZW5ndGh9LmApO1xuICB9XG4gIHdhc20uSEVBUFU4LnNldChtb2RlbCwgbW9kZWxEYXRhT2Zmc2V0KTtcbiAgcmV0dXJuIFttb2RlbERhdGFPZmZzZXQsIG1vZGVsLmJ5dGVMZW5ndGhdO1xufTtcblxuLyoqXG4gKiBjcmVhdGUgYW4gaW5mZXJlbmNlIHNlc3Npb24gZnJvbSBhIG1vZGVsIGRhdGEgYnVmZmVyLlxuICpcbiAqIEBwYXJhbSBtb2RlbERhdGEgLSBlaXRoZXIgYSBVaW50OEFycmF5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG1vZGVsIGRhdGEsIG9yIGEgMi1lbGVtZW50cyB0dXBsZSBjb250YWluaW5nIHRoZVxuICogICAgIHBvaW50ZXIgYW5kIHNpemUgb2YgdGhlIG1vZGVsIGRhdGEgYnVmZmVyLlxuICogQHBhcmFtIG9wdGlvbnMgYW4gb3B0aW9uYWwgc2Vzc2lvbiBvcHRpb25zIG9iamVjdC5cbiAqIEByZXR1cm5zIGEgMy1lbGVtZW50cyB0dXBsZSBjb250YWluaW5nIFtzZXNzaW9uIGhhbmRsZSwgaW5wdXQgbmFtZXMsIG91dHB1dCBuYW1lc11cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlc3Npb24gPSBhc3luYyhcbiAgICBtb2RlbERhdGE6IFVpbnQ4QXJyYXl8U2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXIsXG4gICAgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPFNlcmlhbGl6YWJsZVNlc3Npb25NZXRhZGF0YT4gPT4ge1xuICBsZXQgbW9kZWxEYXRhT2Zmc2V0OiBudW1iZXIsIG1vZGVsRGF0YUxlbmd0aDogbnVtYmVyO1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbERhdGEpKSB7XG4gICAgLy8gaWYgbW9kZWwgZGF0YSBpcyBhbiBhcnJheSwgaXQgbXVzdCBiZSBhIDItZWxlbWVudHMgdHVwbGUgY29udGFpbmluZyB0aGUgcG9pbnRlciBhbmQgc2l6ZSBvZiB0aGUgbW9kZWwgZGF0YVxuICAgIFttb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aF0gPSBtb2RlbERhdGE7XG4gIH0gZWxzZSBpZiAobW9kZWxEYXRhLmJ1ZmZlciA9PT0gd2FzbS5IRUFQVTguYnVmZmVyKSB7XG4gICAgLy8gaWYgbW9kZWwgZGF0YSB1c2VzIHRoZSBzYW1lIGJ1ZmZlciBhcyB0aGUgV0FTTSBoZWFwLCB3ZSBkb24ndCBuZWVkIHRvIGNvcHkgaXQuXG4gICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IFttb2RlbERhdGEuYnl0ZU9mZnNldCwgbW9kZWxEYXRhLmJ5dGVMZW5ndGhdO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSwgY29weSB0aGUgbW9kZWwgZGF0YSB0byB0aGUgV0FTTSBoZWFwLlxuICAgIFttb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aF0gPSBjb3B5RnJvbUV4dGVybmFsQnVmZmVyKG1vZGVsRGF0YSk7XG4gIH1cblxuICBsZXQgc2Vzc2lvbkhhbmRsZSA9IDA7XG4gIGxldCBzZXNzaW9uT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGxldCBpb0JpbmRpbmdIYW5kbGUgPSAwO1xuICBsZXQgYWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBpbnB1dE5hbWVzVVRGOEVuY29kZWQgPSBbXTtcbiAgY29uc3Qgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCA9IFtdO1xuXG4gIHRyeSB7XG4gICAgW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdID0gc2V0U2Vzc2lvbk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucz8uZXh0ZXJuYWxEYXRhICYmIHdhc20ubW91bnRFeHRlcm5hbERhdGEpIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdQcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIG9wdGlvbnMuZXh0ZXJuYWxEYXRhKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycgPyBmaWxlIDogZmlsZS5wYXRoO1xuICAgICAgICBsb2FkaW5nUHJvbWlzZXMucHVzaChsb2FkRmlsZSh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycgPyBmaWxlIDogZmlsZS5kYXRhKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIHdhc20ubW91bnRFeHRlcm5hbERhdGEhKHBhdGgsIGRhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdhaXQgZm9yIGFsbCBleHRlcm5hbCBkYXRhIGZpbGVzIHRvIGJlIGxvYWRlZFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZ1Byb21pc2VzKTtcbiAgICB9XG5cbiAgICBzZXNzaW9uSGFuZGxlID0gYXdhaXQgd2FzbS5fT3J0Q3JlYXRlU2Vzc2lvbihtb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aCwgc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIGlmIChzZXNzaW9uSGFuZGxlID09PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBjcmVhdGUgYSBzZXNzaW9uLicpO1xuICAgIH1cblxuICAgIGNvbnN0IFtpbnB1dENvdW50LCBvdXRwdXRDb3VudF0gPSBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudChzZXNzaW9uSGFuZGxlKTtcblxuICAgIGNvbnN0IGVuYWJsZUdyYXBoQ2FwdHVyZSA9ICEhb3B0aW9ucz8uZW5hYmxlR3JhcGhDYXB0dXJlO1xuXG4gICAgY29uc3QgaW5wdXROYW1lcyA9IFtdO1xuICAgIGNvbnN0IG91dHB1dE5hbWVzID0gW107XG4gICAgY29uc3Qgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zOiBTdXBwb3J0ZWRUZW5zb3JEYXRhTG9jYXRpb25Gb3JJbnB1dE91dHB1dFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB3YXNtLl9PcnRHZXRJbnB1dE5hbWUoc2Vzc2lvbkhhbmRsZSwgaSk7XG4gICAgICBpZiAobmFtZSA9PT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBnZXQgYW4gaW5wdXQgbmFtZS4nKTtcbiAgICAgIH1cbiAgICAgIGlucHV0TmFtZXNVVEY4RW5jb2RlZC5wdXNoKG5hbWUpO1xuICAgICAgaW5wdXROYW1lcy5wdXNoKHdhc20uVVRGOFRvU3RyaW5nKG5hbWUpKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBuYW1lID0gd2FzbS5fT3J0R2V0T3V0cHV0TmFtZShzZXNzaW9uSGFuZGxlLCBpKTtcbiAgICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBhbiBvdXRwdXQgbmFtZS4nKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dE5hbWVzVVRGOEVuY29kZWQucHVzaChuYW1lKTtcbiAgICAgIGNvbnN0IG5hbWVTdHJpbmcgPSB3YXNtLlVURjhUb1N0cmluZyhuYW1lKTtcbiAgICAgIG91dHB1dE5hbWVzLnB1c2gobmFtZVN0cmluZyk7XG5cbiAgICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSkge1xuICAgICAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlICYmIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMucHVzaCgnZ3B1LWJ1ZmZlcicpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdHlwZW9mIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICBvcHRpb25zLnByZWZlcnJlZE91dHB1dExvY2F0aW9uIDpcbiAgICAgICAgICAgIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uPy5bbmFtZVN0cmluZ10gPz8gJ2NwdSc7XG4gICAgICAgIGlmIChsb2NhdGlvbiAhPT0gJ2NwdScgJiYgbG9jYXRpb24gIT09ICdjcHUtcGlubmVkJyAmJiBsb2NhdGlvbiAhPT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9ydGVkIHByZWZlcnJlZCBvdXRwdXQgbG9jYXRpb246ICR7bG9jYXRpb259LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUgJiYgbG9jYXRpb24gIT09ICdncHUtYnVmZmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHN1cHBvcnRlZCBwcmVmZXJyZWQgb3V0cHV0IGxvY2F0aW9uOiAke1xuICAgICAgICAgICAgICBsb2NhdGlvbn0uIE9ubHkgJ2dwdS1idWZmZXInIGxvY2F0aW9uIGlzIHN1cHBvcnRlZCB3aGVuIGVuYWJsZUdyYXBoQ2FwdHVyZSBpcyB0cnVlLmApO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1c2UgSU8gYmluZGluZyBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIG91dHB1dCBpcyBwcmVmZmVyZWQgdG8gYmUgb24gR1BVLlxuICAgIGxldCBiaW5kaW5nU3RhdGU6IElPQmluZGluZ1N0YXRlfG51bGwgPSBudWxsO1xuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMuc29tZShsID0+IGwgPT09ICdncHUtYnVmZmVyJykpIHtcbiAgICAgIGlvQmluZGluZ0hhbmRsZSA9IHdhc20uX09ydENyZWF0ZUJpbmRpbmcoc2Vzc2lvbkhhbmRsZSk7XG4gICAgICBpZiAoaW9CaW5kaW5nSGFuZGxlID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGNyZWF0ZSBJTyBiaW5kaW5nLicpO1xuICAgICAgfVxuXG4gICAgICBiaW5kaW5nU3RhdGUgPSB7XG4gICAgICAgIGhhbmRsZTogaW9CaW5kaW5nSGFuZGxlLFxuICAgICAgICBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMsXG4gICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWQ6IG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5tYXAobCA9PiBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obCkpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhY3RpdmVTZXNzaW9ucy5zZXQoXG4gICAgICAgIHNlc3Npb25IYW5kbGUsXG4gICAgICAgIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGJpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlLCBmYWxzZV0pO1xuICAgIHJldHVybiBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lcywgb3V0cHV0TmFtZXNdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG4gICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKGJ1ZiA9PiB3YXNtLl9PcnRGcmVlKGJ1ZikpO1xuXG4gICAgaWYgKGlvQmluZGluZ0hhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZUJpbmRpbmcoaW9CaW5kaW5nSGFuZGxlKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbkhhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZVNlc3Npb24oc2Vzc2lvbkhhbmRsZSk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH0gZmluYWxseSB7XG4gICAgd2FzbS5fZnJlZShtb2RlbERhdGFPZmZzZXQpO1xuICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zKHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICB9XG4gICAgYWxsb2NzLmZvckVhY2goYWxsb2MgPT4gd2FzbS5fZnJlZShhbGxvYykpO1xuXG4gICAgLy8gdW5tb3VudCBleHRlcm5hbCBkYXRhIGlmIG5lY2Vzc2FyeVxuICAgIHdhc20udW5tb3VudEV4dGVybmFsRGF0YT8uKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWxlYXNlU2Vzc2lvbiA9IChzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCByZWxlYXNlIHNlc3Npb24uIGludmFsaWQgc2Vzc2lvbiBpZDogJHtzZXNzaW9uSWR9YCk7XG4gIH1cbiAgY29uc3QgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZV0gPSBzZXNzaW9uO1xuXG4gIGlmIChpb0JpbmRpbmdTdGF0ZSkge1xuICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUpIHtcbiAgICAgIHdhc20uX09ydENsZWFyQm91bmRPdXRwdXRzKGlvQmluZGluZ1N0YXRlLmhhbmRsZSk7XG4gICAgfVxuICAgIHdhc20uX09ydFJlbGVhc2VCaW5kaW5nKGlvQmluZGluZ1N0YXRlLmhhbmRsZSk7XG4gIH1cblxuICB3YXNtLmpzZXBPblJlbGVhc2VTZXNzaW9uPy4oc2Vzc2lvbklkKTtcblxuICBpbnB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcbiAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKGJ1ZiA9PiB3YXNtLl9PcnRGcmVlKGJ1ZikpO1xuICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbihzZXNzaW9uSGFuZGxlKTtcbiAgYWN0aXZlU2Vzc2lvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZUlucHV0T3V0cHV0VGVuc29yID1cbiAgICAodGVuc29yOiBUZW5zb3JNZXRhZGF0YXxudWxsLCB0ZW5zb3JIYW5kbGVzOiBudW1iZXJbXSwgYWxsb2NzOiBudW1iZXJbXSwgc2Vzc2lvbklkOiBudW1iZXIsIGluZGV4OiBudW1iZXIsXG4gICAgIGVuYWJsZUdyYXBoQ2FwdHVyZSA9IGZhbHNlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRlbnNvcikge1xuICAgICAgICB0ZW5zb3JIYW5kbGVzLnB1c2goMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yWzBdO1xuICAgICAgY29uc3QgZGltcyA9IHRlbnNvclsxXTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGVuc29yWzNdO1xuXG4gICAgICBsZXQgcmF3RGF0YTogbnVtYmVyO1xuICAgICAgbGV0IGRhdGFCeXRlTGVuZ3RoOiBudW1iZXI7XG5cbiAgICAgIGlmIChkYXRhVHlwZSA9PT0gJ3N0cmluZycgJiYgbG9jYXRpb24gPT09ICdncHUtYnVmZmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiBHUFUuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUgJiYgbG9jYXRpb24gIT09ICdncHUtYnVmZmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXh0ZXJuYWwgYnVmZmVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIGlucHV0L291dHB1dCBpbmRleCAke2luZGV4fSB3aGVuIGVuYWJsZUdyYXBoQ2FwdHVyZSBpcyB0cnVlLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9jYXRpb24gPT09ICdncHUtYnVmZmVyJykge1xuICAgICAgICBjb25zdCBncHVCdWZmZXIgPSB0ZW5zb3JbMl0uZ3B1QnVmZmVyIGFzIEdQVUJ1ZmZlcjtcbiAgICAgICAgY29uc3QgZWxlbWVudFNpemVJbkJ5dGVzID0gZ2V0VGVuc29yRWxlbWVudFNpemUodGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0oZGF0YVR5cGUpKSE7XG4gICAgICAgIGRhdGFCeXRlTGVuZ3RoID0gZGltcy5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKSAqIGVsZW1lbnRTaXplSW5CeXRlcztcblxuICAgICAgICBjb25zdCByZWdpc3RlckJ1ZmZlciA9IHdhc20uanNlcFJlZ2lzdGVyQnVmZmVyO1xuICAgICAgICBpZiAoIXJlZ2lzdGVyQnVmZmVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZW5zb3IgbG9jYXRpb24gXCJncHUtYnVmZmVyXCIgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IHVzaW5nIFdlYkdQVS4nKTtcbiAgICAgICAgfVxuICAgICAgICByYXdEYXRhID0gcmVnaXN0ZXJCdWZmZXIoc2Vzc2lvbklkLCBpbmRleCwgZ3B1QnVmZmVyLCBkYXRhQnl0ZUxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkYXRhID0gdGVuc29yWzJdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgLy8gc3RyaW5nIHRlbnNvclxuICAgICAgICAgIGRhdGFCeXRlTGVuZ3RoID0gNCAqIGRhdGEubGVuZ3RoO1xuICAgICAgICAgIHJhd0RhdGEgPSB3YXNtLl9tYWxsb2MoZGF0YUJ5dGVMZW5ndGgpO1xuICAgICAgICAgIGFsbG9jcy5wdXNoKHJhd0RhdGEpO1xuICAgICAgICAgIGxldCBkYXRhSW5kZXggPSByYXdEYXRhIC8gNDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdGVuc29yIGRhdGEgYXQgaW5kZXggJHtpfSBpcyBub3QgYSBzdHJpbmdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhc20uSEVBUFUzMltkYXRhSW5kZXgrK10gPSBhbGxvY1dhc21TdHJpbmcoZGF0YVtpXSwgYWxsb2NzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgcmF3RGF0YSA9IHdhc20uX21hbGxvYyhkYXRhQnl0ZUxlbmd0aCk7XG4gICAgICAgICAgYWxsb2NzLnB1c2gocmF3RGF0YSk7XG4gICAgICAgICAgd2FzbS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGFCeXRlTGVuZ3RoKSwgcmF3RGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICAgICAgY29uc3QgZGltc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0ICogZGltcy5sZW5ndGgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGRpbUluZGV4ID0gZGltc09mZnNldCAvIDQ7XG4gICAgICAgIGRpbXMuZm9yRWFjaChkID0+IHdhc20uSEVBUDMyW2RpbUluZGV4KytdID0gZCk7XG4gICAgICAgIGNvbnN0IHRlbnNvciA9IHdhc20uX09ydENyZWF0ZVRlbnNvcihcbiAgICAgICAgICAgIHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtKGRhdGFUeXBlKSwgcmF3RGF0YSwgZGF0YUJ5dGVMZW5ndGgsIGRpbXNPZmZzZXQsIGRpbXMubGVuZ3RoLFxuICAgICAgICAgICAgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtKGxvY2F0aW9uKSk7XG4gICAgICAgIGlmICh0ZW5zb3IgPT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgY3JlYXRlIHRlbnNvciBmb3IgaW5wdXQvb3V0cHV0LiBzZXNzaW9uPSR7c2Vzc2lvbklkfSwgaW5kZXg9JHtpbmRleH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGVuc29ySGFuZGxlcy5wdXNoKHRlbnNvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgICB9XG4gICAgfTtcblxuLyoqXG4gKiBwZXJmb3JtIGluZmVyZW5jZSBydW5cbiAqL1xuZXhwb3J0IGNvbnN0IHJ1biA9IGFzeW5jKFxuICAgIHNlc3Npb25JZDogbnVtYmVyLCBpbnB1dEluZGljZXM6IG51bWJlcltdLCBpbnB1dFRlbnNvcnM6IFRlbnNvck1ldGFkYXRhW10sIG91dHB1dEluZGljZXM6IG51bWJlcltdLFxuICAgIG91dHB1dFRlbnNvcnM6IEFycmF5PFRlbnNvck1ldGFkYXRhfG51bGw+LCBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFRlbnNvck1ldGFkYXRhW10+ID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IHNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcnVuIGluZmVyZW5jZS4gaW52YWxpZCBzZXNzaW9uIGlkOiAke3Nlc3Npb25JZH1gKTtcbiAgfVxuICBjb25zdCBzZXNzaW9uSGFuZGxlID0gc2Vzc2lvblswXTtcbiAgY29uc3QgaW5wdXROYW1lc1VURjhFbmNvZGVkID0gc2Vzc2lvblsxXTtcbiAgY29uc3Qgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCA9IHNlc3Npb25bMl07XG4gIGNvbnN0IGlvQmluZGluZ1N0YXRlID0gc2Vzc2lvblszXTtcbiAgY29uc3QgZW5hYmxlR3JhcGhDYXB0dXJlID0gc2Vzc2lvbls0XTtcbiAgY29uc3QgaW5wdXRPdXRwdXRCb3VuZCA9IHNlc3Npb25bNV07XG5cbiAgY29uc3QgaW5wdXRDb3VudCA9IGlucHV0SW5kaWNlcy5sZW5ndGg7XG4gIGNvbnN0IG91dHB1dENvdW50ID0gb3V0cHV0SW5kaWNlcy5sZW5ndGg7XG5cbiAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICBsZXQgcnVuT3B0aW9uc0FsbG9jczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBpbnB1dFRlbnNvckhhbmRsZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IG91dHB1dFRlbnNvckhhbmRsZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGlucHV0T3V0cHV0QWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGJlZm9yZVJ1blN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgY29uc3QgaW5wdXRWYWx1ZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoaW5wdXRDb3VudCAqIDQpO1xuICBjb25zdCBpbnB1dE5hbWVzT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKGlucHV0Q291bnQgKiA0KTtcbiAgY29uc3Qgb3V0cHV0VmFsdWVzT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKG91dHB1dENvdW50ICogNCk7XG4gIGNvbnN0IG91dHB1dE5hbWVzT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKG91dHB1dENvdW50ICogNCk7XG5cbiAgdHJ5IHtcbiAgICBbcnVuT3B0aW9uc0hhbmRsZSwgcnVuT3B0aW9uc0FsbG9jc10gPSBzZXRSdW5PcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gY3JlYXRlIGlucHV0IHRlbnNvcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgcHJlcGFyZUlucHV0T3V0cHV0VGVuc29yKFxuICAgICAgICAgIGlucHV0VGVuc29yc1tpXSwgaW5wdXRUZW5zb3JIYW5kbGVzLCBpbnB1dE91dHB1dEFsbG9jcywgc2Vzc2lvbklkLCBpbnB1dEluZGljZXNbaV0sIGVuYWJsZUdyYXBoQ2FwdHVyZSk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIG91dHB1dCB0ZW5zb3JzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgb3V0cHV0VGVuc29yc1tpXSwgb3V0cHV0VGVuc29ySGFuZGxlcywgaW5wdXRPdXRwdXRBbGxvY3MsIHNlc3Npb25JZCwgaW5wdXRDb3VudCArIG91dHB1dEluZGljZXNbaV0sXG4gICAgICAgICAgZW5hYmxlR3JhcGhDYXB0dXJlKTtcbiAgICB9XG5cbiAgICBsZXQgaW5wdXRWYWx1ZXNJbmRleCA9IGlucHV0VmFsdWVzT2Zmc2V0IC8gNDtcbiAgICBsZXQgaW5wdXROYW1lc0luZGV4ID0gaW5wdXROYW1lc09mZnNldCAvIDQ7XG4gICAgbGV0IG91dHB1dFZhbHVlc0luZGV4ID0gb3V0cHV0VmFsdWVzT2Zmc2V0IC8gNDtcbiAgICBsZXQgb3V0cHV0TmFtZXNJbmRleCA9IG91dHB1dE5hbWVzT2Zmc2V0IC8gNDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgd2FzbS5IRUFQVTMyW2lucHV0VmFsdWVzSW5kZXgrK10gPSBpbnB1dFRlbnNvckhhbmRsZXNbaV07XG4gICAgICB3YXNtLkhFQVBVMzJbaW5wdXROYW1lc0luZGV4KytdID0gaW5wdXROYW1lc1VURjhFbmNvZGVkW2lucHV0SW5kaWNlc1tpXV07XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgd2FzbS5IRUFQVTMyW291dHB1dFZhbHVlc0luZGV4KytdID0gb3V0cHV0VGVuc29ySGFuZGxlc1tpXTtcbiAgICAgIHdhc20uSEVBUFUzMltvdXRwdXROYW1lc0luZGV4KytdID0gb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtvdXRwdXRJbmRpY2VzW2ldXTtcbiAgICB9XG5cbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgJiYgaW9CaW5kaW5nU3RhdGUgJiYgIWlucHV0T3V0cHV0Qm91bmQpIHtcbiAgICAgIGNvbnN0IHtoYW5kbGUsIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucywgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZH0gPSBpb0JpbmRpbmdTdGF0ZTtcblxuICAgICAgaWYgKGlucHV0TmFtZXNVVEY4RW5jb2RlZC5sZW5ndGggIT09IGlucHV0Q291bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCBjb3VudCBmcm9tIGZlZWRzICgke1xuICAgICAgICAgICAgaW5wdXRDb3VudH0pIGlzIGV4cGVjdGVkIHRvIGJlIGFsd2F5cyBlcXVhbCB0byBtb2RlbCdzIGlucHV0IGNvdW50ICgke2lucHV0TmFtZXNVVEY4RW5jb2RlZC5sZW5ndGh9KS5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gcHJvY2VzcyBpbnB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5wdXRJbmRpY2VzW2ldO1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCB3YXNtLl9PcnRCaW5kSW5wdXQoaGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWRbaW5kZXhdLCBpbnB1dFRlbnNvckhhbmRsZXNbaV0pO1xuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgaW5wdXRbJHtpfV0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHByb2Nlc3MgcHJlLWFsbG9jYXRlZCBvdXRwdXRzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBvdXRwdXRJbmRpY2VzW2ldO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IG91dHB1dFRlbnNvcnNbaV0/LlszXTsgIC8vIHVuZGVmaW5lZCBtZWFucyBvdXRwdXQgaXMgbm90IHByZS1hbGxvY2F0ZWQuXG5cbiAgICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgICAgLy8gb3V0cHV0IGlzIHByZS1hbGxvY2F0ZWQuIGJpbmQgdGhlIHRlbnNvci5cbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLl9PcnRCaW5kT3V0cHV0KGhhbmRsZSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIG91dHB1dFRlbnNvckhhbmRsZXNbaV0sIDApO1xuICAgICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBiaW5kIHByZS1hbGxvY2F0ZWQgb3V0cHV0WyR7aX1dIGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3V0cHV0IGlzIG5vdCBwcmUtYWxsb2NhdGVkLiByZXNldCBwcmVmZXJyZWQgbG9jYXRpb24uXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlID1cbiAgICAgICAgICAgICAgd2FzbS5fT3J0QmluZE91dHB1dChoYW5kbGUsIG91dHB1dE5hbWVzVVRGOEVuY29kZWRbaW5kZXhdLCAwLCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkW2luZGV4XSk7XG4gICAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgb3V0cHV0WyR7aX1dIHRvICR7b3V0cHV0UHJlZmVycmVkTG9jYXRpb25zW2ldfSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY3RpdmVTZXNzaW9ucy5zZXQoXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGlvQmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIHRydWVdKTtcbiAgICB9XG5cbiAgICB3YXNtLmpzZXBPblJ1blN0YXJ0Py4oc2Vzc2lvbkhhbmRsZSk7XG4gICAgbGV0IGVycm9yQ29kZTogbnVtYmVyO1xuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBpb0JpbmRpbmdTdGF0ZSkge1xuICAgICAgZXJyb3JDb2RlID0gYXdhaXQgd2FzbS5fT3J0UnVuV2l0aEJpbmRpbmcoXG4gICAgICAgICAgc2Vzc2lvbkhhbmRsZSwgaW9CaW5kaW5nU3RhdGUuaGFuZGxlLCBvdXRwdXRDb3VudCwgb3V0cHV0VmFsdWVzT2Zmc2V0LCBydW5PcHRpb25zSGFuZGxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JDb2RlID0gYXdhaXQgd2FzbS5fT3J0UnVuKFxuICAgICAgICAgIHNlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNPZmZzZXQsIGlucHV0VmFsdWVzT2Zmc2V0LCBpbnB1dENvdW50LCBvdXRwdXROYW1lc09mZnNldCwgb3V0cHV0Q291bnQsXG4gICAgICAgICAgb3V0cHV0VmFsdWVzT2Zmc2V0LCBydW5PcHRpb25zSGFuZGxlKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcignZmFpbGVkIHRvIGNhbGwgT3J0UnVuKCkuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0OiBUZW5zb3JNZXRhZGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHRlbnNvciA9IHdhc20uSEVBUFUzMltvdXRwdXRWYWx1ZXNPZmZzZXQgLyA0ICsgaV07XG4gICAgICBpZiAodGVuc29yID09PSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldKSB7XG4gICAgICAgIC8vIG91dHB1dCB0ZW5zb3IgaXMgcHJlLWFsbG9jYXRlZC4gbm8gbmVlZCB0byBjb3B5IGRhdGEuXG4gICAgICAgIG91dHB1dC5wdXNoKG91dHB1dFRlbnNvcnNbaV0hKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJlZm9yZUdldFRlbnNvckRhdGFTdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gICAgICAvLyBzdGFjayBhbGxvY2F0ZSA0IHBvaW50ZXIgdmFsdWVcbiAgICAgIGNvbnN0IHRlbnNvckRhdGFPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoNCAqIDQpO1xuXG4gICAgICBsZXQga2VlcE91dHB1dFRlbnNvciA9IGZhbHNlO1xuICAgICAgbGV0IHR5cGU6IFRlbnNvci5UeXBlfHVuZGVmaW5lZCwgZGF0YU9mZnNldCA9IDA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLl9PcnRHZXRUZW5zb3JEYXRhKFxuICAgICAgICAgICAgdGVuc29yLCB0ZW5zb3JEYXRhT2Zmc2V0LCB0ZW5zb3JEYXRhT2Zmc2V0ICsgNCwgdGVuc29yRGF0YU9mZnNldCArIDgsIHRlbnNvckRhdGFPZmZzZXQgKyAxMik7XG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYWNjZXNzIG91dHB1dCB0ZW5zb3IgZGF0YSBvbiBpbmRleCAke2l9LmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0ZW5zb3JEYXRhSW5kZXggPSB0ZW5zb3JEYXRhT2Zmc2V0IC8gNDtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB3YXNtLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICBkYXRhT2Zmc2V0ID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgY29uc3QgZGltc09mZnNldCA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGNvbnN0IGRpbXNMZW5ndGggPSB3YXNtLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICBjb25zdCBkaW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGltcy5wdXNoKHdhc20uSEVBUFUzMltkaW1zT2Zmc2V0IC8gNCArIGldKTtcbiAgICAgICAgfVxuICAgICAgICB3YXNtLl9PcnRGcmVlKGRpbXNPZmZzZXQpO1xuXG4gICAgICAgIGNvbnN0IHNpemUgPSBkaW1zLnJlZHVjZSgoYSwgYikgPT4gYSAqIGIsIDEpO1xuICAgICAgICB0eXBlID0gdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcoZGF0YVR5cGUpO1xuXG4gICAgICAgIGNvbnN0IHByZWZlcnJlZExvY2F0aW9uID0gaW9CaW5kaW5nU3RhdGU/Lm91dHB1dFByZWZlcnJlZExvY2F0aW9uc1tvdXRwdXRJbmRpY2VzW2ldXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAocHJlZmVycmVkTG9jYXRpb24gPT09ICdncHUtYnVmZmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgdGVuc29yIGlzIG5vdCBzdXBwb3J0ZWQgb24gR1BVLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHJpbmdEYXRhOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGxldCBkYXRhSW5kZXggPSBkYXRhT2Zmc2V0IC8gNDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2FzbS5IRUFQVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgICAgICAgIGNvbnN0IG1heEJ5dGVzVG9SZWFkID0gaSA9PT0gc2l6ZSAtIDEgPyB1bmRlZmluZWQgOiB3YXNtLkhFQVBVMzJbZGF0YUluZGV4XSAtIG9mZnNldDtcbiAgICAgICAgICAgIHN0cmluZ0RhdGEucHVzaCh3YXNtLlVURjhUb1N0cmluZyhvZmZzZXQsIG1heEJ5dGVzVG9SZWFkKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5wdXNoKFt0eXBlLCBkaW1zLCBzdHJpbmdEYXRhLCAnY3B1J10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGEgY2VydGFpbiBvdXRwdXQncyBwcmVmZXJyZWQgbG9jYXRpb24gaXMgR1BVIGJ1dCB0aGUgdGVuc29yIGlzIGVtcHR5LCB3ZSBzdGlsbCBuZWVkIHRvIGNyZWF0ZSBhIENQVVxuICAgICAgICAgIC8vIHRlbnNvciBmb3IgaXQuIFRoZXJlIGlzIG5vIG1hcHBpbmcgR1BVIGJ1ZmZlciBmb3IgYW4gZW1wdHkgdGVuc29yLlxuICAgICAgICAgIGlmIChwcmVmZXJyZWRMb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInICYmIHNpemUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRCdWZmZXIgPSB3YXNtLmpzZXBHZXRCdWZmZXI7XG4gICAgICAgICAgICBpZiAoIWdldEJ1ZmZlcikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZWZlcnJlZExvY2F0aW9uIFwiZ3B1LWJ1ZmZlclwiIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCB1c2luZyBXZWJHUFUuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncHVCdWZmZXIgPSBnZXRCdWZmZXIoZGF0YU9mZnNldCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IGdldFRlbnNvckVsZW1lbnRTaXplKGRhdGFUeXBlKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSA9PT0gdW5kZWZpbmVkIHx8ICFpc0dwdUJ1ZmZlclN1cHBvcnRlZFR5cGUodHlwZSkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZG8gbm90IHJlbGVhc2UgdGhlIHRlbnNvciByaWdodCBub3cuIGl0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB1c2VyIGNhbGxzIHRlbnNvci5kaXNwb3NlKCkuXG4gICAgICAgICAgICBrZWVwT3V0cHV0VGVuc29yID0gdHJ1ZTtcblxuICAgICAgICAgICAgb3V0cHV0LnB1c2goW1xuICAgICAgICAgICAgICB0eXBlLCBkaW1zLCB7XG4gICAgICAgICAgICAgICAgZ3B1QnVmZmVyLFxuICAgICAgICAgICAgICAgIGRvd25sb2FkOiB3YXNtLmpzZXBDcmVhdGVEb3dubG9hZGVyIShncHVCdWZmZXIsIHNpemUgKiBlbGVtZW50U2l6ZSwgdHlwZSksXG4gICAgICAgICAgICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih0ZW5zb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ2dwdS1idWZmZXInXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHlwZWRBcnJheUNvbnN0cnVjdG9yID0gdGVuc29yVHlwZVRvVHlwZWRBcnJheUNvbnN0cnVjdG9yKHR5cGUpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0eXBlZEFycmF5Q29uc3RydWN0b3Ioc2l6ZSk7XG4gICAgICAgICAgICBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAgICAgLnNldCh3YXNtLkhFQVBVOC5zdWJhcnJheShkYXRhT2Zmc2V0LCBkYXRhT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKSk7XG4gICAgICAgICAgICBvdXRwdXQucHVzaChbdHlwZSwgZGltcywgZGF0YSwgJ2NwdSddKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHdhc20uc3RhY2tSZXN0b3JlKGJlZm9yZUdldFRlbnNvckRhdGFTdGFjayk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiBkYXRhT2Zmc2V0KSB7XG4gICAgICAgICAgd2FzbS5fZnJlZShkYXRhT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtlZXBPdXRwdXRUZW5zb3IpIHtcbiAgICAgICAgICB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW9CaW5kaW5nU3RhdGUgJiYgIWVuYWJsZUdyYXBoQ2FwdHVyZSkge1xuICAgICAgd2FzbS5fT3J0Q2xlYXJCb3VuZE91dHB1dHMoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZSwgZmFsc2VdKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShiZWZvcmVSdW5TdGFjayk7XG5cbiAgICBpbnB1dFRlbnNvckhhbmRsZXMuZm9yRWFjaCh2ID0+IHdhc20uX09ydFJlbGVhc2VUZW5zb3IodikpO1xuICAgIG91dHB1dFRlbnNvckhhbmRsZXMuZm9yRWFjaCh2ID0+IHdhc20uX09ydFJlbGVhc2VUZW5zb3IodikpO1xuICAgIGlucHV0T3V0cHV0QWxsb2NzLmZvckVhY2gocCA9PiB3YXNtLl9mcmVlKHApKTtcblxuICAgIGlmIChydW5PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlUnVuT3B0aW9ucyhydW5PcHRpb25zSGFuZGxlKTtcbiAgICB9XG4gICAgcnVuT3B0aW9uc0FsbG9jcy5mb3JFYWNoKHAgPT4gd2FzbS5fZnJlZShwKSk7XG4gIH1cbn07XG5cbi8qKlxuICogZW5kIHByb2ZpbGluZ1xuICovXG5leHBvcnQgY29uc3QgZW5kUHJvZmlsaW5nID0gKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXNzaW9uIGlkJyk7XG4gIH1cbiAgY29uc3Qgc2Vzc2lvbkhhbmRsZSA9IHNlc3Npb25bMF07XG5cbiAgLy8gcHJvZmlsZSBmaWxlIG5hbWUgaXMgbm90IHVzZWQgeWV0LCBidXQgaXQgbXVzdCBiZSBmcmVlZC5cbiAgY29uc3QgcHJvZmlsZUZpbGVOYW1lID0gd2FzbS5fT3J0RW5kUHJvZmlsaW5nKHNlc3Npb25IYW5kbGUpO1xuICBpZiAocHJvZmlsZUZpbGVOYW1lID09PSAwKSB7XG4gICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IGFuIHByb2ZpbGUgZmlsZSBuYW1lLicpO1xuICB9XG4gIHdhc20uX09ydEZyZWUocHJvZmlsZUZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0VHJhbnNmZXJhYmxlQnVmZmVycyA9ICh0ZW5zb3JzOiByZWFkb25seSBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YVtdKTogQXJyYXlCdWZmZXJMaWtlW10gPT4ge1xuICBjb25zdCBidWZmZXJzOiBBcnJheUJ1ZmZlckxpa2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHRlbnNvciBvZiB0ZW5zb3JzKSB7XG4gICAgY29uc3QgZGF0YSA9IHRlbnNvclsyXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgJ2J1ZmZlcicgaW4gZGF0YSkge1xuICAgICAgYnVmZmVycy5wdXNoKGRhdGEuYnVmZmVyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlcnM7XG59O1xuIiwgIi8qIVxuICogT05OWCBSdW50aW1lIFdlYiB2MS4xOC4wXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG4oKCkgPT4ge1xuICB2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuICB2YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIHZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICB2YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIF9fZXNtID0gKGZuLCByZXMpID0+IGZ1bmN0aW9uIF9faW5pdCgpIHtcbiAgICByZXR1cm4gZm4gJiYgKHJlcyA9ICgwLCBmbltfX2dldE93blByb3BOYW1lcyhmbilbMF1dKShmbiA9IDApKSwgcmVzO1xuICB9O1xuICB2YXIgX19jb21tb25KUyA9IChjYiwgbW9kKSA9PiBmdW5jdGlvbiBfX3JlcXVpcmUoKSB7XG4gICAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7XG4gIH07XG4gIHZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbiAgfTtcbiAgdmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgICBpZiAoZnJvbSAmJiB0eXBlb2YgZnJvbSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBmb3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMoZnJvbSkpXG4gICAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgICAgX19kZWZQcm9wKHRvLCBrZXksIHsgZ2V0OiAoKSA9PiBmcm9tW2tleV0sIGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdG87XG4gIH07XG4gIHZhciBfX3RvQ29tbW9uSlMgPSAobW9kKSA9PiBfX2NvcHlQcm9wcyhfX2RlZlByb3Aoe30sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pLCBtb2QpO1xuXG4gIC8vIG5vZGVqcy1pZ25vcmU6ZnNcbiAgdmFyIGZzX2V4cG9ydHMgPSB7fTtcbiAgX19leHBvcnQoZnNfZXhwb3J0cywge1xuICAgIGNyZWF0ZVJlYWRTdHJlYW06ICgpID0+IGNyZWF0ZVJlYWRTdHJlYW0sXG4gICAgcmVhZEZpbGU6ICgpID0+IHJlYWRGaWxlLFxuICAgIHJlYWRGaWxlU3luYzogKCkgPT4gcmVhZEZpbGVTeW5jXG4gIH0pO1xuICB2YXIgcmVhZEZpbGUsIHJlYWRGaWxlU3luYywgY3JlYXRlUmVhZFN0cmVhbTtcbiAgdmFyIGluaXRfZnMgPSBfX2VzbSh7XG4gICAgXCJub2RlanMtaWdub3JlOmZzXCIoKSB7XG4gICAgICByZWFkRmlsZSA9IHZvaWQgMDtcbiAgICAgIHJlYWRGaWxlU3luYyA9IHZvaWQgMDtcbiAgICAgIGNyZWF0ZVJlYWRTdHJlYW0gPSB2b2lkIDA7XG4gICAgfVxuICB9KTtcblxuICAvLyBub2RlanMtaWdub3JlOnBhdGhcbiAgdmFyIHBhdGhfZXhwb3J0cyA9IHt9O1xuICBfX2V4cG9ydChwYXRoX2V4cG9ydHMsIHtcbiAgICBqb2luOiAoKSA9PiBqb2luMlxuICB9KTtcbiAgdmFyIGpvaW4yO1xuICB2YXIgaW5pdF9wYXRoID0gX19lc20oe1xuICAgIFwibm9kZWpzLWlnbm9yZTpwYXRoXCIoKSB7XG4gICAgICBqb2luMiA9IHZvaWQgMDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9iaW5kaW5nL29ydC10cmFpbmluZy13YXNtLXNpbWQuanNcbiAgdmFyIHJlcXVpcmVfb3J0X3RyYWluaW5nX3dhc21fc2ltZCA9IF9fY29tbW9uSlMoe1xuICAgIFwid2ViL2xpYi93YXNtL2JpbmRpbmcvb3J0LXRyYWluaW5nLXdhc20tc2ltZC5qc1wiKGV4cG9ydHMsIG1vZHVsZSkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICB2YXIgb3J0V2FzbSA9ICgoKSA9PiB7XG4gICAgICAgIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHZvaWQgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgIF9zY3JpcHREaXIgPSBfc2NyaXB0RGlyIHx8IF9fZmlsZW5hbWU7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGVBcmcgPSB7fSkge1xuICAgICAgICAgIHZhciBkID0gbW9kdWxlQXJnLCBrLCBsO1xuICAgICAgICAgIGQucmVhZHkgPSBuZXcgUHJvbWlzZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgayA9IGE7XG4gICAgICAgICAgICBsID0gYjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgciA9IE9iamVjdC5hc3NpZ24oe30sIGQpLCB2ID0gXCIuL3RoaXMucHJvZ3JhbVwiLCBhYSA9IFwib2JqZWN0XCIgPT0gdHlwZW9mIHdpbmRvdywgeCA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaW1wb3J0U2NyaXB0cywgYmEgPSBcIm9iamVjdFwiID09IHR5cGVvZiBwcm9jZXNzICYmIFwib2JqZWN0XCIgPT0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLCB5ID0gXCJcIiwgQSwgQiwgQztcbiAgICAgICAgICBpZiAoYmEpIHtcbiAgICAgICAgICAgIHZhciBmcyA9IChpbml0X2ZzKCksIF9fdG9Db21tb25KUyhmc19leHBvcnRzKSksIEQgPSAoaW5pdF9wYXRoKCksIF9fdG9Db21tb25KUyhwYXRoX2V4cG9ydHMpKTtcbiAgICAgICAgICAgIHkgPSB4ID8gRC5kaXJuYW1lKHkpICsgXCIvXCIgOiBfX2Rpcm5hbWUgKyBcIi9cIjtcbiAgICAgICAgICAgIEEgPSAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBhID0gYS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSA/IG5ldyBVUkwoYSkgOiBELm5vcm1hbGl6ZShhKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhhLCBiID8gdm9pZCAwIDogXCJ1dGY4XCIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIEMgPSAoYSkgPT4ge1xuICAgICAgICAgICAgICBhID0gQShhLCB0cnVlKTtcbiAgICAgICAgICAgICAgYS5idWZmZXIgfHwgKGEgPSBuZXcgVWludDhBcnJheShhKSk7XG4gICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIEIgPSAoYSwgYiwgYywgZiA9IHRydWUpID0+IHtcbiAgICAgICAgICAgICAgYSA9IGEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikgPyBuZXcgVVJMKGEpIDogRC5ub3JtYWxpemUoYSk7XG4gICAgICAgICAgICAgIGZzLnJlYWRGaWxlKGEsIGYgPyB2b2lkIDAgOiBcInV0ZjhcIiwgKGcsIGgpID0+IHtcbiAgICAgICAgICAgICAgICBnID8gYyhnKSA6IGIoZiA/IGguYnVmZmVyIDogaCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICFkLnRoaXNQcm9ncmFtICYmIDEgPCBwcm9jZXNzLmFyZ3YubGVuZ3RoICYmICh2ID0gcHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpKTtcbiAgICAgICAgICAgIHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICAgICAgICAgIGQuaW5zcGVjdCA9ICgpID0+IFwiW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF1cIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFhIHx8IHgpXG4gICAgICAgICAgICB4ID8geSA9IHNlbGYubG9jYXRpb24uaHJlZiA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIGRvY3VtZW50ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgKHkgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksIF9zY3JpcHREaXIgJiYgKHkgPSBfc2NyaXB0RGlyKSwgMCAhPT0geS5pbmRleE9mKFwiYmxvYjpcIikgPyB5ID0geS5zdWJzdHIoMCwgeS5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IHkgPSBcIlwiLCBBID0gKGEpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgYi5vcGVuKFwiR0VUXCIsIGEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgYi5zZW5kKG51bGwpO1xuICAgICAgICAgICAgICByZXR1cm4gYi5yZXNwb25zZVRleHQ7XG4gICAgICAgICAgICB9LCB4ICYmIChDID0gKGEpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgYi5vcGVuKFwiR0VUXCIsIGEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgYi5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgICAgIGIuc2VuZChudWxsKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGIucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSksIEIgPSAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICB2YXIgZiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICBmLm9wZW4oXCJHRVRcIiwgYSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGYucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgICAgICAgICAgICBmLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAyMDAgPT0gZi5zdGF0dXMgfHwgMCA9PSBmLnN0YXR1cyAmJiBmLnJlc3BvbnNlID8gYihmLnJlc3BvbnNlKSA6IGMoKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZi5vbmVycm9yID0gYztcbiAgICAgICAgICAgICAgZi5zZW5kKG51bGwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgY2EgPSBkLnByaW50IHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksIEUgPSBkLnByaW50RXJyIHx8IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGQsIHIpO1xuICAgICAgICAgIHIgPSBudWxsO1xuICAgICAgICAgIGQudGhpc1Byb2dyYW0gJiYgKHYgPSBkLnRoaXNQcm9ncmFtKTtcbiAgICAgICAgICB2YXIgRjtcbiAgICAgICAgICBkLndhc21CaW5hcnkgJiYgKEYgPSBkLndhc21CaW5hcnkpO1xuICAgICAgICAgIHZhciBub0V4aXRSdW50aW1lID0gZC5ub0V4aXRSdW50aW1lIHx8IHRydWU7XG4gICAgICAgICAgXCJvYmplY3RcIiAhPSB0eXBlb2YgV2ViQXNzZW1ibHkgJiYgRyhcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIik7XG4gICAgICAgICAgdmFyIEgsIEksIGRhID0gZmFsc2UsIEosIEssIEwsIE07XG4gICAgICAgICAgZnVuY3Rpb24gZWEoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IEguYnVmZmVyO1xuICAgICAgICAgICAgZC5IRUFQOCA9IEogPSBuZXcgSW50OEFycmF5KGEpO1xuICAgICAgICAgICAgZC5IRUFQMTYgPSBuZXcgSW50MTZBcnJheShhKTtcbiAgICAgICAgICAgIGQuSEVBUDMyID0gTCA9IG5ldyBJbnQzMkFycmF5KGEpO1xuICAgICAgICAgICAgZC5IRUFQVTggPSBLID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gICAgICAgICAgICBkLkhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYSk7XG4gICAgICAgICAgICBkLkhFQVBVMzIgPSBNID0gbmV3IFVpbnQzMkFycmF5KGEpO1xuICAgICAgICAgICAgZC5IRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShhKTtcbiAgICAgICAgICAgIGQuSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBmYSA9IFtdLCBoYSA9IFtdLCBpYSA9IFtdO1xuICAgICAgICAgIGZ1bmN0aW9uIGphKCkge1xuICAgICAgICAgICAgdmFyIGEgPSBkLnByZVJ1bi5zaGlmdCgpO1xuICAgICAgICAgICAgZmEudW5zaGlmdChhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIE4gPSAwLCBPID0gbnVsbCwgUCA9IG51bGw7XG4gICAgICAgICAgZnVuY3Rpb24gRyhhKSB7XG4gICAgICAgICAgICBpZiAoZC5vbkFib3J0KVxuICAgICAgICAgICAgICBkLm9uQWJvcnQoYSk7XG4gICAgICAgICAgICBhID0gXCJBYm9ydGVkKFwiICsgYSArIFwiKVwiO1xuICAgICAgICAgICAgRShhKTtcbiAgICAgICAgICAgIGRhID0gdHJ1ZTtcbiAgICAgICAgICAgIGEgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGEgKyBcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIik7XG4gICAgICAgICAgICBsKGEpO1xuICAgICAgICAgICAgdGhyb3cgYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24ga2EoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBRO1xuICAgICAgICAgIFEgPSBcIm9ydC10cmFpbmluZy13YXNtLXNpbWQud2FzbVwiO1xuICAgICAgICAgIGlmICgha2EoUSkpIHtcbiAgICAgICAgICAgIHZhciBsYSA9IFE7XG4gICAgICAgICAgICBRID0gZC5sb2NhdGVGaWxlID8gZC5sb2NhdGVGaWxlKGxhLCB5KSA6IHkgKyBsYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbWEoYSkge1xuICAgICAgICAgICAgaWYgKGEgPT0gUSAmJiBGKVxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRik7XG4gICAgICAgICAgICBpZiAoQylcbiAgICAgICAgICAgICAgcmV0dXJuIEMoYSk7XG4gICAgICAgICAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG5hKGEpIHtcbiAgICAgICAgICAgIGlmICghRiAmJiAoYWEgfHwgeCkpIHtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZmV0Y2ggJiYgIWEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGEsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KS50aGVuKChiKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWIub2spXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBhICsgXCInXCI7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IG1hKGEpKTtcbiAgICAgICAgICAgICAgaWYgKEIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICBCKGEsIChmKSA9PiBiKG5ldyBVaW50OEFycmF5KGYpKSwgYyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBtYShhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG9hKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiBuYShhKS50aGVuKChmKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShmLCBiKSkudGhlbigoZikgPT4gZikudGhlbihjLCAoZikgPT4ge1xuICAgICAgICAgICAgICBFKFwiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogXCIgKyBmKTtcbiAgICAgICAgICAgICAgRyhmKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBwYShhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IFE7XG4gICAgICAgICAgICByZXR1cm4gRiB8fCBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nIHx8IGthKGMpIHx8IGMuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikgfHwgYmEgfHwgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBmZXRjaCA/IG9hKGMsIGEsIGIpIDogZmV0Y2goYywgeyBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiIH0pLnRoZW4oKGYpID0+IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGYsIGEpLnRoZW4oYiwgZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgICBFKFwid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6IFwiICsgZyk7XG4gICAgICAgICAgICAgIEUoXCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvblwiKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9hKGMsIGEsIGIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgUiwgUyA9IChhKSA9PiB7XG4gICAgICAgICAgICBmb3IgKDsgMCA8IGEubGVuZ3RoOyApXG4gICAgICAgICAgICAgIGEuc2hpZnQoKShkKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGZ1bmN0aW9uIHFhKGEpIHtcbiAgICAgICAgICAgIHRoaXMuSGEgPSBhIC0gMjQ7XG4gICAgICAgICAgICB0aGlzLkxhID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICBNW3RoaXMuSGEgKyA0ID4+IDIgPj4+IDBdID0gYjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLkthID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICBNW3RoaXMuSGEgKyA4ID4+IDIgPj4+IDBdID0gYjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLklhID0gZnVuY3Rpb24oYiwgYykge1xuICAgICAgICAgICAgICB0aGlzLkphKCk7XG4gICAgICAgICAgICAgIHRoaXMuTGEoYik7XG4gICAgICAgICAgICAgIHRoaXMuS2EoYyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5KYSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBNW3RoaXMuSGEgKyAxNiA+PiAyID4+PiAwXSA9IDA7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmEgPSAwLCBzYSA9IDAsIHRhID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgVGV4dERlY29kZXIgPyBuZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpIDogdm9pZCAwLCB1YSA9IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgIHZhciBmID0gYiArIGM7XG4gICAgICAgICAgICBmb3IgKGMgPSBiOyBhW2NdICYmICEoYyA+PSBmKTsgKVxuICAgICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAoMTYgPCBjIC0gYiAmJiBhLmJ1ZmZlciAmJiB0YSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRhLmRlY29kZShhLnN1YmFycmF5KGIsIGMpKTtcbiAgICAgICAgICAgIGZvciAoZiA9IFwiXCI7IGIgPCBjOyApIHtcbiAgICAgICAgICAgICAgdmFyIGcgPSBhW2IrK107XG4gICAgICAgICAgICAgIGlmIChnICYgMTI4KSB7XG4gICAgICAgICAgICAgICAgdmFyIGggPSBhW2IrK10gJiA2MztcbiAgICAgICAgICAgICAgICBpZiAoMTkyID09IChnICYgMjI0KSlcbiAgICAgICAgICAgICAgICAgIGYgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoZyAmIDMxKSA8PCA2IHwgaCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbSA9IGFbYisrXSAmIDYzO1xuICAgICAgICAgICAgICAgICAgZyA9IDIyNCA9PSAoZyAmIDI0MCkgPyAoZyAmIDE1KSA8PCAxMiB8IGggPDwgNiB8IG0gOiAoZyAmIDcpIDw8IDE4IHwgaCA8PCAxMiB8IG0gPDwgNiB8IGFbYisrXSAmIDYzO1xuICAgICAgICAgICAgICAgICAgNjU1MzYgPiBnID8gZiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGcpIDogKGcgLT0gNjU1MzYsIGYgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGcgPj4gMTAsIDU2MzIwIHwgZyAmIDEwMjMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGYgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgIH0sIFQgPSAoYSwgYikgPT4gKGEgPj4+PSAwKSA/IHVhKEssIGEsIGIpIDogXCJcIiwgVSA9IChhKSA9PiB7XG4gICAgICAgICAgICBmb3IgKHZhciBiID0gMCwgYyA9IDA7IGMgPCBhLmxlbmd0aDsgKytjKSB7XG4gICAgICAgICAgICAgIHZhciBmID0gYS5jaGFyQ29kZUF0KGMpO1xuICAgICAgICAgICAgICAxMjcgPj0gZiA/IGIrKyA6IDIwNDcgPj0gZiA/IGIgKz0gMiA6IDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZiA/IChiICs9IDQsICsrYykgOiBiICs9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9LCBWID0gKGEsIGIsIGMsIGYpID0+IHtcbiAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgaWYgKCEoMCA8IGYpKVxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIHZhciBnID0gYztcbiAgICAgICAgICAgIGYgPSBjICsgZiAtIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBoID0gMDsgaCA8IGEubGVuZ3RoOyArK2gpIHtcbiAgICAgICAgICAgICAgdmFyIG0gPSBhLmNoYXJDb2RlQXQoaCk7XG4gICAgICAgICAgICAgIGlmICg1NTI5NiA8PSBtICYmIDU3MzQzID49IG0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcSA9IGEuY2hhckNvZGVBdCgrK2gpO1xuICAgICAgICAgICAgICAgIG0gPSA2NTUzNiArICgobSAmIDEwMjMpIDw8IDEwKSB8IHEgJiAxMDIzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgxMjcgPj0gbSkge1xuICAgICAgICAgICAgICAgIGlmIChjID49IGYpXG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSBtO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICgyMDQ3ID49IG0pIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjICsgMSA+PSBmKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDE5MiB8IG0gPj4gNjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKDY1NTM1ID49IG0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgKyAyID49IGYpXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDIyNCB8IG0gPj4gMTI7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyArIDMgPj0gZilcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gMjQwIHwgbSA+PiAxODtcbiAgICAgICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gMTI4IHwgbSA+PiAxMiAmIDYzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gMTI4IHwgbSA+PiA2ICYgNjM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDEyOCB8IG0gJiA2MztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYltjID4+PiAwXSA9IDA7XG4gICAgICAgICAgICByZXR1cm4gYyAtIGc7XG4gICAgICAgICAgfSwgVyA9IChhKSA9PiAwID09PSBhICUgNCAmJiAoMCAhPT0gYSAlIDEwMCB8fCAwID09PSBhICUgNDAwKSwgdmEgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdLCB3YSA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sIEJhID0gKGEpID0+IHtcbiAgICAgICAgICAgIHZhciBiID0gVShhKSArIDEsIGMgPSBBYShiKTtcbiAgICAgICAgICAgIGMgJiYgVihhLCBLLCBjLCBiKTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgIH0sIFggPSB7fSwgQ2EgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVkpIHtcbiAgICAgICAgICAgICAgdmFyIGEgPSB7IFVTRVI6IFwid2ViX3VzZXJcIiwgTE9HTkFNRTogXCJ3ZWJfdXNlclwiLCBQQVRIOiBcIi9cIiwgUFdEOiBcIi9cIiwgSE9NRTogXCIvaG9tZS93ZWJfdXNlclwiLCBMQU5HOiAoXCJvYmplY3RcIiA9PSB0eXBlb2YgbmF2aWdhdG9yICYmIG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSB8fCBcIkNcIikucmVwbGFjZShcbiAgICAgICAgICAgICAgICBcIi1cIixcbiAgICAgICAgICAgICAgICBcIl9cIlxuICAgICAgICAgICAgICApICsgXCIuVVRGLThcIiwgXzogdiB8fCBcIi4vdGhpcy5wcm9ncmFtXCIgfSwgYjtcbiAgICAgICAgICAgICAgZm9yIChiIGluIFgpXG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBYW2JdID8gZGVsZXRlIGFbYl0gOiBhW2JdID0gWFtiXTtcbiAgICAgICAgICAgICAgdmFyIGMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChiIGluIGEpXG4gICAgICAgICAgICAgICAgYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtcbiAgICAgICAgICAgICAgWSA9IGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWTtcbiAgICAgICAgICB9LCBZLCBEYSA9IFtudWxsLCBbXSwgW11dLCBFYSA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgRmEgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG4gICAgICAgICAgZnVuY3Rpb24gR2EoYSkge1xuICAgICAgICAgICAgdmFyIGIgPSBBcnJheShVKGEpICsgMSk7XG4gICAgICAgICAgICBWKGEsIGIsIDAsIGIubGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBIYShhLCBiLCBjLCBmKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBnKGUsIG4sIHApIHtcbiAgICAgICAgICAgICAgZm9yIChlID0gXCJudW1iZXJcIiA9PSB0eXBlb2YgZSA/IGUudG9TdHJpbmcoKSA6IGUgfHwgXCJcIjsgZS5sZW5ndGggPCBuOyApXG4gICAgICAgICAgICAgICAgZSA9IHBbMF0gKyBlO1xuICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGgoZSwgbikge1xuICAgICAgICAgICAgICByZXR1cm4gZyhlLCBuLCBcIjBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBtKGUsIG4pIHtcbiAgICAgICAgICAgICAgZnVuY3Rpb24gcCh4YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwID4geGEgPyAtMSA6IDAgPCB4YSA/IDEgOiAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciB6O1xuICAgICAgICAgICAgICAwID09PSAoeiA9IHAoZS5nZXRGdWxsWWVhcigpIC0gbi5nZXRGdWxsWWVhcigpKSkgJiYgMCA9PT0gKHogPSBwKGUuZ2V0TW9udGgoKSAtIG4uZ2V0TW9udGgoKSkpICYmICh6ID0gcChlLmdldERhdGUoKSAtIG4uZ2V0RGF0ZSgpKSk7XG4gICAgICAgICAgICAgIHJldHVybiB6O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gcShlKSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZS5nZXREYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCkgLSAxLCAxMSwgMjkpO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksIDAsIDMpO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCkgLSAxLCAxMSwgMzEpO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCkgLSAxLCAxMSwgMzApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB3KGUpIHtcbiAgICAgICAgICAgICAgdmFyIG4gPSBlLkNhO1xuICAgICAgICAgICAgICBmb3IgKGUgPSBuZXcgRGF0ZShuZXcgRGF0ZShlLkRhICsgMTkwMCwgMCwgMSkuZ2V0VGltZSgpKTsgMCA8IG47ICkge1xuICAgICAgICAgICAgICAgIHZhciBwID0gZS5nZXRNb250aCgpLCB6ID0gKFcoZS5nZXRGdWxsWWVhcigpKSA/IEVhIDogRmEpW3BdO1xuICAgICAgICAgICAgICAgIGlmIChuID4geiAtIGUuZ2V0RGF0ZSgpKVxuICAgICAgICAgICAgICAgICAgbiAtPSB6IC0gZS5nZXREYXRlKCkgKyAxLCBlLnNldERhdGUoMSksIDExID4gcCA/IGUuc2V0TW9udGgocCArIDEpIDogKGUuc2V0TW9udGgoMCksIGUuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpICsgMSkpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZS5zZXREYXRlKGUuZ2V0RGF0ZSgpICsgbik7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcCA9IG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSArIDEsIDAsIDQpO1xuICAgICAgICAgICAgICBuID0gcShuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICBlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBwID0gcShwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIDAgPj0gbShuLCBlKSA/IDAgPj0gbShwLCBlKSA/IGUuZ2V0RnVsbFllYXIoKSArIDEgOiBlLmdldEZ1bGxZZWFyKCkgOiBlLmdldEZ1bGxZZWFyKCkgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgZiA+Pj49IDA7XG4gICAgICAgICAgICB2YXIgdCA9IExbZiArIDQwID4+IDIgPj4+IDBdO1xuICAgICAgICAgICAgZiA9IHsgT2E6IExbZiA+PiAyID4+PiAwXSwgTmE6IExbZiArIDQgPj4gMiA+Pj4gMF0sIEVhOiBMW2YgKyA4ID4+IDIgPj4+IDBdLCBHYTogTFtmICsgMTIgPj4gMiA+Pj4gMF0sIEZhOiBMW2YgKyAxNiA+PiAyID4+PiAwXSwgRGE6IExbZiArIDIwID4+IDIgPj4+IDBdLCB4YTogTFtmICsgMjQgPj4gMiA+Pj4gMF0sIENhOiBMW2YgKyAyOCA+PiAyID4+PiAwXSwgUWE6IExbZiArIDMyID4+IDIgPj4+IDBdLCBNYTogTFtmICsgMzYgPj4gMiA+Pj4gMF0sIFBhOiB0ID8gVCh0KSA6IFwiXCIgfTtcbiAgICAgICAgICAgIGMgPSBUKGMpO1xuICAgICAgICAgICAgdCA9IHtcbiAgICAgICAgICAgICAgXCIlY1wiOiBcIiVhICViICVkICVIOiVNOiVTICVZXCIsXG4gICAgICAgICAgICAgIFwiJURcIjogXCIlbS8lZC8leVwiLFxuICAgICAgICAgICAgICBcIiVGXCI6IFwiJVktJW0tJWRcIixcbiAgICAgICAgICAgICAgXCIlaFwiOiBcIiViXCIsXG4gICAgICAgICAgICAgIFwiJXJcIjogXCIlSTolTTolUyAlcFwiLFxuICAgICAgICAgICAgICBcIiVSXCI6IFwiJUg6JU1cIixcbiAgICAgICAgICAgICAgXCIlVFwiOiBcIiVIOiVNOiVTXCIsXG4gICAgICAgICAgICAgIFwiJXhcIjogXCIlbS8lZC8leVwiLFxuICAgICAgICAgICAgICBcIiVYXCI6IFwiJUg6JU06JVNcIixcbiAgICAgICAgICAgICAgXCIlRWNcIjogXCIlY1wiLFxuICAgICAgICAgICAgICBcIiVFQ1wiOiBcIiVDXCIsXG4gICAgICAgICAgICAgIFwiJUV4XCI6IFwiJW0vJWQvJXlcIixcbiAgICAgICAgICAgICAgXCIlRVhcIjogXCIlSDolTTolU1wiLFxuICAgICAgICAgICAgICBcIiVFeVwiOiBcIiV5XCIsXG4gICAgICAgICAgICAgIFwiJUVZXCI6IFwiJVlcIixcbiAgICAgICAgICAgICAgXCIlT2RcIjogXCIlZFwiLFxuICAgICAgICAgICAgICBcIiVPZVwiOiBcIiVlXCIsXG4gICAgICAgICAgICAgIFwiJU9IXCI6IFwiJUhcIixcbiAgICAgICAgICAgICAgXCIlT0lcIjogXCIlSVwiLFxuICAgICAgICAgICAgICBcIiVPbVwiOiBcIiVtXCIsXG4gICAgICAgICAgICAgIFwiJU9NXCI6IFwiJU1cIixcbiAgICAgICAgICAgICAgXCIlT1NcIjogXCIlU1wiLFxuICAgICAgICAgICAgICBcIiVPdVwiOiBcIiV1XCIsXG4gICAgICAgICAgICAgIFwiJU9VXCI6IFwiJVVcIixcbiAgICAgICAgICAgICAgXCIlT1ZcIjogXCIlVlwiLFxuICAgICAgICAgICAgICBcIiVPd1wiOiBcIiV3XCIsXG4gICAgICAgICAgICAgIFwiJU9XXCI6IFwiJVdcIixcbiAgICAgICAgICAgICAgXCIlT3lcIjogXCIleVwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgdSBpbiB0KVxuICAgICAgICAgICAgICBjID0gYy5yZXBsYWNlKG5ldyBSZWdFeHAodSwgXCJnXCIpLCB0W3VdKTtcbiAgICAgICAgICAgIHZhciB5YSA9IFwiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXlcIi5zcGxpdChcIiBcIiksIHphID0gXCJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyXCIuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgdCA9IHsgXCIlYVwiOiAoZSkgPT4geWFbZS54YV0uc3Vic3RyaW5nKDAsIDMpLCBcIiVBXCI6IChlKSA9PiB5YVtlLnhhXSwgXCIlYlwiOiAoZSkgPT4gemFbZS5GYV0uc3Vic3RyaW5nKDAsIDMpLCBcIiVCXCI6IChlKSA9PiB6YVtlLkZhXSwgXCIlQ1wiOiAoZSkgPT4gaCgoZS5EYSArIDE5MDApIC8gMTAwIHwgMCwgMiksIFwiJWRcIjogKGUpID0+IGgoZS5HYSwgMiksIFwiJWVcIjogKGUpID0+IGcoZS5HYSwgMiwgXCIgXCIpLCBcIiVnXCI6IChlKSA9PiB3KGUpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCBcIiVHXCI6IChlKSA9PiB3KGUpLCBcIiVIXCI6IChlKSA9PiBoKGUuRWEsIDIpLCBcIiVJXCI6IChlKSA9PiB7XG4gICAgICAgICAgICAgIGUgPSBlLkVhO1xuICAgICAgICAgICAgICAwID09IGUgPyBlID0gMTIgOiAxMiA8IGUgJiYgKGUgLT0gMTIpO1xuICAgICAgICAgICAgICByZXR1cm4gaChlLCAyKTtcbiAgICAgICAgICAgIH0sIFwiJWpcIjogKGUpID0+IHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDAsIHAgPSAwOyBwIDw9IGUuRmEgLSAxOyBuICs9IChXKGUuRGEgKyAxOTAwKSA/IEVhIDogRmEpW3ArK10pXG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICByZXR1cm4gaChlLkdhICsgbiwgMyk7XG4gICAgICAgICAgICB9LCBcIiVtXCI6IChlKSA9PiBoKGUuRmEgKyAxLCAyKSwgXCIlTVwiOiAoZSkgPT4gaChlLk5hLCAyKSwgXCIlblwiOiAoKSA9PiBcIlxcblwiLCBcIiVwXCI6IChlKSA9PiAwIDw9IGUuRWEgJiYgMTIgPiBlLkVhID8gXCJBTVwiIDogXCJQTVwiLCBcIiVTXCI6IChlKSA9PiBoKGUuT2EsIDIpLCBcIiV0XCI6ICgpID0+IFwiXHRcIiwgXCIldVwiOiAoZSkgPT4gZS54YSB8fCA3LCBcIiVVXCI6IChlKSA9PiBoKE1hdGguZmxvb3IoKGUuQ2EgKyA3IC0gZS54YSkgLyA3KSwgMiksIFwiJVZcIjogKGUpID0+IHtcbiAgICAgICAgICAgICAgdmFyIG4gPSBNYXRoLmZsb29yKChlLkNhICsgNyAtIChlLnhhICsgNikgJSA3KSAvIDcpO1xuICAgICAgICAgICAgICAyID49IChlLnhhICsgMzcxIC0gZS5DYSAtIDIpICUgNyAmJiBuKys7XG4gICAgICAgICAgICAgIGlmIChuKVxuICAgICAgICAgICAgICAgIDUzID09IG4gJiYgKHAgPSAoZS54YSArIDM3MSAtIGUuQ2EpICUgNywgNCA9PSBwIHx8IDMgPT0gcCAmJiBXKGUuRGEpIHx8IChuID0gMSkpO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBuID0gNTI7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSAoZS54YSArIDcgLSBlLkNhIC0gMSkgJSA3O1xuICAgICAgICAgICAgICAgICg0ID09IHAgfHwgNSA9PSBwICYmIFcoZS5EYSAlIDQwMCAtIDEpKSAmJiBuKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGgobiwgMik7XG4gICAgICAgICAgICB9LCBcIiV3XCI6IChlKSA9PiBlLnhhLCBcIiVXXCI6IChlKSA9PiBoKE1hdGguZmxvb3IoKGUuQ2EgKyA3IC0gKGUueGEgKyA2KSAlIDcpIC8gNyksIDIpLCBcIiV5XCI6IChlKSA9PiAoZS5EYSArIDE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCBcIiVZXCI6IChlKSA9PiBlLkRhICsgMTkwMCwgXCIlelwiOiAoZSkgPT4ge1xuICAgICAgICAgICAgICBlID0gZS5NYTtcbiAgICAgICAgICAgICAgdmFyIG4gPSAwIDw9IGU7XG4gICAgICAgICAgICAgIGUgPSBNYXRoLmFicyhlKSAvIDYwO1xuICAgICAgICAgICAgICByZXR1cm4gKG4gPyBcIitcIiA6IFwiLVwiKSArIFN0cmluZyhcIjAwMDBcIiArIChlIC8gNjAgKiAxMDAgKyBlICUgNjApKS5zbGljZSgtNCk7XG4gICAgICAgICAgICB9LCBcIiVaXCI6IChlKSA9PiBlLlBhLCBcIiUlXCI6ICgpID0+IFwiJVwiIH07XG4gICAgICAgICAgICBjID0gYy5yZXBsYWNlKC8lJS9nLCBcIlxcMFxcMFwiKTtcbiAgICAgICAgICAgIGZvciAodSBpbiB0KVxuICAgICAgICAgICAgICBjLmluY2x1ZGVzKHUpICYmIChjID0gYy5yZXBsYWNlKG5ldyBSZWdFeHAodSwgXCJnXCIpLCB0W3VdKGYpKSk7XG4gICAgICAgICAgICBjID0gYy5yZXBsYWNlKC9cXDBcXDAvZywgXCIlXCIpO1xuICAgICAgICAgICAgdSA9IEdhKGMpO1xuICAgICAgICAgICAgaWYgKHUubGVuZ3RoID4gYilcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICBKLnNldCh1LCBhID4+PiAwKTtcbiAgICAgICAgICAgIHJldHVybiB1Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBKYSA9IHtcbiAgICAgICAgICAgIGE6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIG5ldyBxYShhKS5JYShiID4+PiAwLCBjID4+PiAwKTtcbiAgICAgICAgICAgICAgcmEgPSBhO1xuICAgICAgICAgICAgICBzYSsrO1xuICAgICAgICAgICAgICB0aHJvdyByYTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgejogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEY6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHY6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGw6ICgpID0+IHRydWUsXG4gICAgICAgICAgICBvOiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGEgPSBiICsgMjA5NzE1MiA+Pj4gMCA8IDQxOTQzMDUgLSAhIWEgPyAoYSA+Pj4gMCkgKyA0Mjk0OTY3Mjk2ICogYiA6IE5hTjtcbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBuZXcgRGF0ZSgxZTMgKiBhKTtcbiAgICAgICAgICAgICAgTFtjID4+IDIgPj4+IDBdID0gYS5nZXRVVENTZWNvbmRzKCk7XG4gICAgICAgICAgICAgIExbYyArIDQgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ01pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgTFtjICsgOCA+PiAyID4+PiAwXSA9IGEuZ2V0VVRDSG91cnMoKTtcbiAgICAgICAgICAgICAgTFtjICsgMTIgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgTFtjICsgMTYgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICAgIExbYyArIDIwID4+IDIgPj4+IDBdID0gYS5nZXRVVENGdWxsWWVhcigpIC0gMTkwMDtcbiAgICAgICAgICAgICAgTFtjICsgMjQgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0RheSgpO1xuICAgICAgICAgICAgICBMW2MgKyAyOCA+PiAyID4+PiAwXSA9IChhLmdldFRpbWUoKSAtIERhdGUuVVRDKGEuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMCkpIC8gODY0ZTUgfCAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHA6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYSA9IGIgKyAyMDk3MTUyID4+PiAwIDwgNDE5NDMwNSAtICEhYSA/IChhID4+PiAwKSArIDQyOTQ5NjcyOTYgKiBiIDogTmFOO1xuICAgICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgICAgYSA9IG5ldyBEYXRlKDFlMyAqIGEpO1xuICAgICAgICAgICAgICBMW2MgPj4gMiA+Pj4gMF0gPSBhLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgICAgTFtjICsgNCA+PiAyID4+PiAwXSA9IGEuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICBMW2MgKyA4ID4+IDIgPj4+IDBdID0gYS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICBMW2MgKyAxMiA+PiAyID4+PiAwXSA9IGEuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICBMW2MgKyAxNiA+PiAyID4+PiAwXSA9IGEuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgTFtjICsgMjAgPj4gMiA+Pj4gMF0gPSBhLmdldEZ1bGxZZWFyKCkgLSAxOTAwO1xuICAgICAgICAgICAgICBMW2MgKyAyNCA+PiAyID4+PiAwXSA9IGEuZ2V0RGF5KCk7XG4gICAgICAgICAgICAgIExbYyArIDI4ID4+IDIgPj4+IDBdID0gKFcoYS5nZXRGdWxsWWVhcigpKSA/IHZhIDogd2EpW2EuZ2V0TW9udGgoKV0gKyBhLmdldERhdGUoKSAtIDEgfCAwO1xuICAgICAgICAgICAgICBMW2MgKyAzNiA+PiAyID4+PiAwXSA9IC0oNjAgKiBhLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICAgICAgICBiID0gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLCA2LCAxKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICAgICAgICB2YXIgZiA9IG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSwgMCwgMSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgICAgICAgTFtjICsgMzIgPj4gMiA+Pj4gMF0gPSAoYiAhPSBmICYmIGEuZ2V0VGltZXpvbmVPZmZzZXQoKSA9PSBNYXRoLm1pbihmLCBiKSkgfCAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHE6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBiID0gbmV3IERhdGUoTFthICsgMjAgPj4gMiA+Pj4gMF0gKyAxOTAwLCBMW2EgKyAxNiA+PiAyID4+PiAwXSwgTFthICsgMTIgPj4gMiA+Pj4gMF0sIExbYSArIDggPj4gMiA+Pj4gMF0sIExbYSArIDQgPj4gMiA+Pj4gMF0sIExbYSA+PiAyID4+PiAwXSwgMCksIGMgPSBMW2EgKyAzMiA+PiAyID4+PiAwXSwgZiA9IGIuZ2V0VGltZXpvbmVPZmZzZXQoKSwgZyA9IG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwgNiwgMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSwgaCA9IG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwgMCwgMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSwgbSA9IE1hdGgubWluKGgsIGcpO1xuICAgICAgICAgICAgICAwID4gYyA/IExbYSArIDMyID4+IDIgPj4+IDBdID0gTnVtYmVyKGcgIT0gaCAmJiBtID09IGYpIDogMCA8IGMgIT0gKG0gPT0gZikgJiYgKGcgPSBNYXRoLm1heChoLCBnKSwgYi5zZXRUaW1lKGIuZ2V0VGltZSgpICsgNmU0ICogKCgwIDwgYyA/IG0gOiBnKSAtIGYpKSk7XG4gICAgICAgICAgICAgIExbYSArIDI0ID4+IDIgPj4+IDBdID0gYi5nZXREYXkoKTtcbiAgICAgICAgICAgICAgTFthICsgMjggPj4gMiA+Pj4gMF0gPSAoVyhiLmdldEZ1bGxZZWFyKCkpID8gdmEgOiB3YSlbYi5nZXRNb250aCgpXSArIGIuZ2V0RGF0ZSgpIC0gMSB8IDA7XG4gICAgICAgICAgICAgIExbYSA+PiAyID4+PiAwXSA9IGIuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgICBMW2EgKyA0ID4+IDIgPj4+IDBdID0gYi5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIExbYSArIDggPj4gMiA+Pj4gMF0gPSBiLmdldEhvdXJzKCk7XG4gICAgICAgICAgICAgIExbYSArIDEyID4+IDIgPj4+IDBdID0gYi5nZXREYXRlKCk7XG4gICAgICAgICAgICAgIExbYSArIDE2ID4+IDIgPj4+IDBdID0gYi5nZXRNb250aCgpO1xuICAgICAgICAgICAgICBMW2EgKyAyMCA+PiAyID4+PiAwXSA9IGIuZ2V0WWVhcigpO1xuICAgICAgICAgICAgICBhID0gYi5nZXRUaW1lKCkgLyAxZTM7XG4gICAgICAgICAgICAgIHJldHVybiBJYSgoUiA9IGEsIDEgPD0gK01hdGguYWJzKFIpID8gMCA8IFIgPyArTWF0aC5mbG9vcihSIC8gNDI5NDk2NzI5NikgPj4+IDAgOiB+fitNYXRoLmNlaWwoKFIgLSArKH5+UiA+Pj4gMCkpIC8gNDI5NDk2NzI5NikgPj4+IDAgOiAwKSksIGEgPj4+IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiAtNTI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdDogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBmKHcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHcgPSB3LnRvVGltZVN0cmluZygpLm1hdGNoKC9cXCgoW0EtWmEteiBdKylcXCkkLykpID8gd1sxXSA6IFwiR01UXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBnID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRGdWxsWWVhcigpLCBoID0gbmV3IERhdGUoZywgMCwgMSksIG0gPSBuZXcgRGF0ZShnLCA2LCAxKTtcbiAgICAgICAgICAgICAgZyA9IGguZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgICAgICAgdmFyIHEgPSBtLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgICAgICAgIE1bYSA+Pj4gMCA+PiAyID4+PiAwXSA9IDYwICogTWF0aC5tYXgoZywgcSk7XG4gICAgICAgICAgICAgIExbYiA+Pj4gMCA+PiAyID4+PiAwXSA9IE51bWJlcihnICE9IHEpO1xuICAgICAgICAgICAgICBhID0gZihoKTtcbiAgICAgICAgICAgICAgYiA9IGYobSk7XG4gICAgICAgICAgICAgIGEgPSBCYShhKTtcbiAgICAgICAgICAgICAgYiA9IEJhKGIpO1xuICAgICAgICAgICAgICBxIDwgZyA/IChNW2MgPj4gMiA+Pj4gMF0gPSBhLCBNW2MgKyA0ID4+IDIgPj4+IDBdID0gYikgOiAoTVtjID4+IDIgPj4+IDBdID0gYiwgTVtjICsgNCA+PiAyID4+PiAwXSA9IGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgRyhcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiA0Mjk0OTAxNzYwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGI6ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgICAgICAgSTogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgcmV0dXJuIEsuY29weVdpdGhpbihhID4+PiAwID4+PiAwLCBiID4+PiAwLCBiICsgKGMgPj4+IDApID4+PiAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICB2YXIgYiA9IEsubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAoNDI5NDkwMTc2MCA8IGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgNCA+PSBjOyBjICo9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IGIgKiAoMSArIDAuMiAvIGMpO1xuICAgICAgICAgICAgICAgIGYgPSBNYXRoLm1pbihmLCBhICsgMTAwNjYzMjk2KTtcbiAgICAgICAgICAgICAgICB2YXIgZyA9IE1hdGg7XG4gICAgICAgICAgICAgICAgZiA9IE1hdGgubWF4KGEsIGYpO1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgIGcgPSBnLm1pbi5jYWxsKGcsIDQyOTQ5MDE3NjAsIGYgKyAoNjU1MzYgLSBmICUgNjU1MzYpICUgNjU1MzYpIC0gSC5idWZmZXIuYnl0ZUxlbmd0aCArIDY1NTM1ID4+PiAxNjtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEguZ3JvdyhnKTtcbiAgICAgICAgICAgICAgICAgICAgZWEoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGggPSAxO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGgpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQzogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBjID0gMDtcbiAgICAgICAgICAgICAgQ2EoKS5mb3JFYWNoKGZ1bmN0aW9uKGYsIGcpIHtcbiAgICAgICAgICAgICAgICB2YXIgaCA9IGIgKyBjO1xuICAgICAgICAgICAgICAgIGcgPSBNW2EgKyA0ICogZyA+PiAyID4+PiAwXSA9IGg7XG4gICAgICAgICAgICAgICAgZm9yIChoID0gMDsgaCA8IGYubGVuZ3RoOyArK2gpXG4gICAgICAgICAgICAgICAgICBKW2crKyA+PiAwID4+PiAwXSA9IGYuY2hhckNvZGVBdChoKTtcbiAgICAgICAgICAgICAgICBKW2cgPj4gMCA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgICAgIGMgKz0gZi5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRDogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBjID0gQ2EoKTtcbiAgICAgICAgICAgICAgTVthID4+IDIgPj4+IDBdID0gYy5sZW5ndGg7XG4gICAgICAgICAgICAgIHZhciBmID0gMDtcbiAgICAgICAgICAgICAgYy5mb3JFYWNoKGZ1bmN0aW9uKGcpIHtcbiAgICAgICAgICAgICAgICBmICs9IGcubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE1bYiA+PiAyID4+PiAwXSA9IGY7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGY6ICgpID0+IDUyLFxuICAgICAgICAgICAgajogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDcwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGk6IGZ1bmN0aW9uKGEsIGIsIGMsIGYpIHtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICBmID4+Pj0gMDtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZyA9IDAsIGggPSAwOyBoIDwgYzsgaCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG0gPSBNW2IgPj4gMiA+Pj4gMF0sIHEgPSBNW2IgKyA0ID4+IDIgPj4+IDBdO1xuICAgICAgICAgICAgICAgIGIgKz0gODtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IHE7IHcrKykge1xuICAgICAgICAgICAgICAgICAgdmFyIHQgPSBLW20gKyB3ID4+PiAwXSwgdSA9IERhW2FdO1xuICAgICAgICAgICAgICAgICAgMCA9PT0gdCB8fCAxMCA9PT0gdCA/ICgoMSA9PT0gYSA/IGNhIDogRSkodWEodSwgMCkpLCB1Lmxlbmd0aCA9IDApIDogdS5wdXNoKHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnICs9IHE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgTVtmID4+IDIgPj4+IDBdID0gZztcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQTogSGEsXG4gICAgICAgICAgICBjOiBmdW5jdGlvbihhLCBiLCBjLCBmKSB7XG4gICAgICAgICAgICAgIHJldHVybiBIYShhID4+PiAwLCBiID4+PiAwLCBjID4+PiAwLCBmID4+PiAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGEoYykge1xuICAgICAgICAgICAgICBjID0gYy5leHBvcnRzO1xuICAgICAgICAgICAgICBJID0gYyA9IEthKGMpO1xuICAgICAgICAgICAgICBIID0gSS5KO1xuICAgICAgICAgICAgICBlYSgpO1xuICAgICAgICAgICAgICBoYS51bnNoaWZ0KEkuSyk7XG4gICAgICAgICAgICAgIE4tLTtcbiAgICAgICAgICAgICAgZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzICYmIGQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhOKTtcbiAgICAgICAgICAgICAgaWYgKDAgPT0gTiAmJiAobnVsbCAhPT0gTyAmJiAoY2xlYXJJbnRlcnZhbChPKSwgTyA9IG51bGwpLCBQKSkge1xuICAgICAgICAgICAgICAgIHZhciBmID0gUDtcbiAgICAgICAgICAgICAgICBQID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYiA9IHsgYTogSmEgfTtcbiAgICAgICAgICAgIE4rKztcbiAgICAgICAgICAgIGQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoTik7XG4gICAgICAgICAgICBpZiAoZC5pbnN0YW50aWF0ZVdhc20pXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuaW5zdGFudGlhdGVXYXNtKGIsIGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgRShcIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6IFwiICsgYyksIGwoYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhKGIsIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgICAgYShjLmluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGwpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgZC5fT3J0SW5pdCA9IChhLCBiKSA9PiAoZC5fT3J0SW5pdCA9IEkuTCkoYSwgYik7XG4gICAgICAgICAgZC5fT3J0R2V0TGFzdEVycm9yID0gKGEsIGIpID0+IChkLl9PcnRHZXRMYXN0RXJyb3IgPSBJLk0pKGEsIGIpO1xuICAgICAgICAgIGQuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zID0gKGEsIGIsIGMsIGYsIGcsIGgsIG0sIHEsIHcsIHQpID0+IChkLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucyA9IEkuTikoYSwgYiwgYywgZiwgZywgaCwgbSwgcSwgdywgdCk7XG4gICAgICAgICAgZC5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXIgPSAoYSwgYikgPT4gKGQuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyID0gSS5PKShhLCBiKTtcbiAgICAgICAgICBkLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGUgPSAoYSwgYiwgYykgPT4gKGQuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZSA9IEkuUCkoYSwgYiwgYyk7XG4gICAgICAgICAgZC5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5ID0gKGEsIGIsIGMpID0+IChkLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkgPSBJLlEpKGEsIGIsIGMpO1xuICAgICAgICAgIGQuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucyA9IChhKSA9PiAoZC5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zID0gSS5SKShhKTtcbiAgICAgICAgICBkLl9PcnRDcmVhdGVTZXNzaW9uID0gKGEsIGIsIGMpID0+IChkLl9PcnRDcmVhdGVTZXNzaW9uID0gSS5TKShhLCBiLCBjKTtcbiAgICAgICAgICBkLl9PcnRSZWxlYXNlU2Vzc2lvbiA9IChhKSA9PiAoZC5fT3J0UmVsZWFzZVNlc3Npb24gPSBJLlQpKGEpO1xuICAgICAgICAgIGQuX09ydEdldElucHV0T3V0cHV0Q291bnQgPSAoYSwgYiwgYykgPT4gKGQuX09ydEdldElucHV0T3V0cHV0Q291bnQgPSBJLlUpKGEsIGIsIGMpO1xuICAgICAgICAgIGQuX09ydEdldElucHV0TmFtZSA9IChhLCBiKSA9PiAoZC5fT3J0R2V0SW5wdXROYW1lID0gSS5WKShhLCBiKTtcbiAgICAgICAgICBkLl9PcnRHZXRPdXRwdXROYW1lID0gKGEsIGIpID0+IChkLl9PcnRHZXRPdXRwdXROYW1lID0gSS5XKShhLCBiKTtcbiAgICAgICAgICBkLl9PcnRGcmVlID0gKGEpID0+IChkLl9PcnRGcmVlID0gSS5YKShhKTtcbiAgICAgICAgICBkLl9PcnRDcmVhdGVUZW5zb3IgPSAoYSwgYiwgYywgZiwgZywgaCkgPT4gKGQuX09ydENyZWF0ZVRlbnNvciA9IEkuWSkoYSwgYiwgYywgZiwgZywgaCk7XG4gICAgICAgICAgZC5fT3J0R2V0VGVuc29yRGF0YSA9IChhLCBiLCBjLCBmLCBnKSA9PiAoZC5fT3J0R2V0VGVuc29yRGF0YSA9IEkuWikoYSwgYiwgYywgZiwgZyk7XG4gICAgICAgICAgZC5fT3J0UmVsZWFzZVRlbnNvciA9IChhKSA9PiAoZC5fT3J0UmVsZWFzZVRlbnNvciA9IEkuXykoYSk7XG4gICAgICAgICAgZC5fT3J0Q3JlYXRlUnVuT3B0aW9ucyA9IChhLCBiLCBjLCBmKSA9PiAoZC5fT3J0Q3JlYXRlUnVuT3B0aW9ucyA9IEkuJCkoYSwgYiwgYywgZik7XG4gICAgICAgICAgZC5fT3J0QWRkUnVuQ29uZmlnRW50cnkgPSAoYSwgYiwgYykgPT4gKGQuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5ID0gSS5hYSkoYSwgYiwgYyk7XG4gICAgICAgICAgZC5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMgPSAoYSkgPT4gKGQuX09ydFJlbGVhc2VSdW5PcHRpb25zID0gSS5iYSkoYSk7XG4gICAgICAgICAgZC5fT3J0Q3JlYXRlQmluZGluZyA9IChhKSA9PiAoZC5fT3J0Q3JlYXRlQmluZGluZyA9IEkuY2EpKGEpO1xuICAgICAgICAgIGQuX09ydEJpbmRJbnB1dCA9IChhLCBiLCBjKSA9PiAoZC5fT3J0QmluZElucHV0ID0gSS5kYSkoYSwgYiwgYyk7XG4gICAgICAgICAgZC5fT3J0QmluZE91dHB1dCA9IChhLCBiLCBjLCBmKSA9PiAoZC5fT3J0QmluZE91dHB1dCA9IEkuZWEpKGEsIGIsIGMsIGYpO1xuICAgICAgICAgIGQuX09ydENsZWFyQm91bmRPdXRwdXRzID0gKGEpID0+IChkLl9PcnRDbGVhckJvdW5kT3V0cHV0cyA9IEkuZmEpKGEpO1xuICAgICAgICAgIGQuX09ydFJlbGVhc2VCaW5kaW5nID0gKGEpID0+IChkLl9PcnRSZWxlYXNlQmluZGluZyA9IEkuZ2EpKGEpO1xuICAgICAgICAgIGQuX09ydFJ1bldpdGhCaW5kaW5nID0gKGEsIGIsIGMsIGYsIGcpID0+IChkLl9PcnRSdW5XaXRoQmluZGluZyA9IEkuaGEpKGEsIGIsIGMsIGYsIGcpO1xuICAgICAgICAgIGQuX09ydFJ1biA9IChhLCBiLCBjLCBmLCBnLCBoLCBtLCBxKSA9PiAoZC5fT3J0UnVuID0gSS5pYSkoYSwgYiwgYywgZiwgZywgaCwgbSwgcSk7XG4gICAgICAgICAgZC5fT3J0RW5kUHJvZmlsaW5nID0gKGEpID0+IChkLl9PcnRFbmRQcm9maWxpbmcgPSBJLmphKShhKTtcbiAgICAgICAgICBkLl9PcnRUcmFpbmluZ0xvYWRDaGVja3BvaW50ID0gKGEsIGIpID0+IChkLl9PcnRUcmFpbmluZ0xvYWRDaGVja3BvaW50ID0gSS5rYSkoYSwgYik7XG4gICAgICAgICAgZC5fT3J0VHJhaW5pbmdSZWxlYXNlQ2hlY2twb2ludCA9IChhKSA9PiAoZC5fT3J0VHJhaW5pbmdSZWxlYXNlQ2hlY2twb2ludCA9IEkubGEpKGEpO1xuICAgICAgICAgIGQuX09ydFRyYWluaW5nQ3JlYXRlU2Vzc2lvbiA9IChhLCBiLCBjLCBmLCBnLCBoLCBtLCBxKSA9PiAoZC5fT3J0VHJhaW5pbmdDcmVhdGVTZXNzaW9uID0gSS5tYSkoYSwgYiwgYywgZiwgZywgaCwgbSwgcSk7XG4gICAgICAgICAgZC5fT3J0VHJhaW5pbmdMYXp5UmVzZXRHcmFkID0gKGEpID0+IChkLl9PcnRUcmFpbmluZ0xhenlSZXNldEdyYWQgPSBJLm5hKShhKTtcbiAgICAgICAgICBkLl9PcnRUcmFpbmluZ1J1blRyYWluU3RlcCA9IChhLCBiLCBjLCBmLCBnLCBoKSA9PiAoZC5fT3J0VHJhaW5pbmdSdW5UcmFpblN0ZXAgPSBJLm9hKShhLCBiLCBjLCBmLCBnLCBoKTtcbiAgICAgICAgICBkLl9PcnRUcmFpbmluZ09wdGltaXplclN0ZXAgPSAoYSwgYikgPT4gKGQuX09ydFRyYWluaW5nT3B0aW1pemVyU3RlcCA9IEkucGEpKGEsIGIpO1xuICAgICAgICAgIGQuX09ydFRyYWluaW5nRXZhbFN0ZXAgPSAoYSwgYiwgYywgZiwgZywgaCkgPT4gKGQuX09ydFRyYWluaW5nRXZhbFN0ZXAgPSBJLnFhKShhLCBiLCBjLCBmLCBnLCBoKTtcbiAgICAgICAgICBkLl9PcnRUcmFpbmluZ0dldFBhcmFtZXRlcnNTaXplID0gKGEsIGIsIGMpID0+IChkLl9PcnRUcmFpbmluZ0dldFBhcmFtZXRlcnNTaXplID0gSS5yYSkoYSwgYiwgYyk7XG4gICAgICAgICAgZC5fT3J0VHJhaW5pbmdDb3B5UGFyYW1ldGVyc1RvQnVmZmVyID0gKGEsIGIsIGMsIGYpID0+IChkLl9PcnRUcmFpbmluZ0NvcHlQYXJhbWV0ZXJzVG9CdWZmZXIgPSBJLnNhKShhLCBiLCBjLCBmKTtcbiAgICAgICAgICBkLl9PcnRUcmFpbmluZ0NvcHlQYXJhbWV0ZXJzRnJvbUJ1ZmZlciA9IChhLCBiLCBjLCBmKSA9PiAoZC5fT3J0VHJhaW5pbmdDb3B5UGFyYW1ldGVyc0Zyb21CdWZmZXIgPSBJLnRhKShhLCBiLCBjLCBmKTtcbiAgICAgICAgICBkLl9PcnRUcmFpbmluZ1JlbGVhc2VTZXNzaW9uID0gKGEpID0+IChkLl9PcnRUcmFpbmluZ1JlbGVhc2VTZXNzaW9uID0gSS51YSkoYSk7XG4gICAgICAgICAgdmFyIEFhID0gZC5fbWFsbG9jID0gKGEpID0+IChBYSA9IGQuX21hbGxvYyA9IEkudmEpKGEpO1xuICAgICAgICAgIGQuX2ZyZWUgPSAoYSkgPT4gKGQuX2ZyZWUgPSBJLndhKShhKTtcbiAgICAgICAgICB2YXIgSWEgPSAoYSkgPT4gKElhID0gSS55YSkoYSksIExhID0gKCkgPT4gKExhID0gSS56YSkoKSwgTWEgPSAoYSkgPT4gKE1hID0gSS5BYSkoYSksIE5hID0gKGEpID0+IChOYSA9IEkuQmEpKGEpO1xuICAgICAgICAgIGZ1bmN0aW9uIEthKGEpIHtcbiAgICAgICAgICAgIGEgPSBPYmplY3QuYXNzaWduKHt9LCBhKTtcbiAgICAgICAgICAgIHZhciBiID0gKGYpID0+ICgpID0+IGYoKSA+Pj4gMCwgYyA9IChmKSA9PiAoZykgPT4gZihnKSA+Pj4gMDtcbiAgICAgICAgICAgIGEuX19lcnJub19sb2NhdGlvbiA9IGIoYS5fX2Vycm5vX2xvY2F0aW9uKTtcbiAgICAgICAgICAgIGEubWFsbG9jID0gYyhhLm1hbGxvYyk7XG4gICAgICAgICAgICBhLnN0YWNrU2F2ZSA9IGIoYS5zdGFja1NhdmUpO1xuICAgICAgICAgICAgYS5zdGFja0FsbG9jID0gYyhhLnN0YWNrQWxsb2MpO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGQuc3RhY2tBbGxvYyA9IE5hO1xuICAgICAgICAgIGQuc3RhY2tTYXZlID0gTGE7XG4gICAgICAgICAgZC5zdGFja1Jlc3RvcmUgPSBNYTtcbiAgICAgICAgICBkLlVURjhUb1N0cmluZyA9IFQ7XG4gICAgICAgICAgZC5zdHJpbmdUb1VURjggPSAoYSwgYiwgYykgPT4gVihhLCBLLCBiLCBjKTtcbiAgICAgICAgICBkLmxlbmd0aEJ5dGVzVVRGOCA9IFU7XG4gICAgICAgICAgdmFyIFo7XG4gICAgICAgICAgUCA9IGZ1bmN0aW9uIE9hKCkge1xuICAgICAgICAgICAgWiB8fCBQYSgpO1xuICAgICAgICAgICAgWiB8fCAoUCA9IE9hKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGZ1bmN0aW9uIFBhKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gYSgpIHtcbiAgICAgICAgICAgICAgaWYgKCFaICYmIChaID0gdHJ1ZSwgZC5jYWxsZWRSdW4gPSB0cnVlLCAhZGEpKSB7XG4gICAgICAgICAgICAgICAgUyhoYSk7XG4gICAgICAgICAgICAgICAgayhkKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5vblJ1bnRpbWVJbml0aWFsaXplZClcbiAgICAgICAgICAgICAgICAgIGQub25SdW50aW1lSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5wb3N0UnVuKVxuICAgICAgICAgICAgICAgICAgZm9yIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGQucG9zdFJ1biAmJiAoZC5wb3N0UnVuID0gW2QucG9zdFJ1bl0pOyBkLnBvc3RSdW4ubGVuZ3RoOyApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBkLnBvc3RSdW4uc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWEudW5zaGlmdChiKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBTKGlhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoMCA8IE4pKSB7XG4gICAgICAgICAgICAgIGlmIChkLnByZVJ1bilcbiAgICAgICAgICAgICAgICBmb3IgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZC5wcmVSdW4gJiYgKGQucHJlUnVuID0gW2QucHJlUnVuXSk7IGQucHJlUnVuLmxlbmd0aDsgKVxuICAgICAgICAgICAgICAgICAgamEoKTtcbiAgICAgICAgICAgICAgUyhmYSk7XG4gICAgICAgICAgICAgIDAgPCBOIHx8IChkLnNldFN0YXR1cyA/IChkLnNldFN0YXR1cyhcIlJ1bm5pbmcuLi5cIiksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGQuc2V0U3RhdHVzKFwiXCIpO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgICAgfSwgMSkpIDogYSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGQucHJlSW5pdClcbiAgICAgICAgICAgIGZvciAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBkLnByZUluaXQgJiYgKGQucHJlSW5pdCA9IFtkLnByZUluaXRdKTsgMCA8IGQucHJlSW5pdC5sZW5ndGg7IClcbiAgICAgICAgICAgICAgZC5wcmVJbml0LnBvcCgpKCk7XG4gICAgICAgICAgUGEoKTtcbiAgICAgICAgICByZXR1cm4gbW9kdWxlQXJnLnJlYWR5O1xuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG9ydFdhc207XG4gICAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lW1wiYW1kXCJdKVxuICAgICAgICBkZWZpbmUoW10sICgpID0+IG9ydFdhc20pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTp3b3JrZXJfdGhyZWFkc1xuICB2YXIgcmVxdWlyZV93b3JrZXJfdGhyZWFkcyA9IF9fY29tbW9uSlMoe1xuICAgIFwibm9kZWpzLWlnbm9yZTp3b3JrZXJfdGhyZWFkc1wiKCkge1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTpwZXJmX2hvb2tzXG4gIHZhciByZXF1aXJlX3BlcmZfaG9va3MgPSBfX2NvbW1vbkpTKHtcbiAgICBcIm5vZGVqcy1pZ25vcmU6cGVyZl9ob29rc1wiKCkge1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTpvc1xuICB2YXIgb3NfZXhwb3J0cyA9IHt9O1xuICBfX2V4cG9ydChvc19leHBvcnRzLCB7XG4gICAgY3B1czogKCkgPT4gY3B1c1xuICB9KTtcbiAgdmFyIGNwdXM7XG4gIHZhciBpbml0X29zID0gX19lc20oe1xuICAgIFwibm9kZWpzLWlnbm9yZTpvc1wiKCkge1xuICAgICAgY3B1cyA9IHZvaWQgMDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9iaW5kaW5nL29ydC13YXNtLXRocmVhZGVkLmpzXG4gIHZhciByZXF1aXJlX29ydF93YXNtX3RocmVhZGVkID0gX19jb21tb25KUyh7XG4gICAgXCJ3ZWIvbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC5qc1wiKGV4cG9ydHMsIG1vZHVsZSkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICB2YXIgb3J0V2FzbVRocmVhZGVkID0gKCgpID0+IHtcbiAgICAgICAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdm9pZCAwO1xuICAgICAgICBpZiAodHlwZW9mIF9fZmlsZW5hbWUgIT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgX3NjcmlwdERpciA9IF9zY3JpcHREaXIgfHwgX19maWxlbmFtZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZUFyZyA9IHt9KSB7XG4gICAgICAgICAgZnVuY3Rpb24gYWEoKSB7XG4gICAgICAgICAgICBkLmJ1ZmZlciAhPSBsLmJ1ZmZlciAmJiBtKCk7XG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbigpIHtcbiAgICAgICAgICAgIGQuYnVmZmVyICE9IGwuYnVmZmVyICYmIG0oKTtcbiAgICAgICAgICAgIHJldHVybiBiYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gcCgpIHtcbiAgICAgICAgICAgIGQuYnVmZmVyICE9IGwuYnVmZmVyICYmIG0oKTtcbiAgICAgICAgICAgIHJldHVybiBjYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gcigpIHtcbiAgICAgICAgICAgIGQuYnVmZmVyICE9IGwuYnVmZmVyICYmIG0oKTtcbiAgICAgICAgICAgIHJldHVybiBkYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gZWEoKSB7XG4gICAgICAgICAgICBkLmJ1ZmZlciAhPSBsLmJ1ZmZlciAmJiBtKCk7XG4gICAgICAgICAgICByZXR1cm4gZmE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB3ID0gbW9kdWxlQXJnLCBoYSwgeDtcbiAgICAgICAgICB3LnJlYWR5ID0gbmV3IFByb21pc2UoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGhhID0gYTtcbiAgICAgICAgICAgIHggPSBiO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBpYSA9IE9iamVjdC5hc3NpZ24oe30sIHcpLCBqYSA9IFwiLi90aGlzLnByb2dyYW1cIiwgeiA9IChhLCBiKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBiO1xuICAgICAgICAgIH0sIGthID0gXCJvYmplY3RcIiA9PSB0eXBlb2Ygd2luZG93LCBBID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBpbXBvcnRTY3JpcHRzLCBCID0gXCJvYmplY3RcIiA9PSB0eXBlb2YgcHJvY2VzcyAmJiBcIm9iamVjdFwiID09IHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zICYmIFwic3RyaW5nXCIgPT0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSwgRCA9IHcuRU5WSVJPTk1FTlRfSVNfUFRIUkVBRCB8fCBmYWxzZSwgRSA9IFwiXCI7XG4gICAgICAgICAgZnVuY3Rpb24gbGEoYSkge1xuICAgICAgICAgICAgcmV0dXJuIHcubG9jYXRlRmlsZSA/IHcubG9jYXRlRmlsZShhLCBFKSA6IEUgKyBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbWEsIEYsIEg7XG4gICAgICAgICAgaWYgKEIpIHtcbiAgICAgICAgICAgIHZhciBmcyA9IChpbml0X2ZzKCksIF9fdG9Db21tb25KUyhmc19leHBvcnRzKSksIG5hID0gKGluaXRfcGF0aCgpLCBfX3RvQ29tbW9uSlMocGF0aF9leHBvcnRzKSk7XG4gICAgICAgICAgICBFID0gQSA/IG5hLmRpcm5hbWUoRSkgKyBcIi9cIiA6IF9fZGlybmFtZSArIFwiL1wiO1xuICAgICAgICAgICAgbWEgPSAoYiwgYykgPT4ge1xuICAgICAgICAgICAgICBiID0gYi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSA/IG5ldyBVUkwoYikgOiBuYS5ub3JtYWxpemUoYik7XG4gICAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoYiwgYyA/IHZvaWQgMCA6IFwidXRmOFwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBIID0gKGIpID0+IHtcbiAgICAgICAgICAgICAgYiA9IG1hKGIsIHRydWUpO1xuICAgICAgICAgICAgICBiLmJ1ZmZlciB8fCAoYiA9IG5ldyBVaW50OEFycmF5KGIpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgRiA9IChiLCBjLCBlLCBoID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgICBiID0gYi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSA/IG5ldyBVUkwoYikgOiBuYS5ub3JtYWxpemUoYik7XG4gICAgICAgICAgICAgIGZzLnJlYWRGaWxlKGIsIGggPyB2b2lkIDAgOiBcInV0ZjhcIiwgKGcsIGspID0+IHtcbiAgICAgICAgICAgICAgICBnID8gZShnKSA6IGMoaCA/IGsuYnVmZmVyIDogayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICF3LnRoaXNQcm9ncmFtICYmIDEgPCBwcm9jZXNzLmFyZ3YubGVuZ3RoICYmIChqYSA9IHByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gICAgICAgICAgICBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gICAgICAgICAgICB6ID0gKGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IGI7XG4gICAgICAgICAgICAgIHRocm93IGM7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdy5pbnNwZWN0ID0gKCkgPT4gXCJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XVwiO1xuICAgICAgICAgICAgbGV0IGE7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhID0gcmVxdWlyZV93b3JrZXJfdGhyZWFkcygpO1xuICAgICAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgICAgICB0aHJvdyBjb25zb2xlLmVycm9yKCdUaGUgXCJ3b3JrZXJfdGhyZWFkc1wiIG1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgbm9kZS5qcyBidWlsZCAtIHBlcmhhcHMgYSBuZXdlciB2ZXJzaW9uIGlzIG5lZWRlZD8nKSwgYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdsb2JhbC5Xb3JrZXIgPSBhLldvcmtlcjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGthIHx8IEEpXG4gICAgICAgICAgICBBID8gRSA9IHNlbGYubG9jYXRpb24uaHJlZiA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIGRvY3VtZW50ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgKEUgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksIHR5cGVvZiBfc2NyaXB0RGlyICE9PSBcInVuZGVmaW5lZFwiICYmIF9zY3JpcHREaXIgJiYgKEUgPSBfc2NyaXB0RGlyKSwgMCAhPT0gRS5pbmRleE9mKFwiYmxvYjpcIikgPyBFID0gRS5zdWJzdHIoMCwgRS5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IEUgPSBcIlwiLCBCIHx8IChtYSA9IChhKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBiID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGIub3BlbihcIkdFVFwiLCBhLCBmYWxzZSk7XG4gICAgICAgICAgICAgIGIuc2VuZChudWxsKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgfSwgQSAmJiAoSCA9IChhKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBiID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGIub3BlbihcIkdFVFwiLCBhLCBmYWxzZSk7XG4gICAgICAgICAgICAgIGIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgICAgICAgICAgICBiLnNlbmQobnVsbCk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pLCBGID0gKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgZS5vcGVuKFwiR0VUXCIsIGEsIHRydWUpO1xuICAgICAgICAgICAgICBlLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICAgICAgZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgMjAwID09IGUuc3RhdHVzIHx8IDAgPT0gZS5zdGF0dXMgJiYgZS5yZXNwb25zZSA/IGIoZS5yZXNwb25zZSkgOiBjKCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGUub25lcnJvciA9IGM7XG4gICAgICAgICAgICAgIGUuc2VuZChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIEIgJiYgXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiYgKGdsb2JhbC5wZXJmb3JtYW5jZSA9IHJlcXVpcmVfcGVyZl9ob29rcygpLnBlcmZvcm1hbmNlKTtcbiAgICAgICAgICB2YXIgb2EgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLCBwYSA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbiAgICAgICAgICBCICYmIChvYSA9ICguLi5hKSA9PiBmcy53cml0ZVN5bmMoMSwgYS5qb2luKFwiIFwiKSArIFwiXFxuXCIpLCBwYSA9ICguLi5hKSA9PiBmcy53cml0ZVN5bmMoMiwgYS5qb2luKFwiIFwiKSArIFwiXFxuXCIpKTtcbiAgICAgICAgICB2YXIgcWEgPSB3LnByaW50IHx8IG9hLCBJID0gdy5wcmludEVyciB8fCBwYTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHcsIGlhKTtcbiAgICAgICAgICBpYSA9IG51bGw7XG4gICAgICAgICAgdy50aGlzUHJvZ3JhbSAmJiAoamEgPSB3LnRoaXNQcm9ncmFtKTtcbiAgICAgICAgICB3LnF1aXQgJiYgKHogPSB3LnF1aXQpO1xuICAgICAgICAgIHZhciBKO1xuICAgICAgICAgIHcud2FzbUJpbmFyeSAmJiAoSiA9IHcud2FzbUJpbmFyeSk7XG4gICAgICAgICAgdmFyIG5vRXhpdFJ1bnRpbWUgPSB3Lm5vRXhpdFJ1bnRpbWUgfHwgdHJ1ZTtcbiAgICAgICAgICBcIm9iamVjdFwiICE9IHR5cGVvZiBXZWJBc3NlbWJseSAmJiBLKFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTtcbiAgICAgICAgICB2YXIgZCwgTCwgcmEsIE0gPSBmYWxzZSwgTiwgbCwgYmEsIGNhLCBkYSwgZmE7XG4gICAgICAgICAgZnVuY3Rpb24gbSgpIHtcbiAgICAgICAgICAgIHZhciBhID0gZC5idWZmZXI7XG4gICAgICAgICAgICB3LkhFQVA4ID0gbCA9IG5ldyBJbnQ4QXJyYXkoYSk7XG4gICAgICAgICAgICB3LkhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGEpO1xuICAgICAgICAgICAgdy5IRUFQMzIgPSBjYSA9IG5ldyBJbnQzMkFycmF5KGEpO1xuICAgICAgICAgICAgdy5IRUFQVTggPSBiYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICAgICAgICAgICAgdy5IRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGEpO1xuICAgICAgICAgICAgdy5IRUFQVTMyID0gZGEgPSBuZXcgVWludDMyQXJyYXkoYSk7XG4gICAgICAgICAgICB3LkhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGEpO1xuICAgICAgICAgICAgdy5IRUFQRjY0ID0gZmEgPSBuZXcgRmxvYXQ2NEFycmF5KGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgTyA9IHcuSU5JVElBTF9NRU1PUlkgfHwgMTY3NzcyMTY7XG4gICAgICAgICAgNTI0Mjg4MCA8PSBPIHx8IEsoXCJJTklUSUFMX01FTU9SWSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gU1RBQ0tfU0laRSwgd2FzIFwiICsgTyArIFwiISAoU1RBQ0tfU0laRT01MjQyODgwKVwiKTtcbiAgICAgICAgICBpZiAoRClcbiAgICAgICAgICAgIGQgPSB3Lndhc21NZW1vcnk7XG4gICAgICAgICAgZWxzZSBpZiAody53YXNtTWVtb3J5KVxuICAgICAgICAgICAgZCA9IHcud2FzbU1lbW9yeTtcbiAgICAgICAgICBlbHNlIGlmIChkID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IE8gLyA2NTUzNiwgbWF4aW11bTogNjU1MzYsIHNoYXJlZDogdHJ1ZSB9KSwgIShkLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKSlcbiAgICAgICAgICAgIHRocm93IEkoXCJyZXF1ZXN0ZWQgYSBzaGFyZWQgV2ViQXNzZW1ibHkuTWVtb3J5IGJ1dCB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIG5vdCBhIFNoYXJlZEFycmF5QnVmZmVyLCBpbmRpY2F0aW5nIHRoYXQgd2hpbGUgdGhlIGJyb3dzZXIgaGFzIFNoYXJlZEFycmF5QnVmZmVyIGl0IGRvZXMgbm90IGhhdmUgV2ViQXNzZW1ibHkgdGhyZWFkcyBzdXBwb3J0IC0geW91IG1heSBuZWVkIHRvIHNldCBhIGZsYWdcIiksIEIgJiYgSShcIihvbiBub2RlIHlvdSBtYXkgbmVlZDogLS1leHBlcmltZW50YWwtd2FzbS10aHJlYWRzIC0tZXhwZXJpbWVudGFsLXdhc20tYnVsay1tZW1vcnkgYW5kL29yIHJlY2VudCB2ZXJzaW9uKVwiKSwgRXJyb3IoXCJiYWQgbWVtb3J5XCIpO1xuICAgICAgICAgIG0oKTtcbiAgICAgICAgICBPID0gZC5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgICB2YXIgc2EsIHRhID0gW10sIHVhID0gW10sIHZhID0gW10sIHdhID0gMDtcbiAgICAgICAgICBmdW5jdGlvbiBQKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5vRXhpdFJ1bnRpbWUgfHwgMCA8IHdhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgUSA9IDAsIHhhID0gbnVsbCwgUiA9IG51bGw7XG4gICAgICAgICAgZnVuY3Rpb24geWEoKSB7XG4gICAgICAgICAgICBRKys7XG4gICAgICAgICAgICB3Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMgJiYgdy5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB6YSgpIHtcbiAgICAgICAgICAgIFEtLTtcbiAgICAgICAgICAgIHcubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiB3Lm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoUSk7XG4gICAgICAgICAgICBpZiAoMCA9PSBRICYmIChudWxsICE9PSB4YSAmJiAoY2xlYXJJbnRlcnZhbCh4YSksIHhhID0gbnVsbCksIFIpKSB7XG4gICAgICAgICAgICAgIHZhciBhID0gUjtcbiAgICAgICAgICAgICAgUiA9IG51bGw7XG4gICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSyhhKSB7XG4gICAgICAgICAgICBpZiAody5vbkFib3J0KVxuICAgICAgICAgICAgICB3Lm9uQWJvcnQoYSk7XG4gICAgICAgICAgICBhID0gXCJBYm9ydGVkKFwiICsgYSArIFwiKVwiO1xuICAgICAgICAgICAgSShhKTtcbiAgICAgICAgICAgIE0gPSB0cnVlO1xuICAgICAgICAgICAgTiA9IDE7XG4gICAgICAgICAgICBhID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihhICsgXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCIpO1xuICAgICAgICAgICAgeChhKTtcbiAgICAgICAgICAgIHRocm93IGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEFhKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnN0YXJ0c1dpdGgoXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgUztcbiAgICAgICAgICBTID0gXCJvcnQtd2FzbS10aHJlYWRlZC53YXNtXCI7XG4gICAgICAgICAgQWEoUykgfHwgKFMgPSBsYShTKSk7XG4gICAgICAgICAgZnVuY3Rpb24gQmEoYSkge1xuICAgICAgICAgICAgaWYgKGEgPT0gUyAmJiBKKVxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoSik7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIEgoYSk7XG4gICAgICAgICAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIENhKGEpIHtcbiAgICAgICAgICAgIGlmICghSiAmJiAoa2EgfHwgQSkpIHtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZmV0Y2ggJiYgIWEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGEsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KS50aGVuKChiKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWIub2spXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBhICsgXCInXCI7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IEJhKGEpKTtcbiAgICAgICAgICAgICAgaWYgKEYpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICBGKGEsIChlKSA9PiBiKG5ldyBVaW50OEFycmF5KGUpKSwgYyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBCYShhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIERhKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiBDYShhKS50aGVuKChlKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShlLCBiKSkudGhlbigoZSkgPT4gZSkudGhlbihjLCAoZSkgPT4ge1xuICAgICAgICAgICAgICBJKFwiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogXCIgKyBlKTtcbiAgICAgICAgICAgICAgSyhlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBFYShhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IFM7XG4gICAgICAgICAgICByZXR1cm4gSiB8fCBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nIHx8IEFhKGMpIHx8IGMuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikgfHwgQiB8fCBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGZldGNoID8gRGEoYywgYSwgYikgOiBmZXRjaChjLCB7IGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIgfSkudGhlbigoZSkgPT4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZSwgYSkudGhlbihiLCBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICAgIEkoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIgKyBoKTtcbiAgICAgICAgICAgICAgSShcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO1xuICAgICAgICAgICAgICByZXR1cm4gRGEoYywgYSwgYik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBUO1xuICAgICAgICAgIGZ1bmN0aW9uIFUoYSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gXCJFeGl0U3RhdHVzXCI7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBgUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2F9KWA7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEZhKGEpIHtcbiAgICAgICAgICAgIGEudGVybWluYXRlKCk7XG4gICAgICAgICAgICBhLm9ubWVzc2FnZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEdhKGEpIHtcbiAgICAgICAgICAgIChhID0gVi5MYVthXSkgfHwgSygpO1xuICAgICAgICAgICAgVi5sYihhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSGEoYSkge1xuICAgICAgICAgICAgdmFyIGIgPSBWLmZiKCk7XG4gICAgICAgICAgICBpZiAoIWIpXG4gICAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgVi5PYS5wdXNoKGIpO1xuICAgICAgICAgICAgVi5MYVthLk5hXSA9IGI7XG4gICAgICAgICAgICBiLk5hID0gYS5OYTtcbiAgICAgICAgICAgIHZhciBjID0geyBjbWQ6IFwicnVuXCIsIHN0YXJ0X3JvdXRpbmU6IGEubWIsIGFyZzogYS5lYiwgcHRocmVhZF9wdHI6IGEuTmEgfTtcbiAgICAgICAgICAgIEIgJiYgYi51bnJlZigpO1xuICAgICAgICAgICAgYi5wb3N0TWVzc2FnZShjLCBhLnNiKTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgSWEgPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBUZXh0RGVjb2RlciA/IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIikgOiB2b2lkIDAsIEphID0gKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIGUgPSBiICsgYztcbiAgICAgICAgICAgIGZvciAoYyA9IGI7IGFbY10gJiYgIShjID49IGUpOyApXG4gICAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmICgxNiA8IGMgLSBiICYmIGEuYnVmZmVyICYmIElhKVxuICAgICAgICAgICAgICByZXR1cm4gSWEuZGVjb2RlKGEuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPyBhLnNsaWNlKGIsIGMpIDogYS5zdWJhcnJheShiLCBjKSk7XG4gICAgICAgICAgICBmb3IgKGUgPSBcIlwiOyBiIDwgYzsgKSB7XG4gICAgICAgICAgICAgIHZhciBoID0gYVtiKytdO1xuICAgICAgICAgICAgICBpZiAoaCAmIDEyOCkge1xuICAgICAgICAgICAgICAgIHZhciBnID0gYVtiKytdICYgNjM7XG4gICAgICAgICAgICAgICAgaWYgKDE5MiA9PSAoaCAmIDIyNCkpXG4gICAgICAgICAgICAgICAgICBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGggJiAzMSkgPDwgNiB8IGcpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIGsgPSBhW2IrK10gJiA2MztcbiAgICAgICAgICAgICAgICAgIGggPSAyMjQgPT0gKGggJiAyNDApID8gKGggJiAxNSkgPDwgMTIgfCBnIDw8IDYgfCBrIDogKGggJiA3KSA8PCAxOCB8IGcgPDwgMTIgfCBrIDw8IDYgfCBhW2IrK10gJiA2MztcbiAgICAgICAgICAgICAgICAgIDY1NTM2ID4gaCA/IGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShoKSA6IChoIC09IDY1NTM2LCBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCBoID4+IDEwLCA1NjMyMCB8IGggJiAxMDIzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9LCBLYSA9IChhLCBiKSA9PiAoYSA+Pj49IDApID8gSmEobigpLCBhLCBiKSA6IFwiXCI7XG4gICAgICAgICAgZnVuY3Rpb24gTGEoYSkge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDEsIDEsIGEpO1xuICAgICAgICAgICAgTiA9IGE7XG4gICAgICAgICAgICBpZiAoIVAoKSkge1xuICAgICAgICAgICAgICBWLm5iKCk7XG4gICAgICAgICAgICAgIGlmICh3Lm9uRXhpdClcbiAgICAgICAgICAgICAgICB3Lm9uRXhpdChhKTtcbiAgICAgICAgICAgICAgTSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6KGEsIG5ldyBVKGEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIE5hID0gKGEpID0+IHtcbiAgICAgICAgICAgIE4gPSBhO1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHRocm93IE1hKGEpLCBcInVud2luZFwiO1xuICAgICAgICAgICAgTGEoYSk7XG4gICAgICAgICAgfSwgViA9IHtcbiAgICAgICAgICAgIFJhOiBbXSxcbiAgICAgICAgICAgIE9hOiBbXSxcbiAgICAgICAgICAgIFphOiBbXSxcbiAgICAgICAgICAgIExhOiB7fSxcbiAgICAgICAgICAgIFZhOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgRCA/IFYuaGIoKSA6IFYuZ2IoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRhLnVuc2hpZnQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHlhKCk7XG4gICAgICAgICAgICAgICAgVi5pYigoKSA9PiB6YSgpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBWLnJlY2VpdmVPYmplY3RUcmFuc2ZlciA9IFYua2I7XG4gICAgICAgICAgICAgIFYudGhyZWFkSW5pdFRMUyA9IFYuWWE7XG4gICAgICAgICAgICAgIFYuc2V0RXhpdFN0YXR1cyA9IFYuWGE7XG4gICAgICAgICAgICAgIG5vRXhpdFJ1bnRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBYYTogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBOID0gYTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4YjogW1wiJHRlcm1pbmF0ZVdvcmtlclwiXSxcbiAgICAgICAgICAgIG5iOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYSBvZiBWLk9hKVxuICAgICAgICAgICAgICAgIEZhKGEpO1xuICAgICAgICAgICAgICBmb3IgKGEgb2YgVi5SYSlcbiAgICAgICAgICAgICAgICBGYShhKTtcbiAgICAgICAgICAgICAgVi5SYSA9IFtdO1xuICAgICAgICAgICAgICBWLk9hID0gW107XG4gICAgICAgICAgICAgIFYuTGEgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYjogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICB2YXIgYiA9IGEuTmE7XG4gICAgICAgICAgICAgIGRlbGV0ZSBWLkxhW2JdO1xuICAgICAgICAgICAgICBWLlJhLnB1c2goYSk7XG4gICAgICAgICAgICAgIFYuT2Euc3BsaWNlKFYuT2EuaW5kZXhPZihhKSwgMSk7XG4gICAgICAgICAgICAgIGEuTmEgPSAwO1xuICAgICAgICAgICAgICBPYShiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgWWE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBWLlphLmZvckVhY2goKGEpID0+IGEoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgamI6IChhKSA9PiBuZXcgUHJvbWlzZSgoYikgPT4ge1xuICAgICAgICAgICAgICBhLm9ubWVzc2FnZSA9IChnKSA9PiB7XG4gICAgICAgICAgICAgICAgZyA9IGcuZGF0YTtcbiAgICAgICAgICAgICAgICB2YXIgayA9IGcuY21kO1xuICAgICAgICAgICAgICAgIGlmIChnLnRhcmdldFRocmVhZCAmJiBnLnRhcmdldFRocmVhZCAhPSBYKCkpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB0ID0gVi5MYVtnLndiXTtcbiAgICAgICAgICAgICAgICAgIHQgPyB0LnBvc3RNZXNzYWdlKGcsIGcudHJhbnNmZXJMaXN0KSA6IEkoJ0ludGVybmFsIGVycm9yISBXb3JrZXIgc2VudCBhIG1lc3NhZ2UgXCInICsgayArICdcIiB0byB0YXJnZXQgcHRocmVhZCAnICsgZy50YXJnZXRUaHJlYWQgKyBcIiwgYnV0IHRoYXQgdGhyZWFkIG5vIGxvbmdlciBleGlzdHMhXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXCJjaGVja01haWxib3hcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIFkoKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInNwYXduVGhyZWFkXCIgPT09IGspXG4gICAgICAgICAgICAgICAgICBIYShnKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImNsZWFudXBUaHJlYWRcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIEdhKGcudGhyZWFkKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImtpbGxUaHJlYWRcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIGcgPSBnLnRocmVhZCwgayA9IFYuTGFbZ10sIGRlbGV0ZSBWLkxhW2ddLCBGYShrKSwgT2EoZyksIFYuT2Euc3BsaWNlKFxuICAgICAgICAgICAgICAgICAgICBWLk9hLmluZGV4T2YoayksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICksIGsuTmEgPSAwO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiY2FuY2VsVGhyZWFkXCIgPT09IGspXG4gICAgICAgICAgICAgICAgICBWLkxhW2cudGhyZWFkXS5wb3N0TWVzc2FnZSh7IGNtZDogXCJjYW5jZWxcIiB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImxvYWRlZFwiID09PSBrKVxuICAgICAgICAgICAgICAgICAgYS5sb2FkZWQgPSB0cnVlLCBiKGEpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiYWxlcnRcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiVGhyZWFkIFwiICsgZy50aHJlYWRJZCArIFwiOiBcIiArIGcudGV4dCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXCJzZXRpbW1lZGlhdGVcIiA9PT0gZy50YXJnZXQpXG4gICAgICAgICAgICAgICAgICBhLnBvc3RNZXNzYWdlKGcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiY2FsbEhhbmRsZXJcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIHdbZy5oYW5kbGVyXSguLi5nLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGsgJiYgSShcIndvcmtlciBzZW50IGFuIHVua25vd24gY29tbWFuZCBcIiArIGspO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhLm9uZXJyb3IgPSAoZykgPT4ge1xuICAgICAgICAgICAgICAgIEkoXCJ3b3JrZXIgc2VudCBhbiBlcnJvciEgXCIgKyBnLmZpbGVuYW1lICsgXCI6XCIgKyBnLmxpbmVubyArIFwiOiBcIiArIGcubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZztcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgQiAmJiAoYS5vbihcIm1lc3NhZ2VcIiwgZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgICAgIGEub25tZXNzYWdlKHsgZGF0YTogZyB9KTtcbiAgICAgICAgICAgICAgfSksIGEub24oXCJlcnJvclwiLCBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICAgICAgYS5vbmVycm9yKGcpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHZhciBjID0gW10sIGUgPSBbXCJvbkV4aXRcIiwgXCJvbkFib3J0XCIsIFwicHJpbnRcIiwgXCJwcmludEVyclwiXSwgaDtcbiAgICAgICAgICAgICAgZm9yIChoIG9mIGUpXG4gICAgICAgICAgICAgICAgdy5oYXNPd25Qcm9wZXJ0eShoKSAmJiBjLnB1c2goaCk7XG4gICAgICAgICAgICAgIGEucG9zdE1lc3NhZ2UoeyBjbWQ6IFwibG9hZFwiLCBoYW5kbGVyczogYywgdXJsT3JCbG9iOiB3Lm1haW5TY3JpcHRVcmxPckJsb2IgfHwgX3NjcmlwdERpciwgd2FzbU1lbW9yeTogZCwgd2FzbU1vZHVsZTogcmEgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGliOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBhID0gbGEoXCJvcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanNcIik7XG4gICAgICAgICAgICAgIGEgPSBuZXcgV29ya2VyKGEpO1xuICAgICAgICAgICAgICBWLlJhLnB1c2goYSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAwID09IFYuUmEubGVuZ3RoICYmIChWLmNiKCksIFYuamIoVi5SYVswXSkpO1xuICAgICAgICAgICAgICByZXR1cm4gVi5SYS5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHcuUFRocmVhZCA9IFY7XG4gICAgICAgICAgdmFyIFBhID0gKGEpID0+IHtcbiAgICAgICAgICAgIGZvciAoOyAwIDwgYS5sZW5ndGg7IClcbiAgICAgICAgICAgICAgYS5zaGlmdCgpKHcpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdy5lc3RhYmxpc2hTdGFja1NwYWNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgYSA9IFgoKSwgYiA9IHAoKVthICsgNTIgPj4gMiA+Pj4gMF07XG4gICAgICAgICAgICBhID0gcCgpW2EgKyA1NiA+PiAyID4+PiAwXTtcbiAgICAgICAgICAgIFFhKGIsIGIgLSBhKTtcbiAgICAgICAgICAgIFJhKGIpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gTWEoYSkge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDIsIDAsIGEpO1xuICAgICAgICAgICAgTmEoYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBTYSA9IFtdO1xuICAgICAgICAgIHcuaW52b2tlRW50cnlQb2ludCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gU2FbYV07XG4gICAgICAgICAgICBjIHx8IChhID49IFNhLmxlbmd0aCAmJiAoU2EubGVuZ3RoID0gYSArIDEpLCBTYVthXSA9IGMgPSBzYS5nZXQoYSkpO1xuICAgICAgICAgICAgYSA9IGMoYik7XG4gICAgICAgICAgICBQKCkgPyBWLlhhKGEpIDogVGEoYSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmdW5jdGlvbiBVYShhKSB7XG4gICAgICAgICAgICB0aGlzLlVhID0gYSAtIDI0O1xuICAgICAgICAgICAgdGhpcy5iYiA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICAgICAgcigpW3RoaXMuVWEgKyA0ID4+IDIgPj4+IDBdID0gYjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmFiID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICByKClbdGhpcy5VYSArIDggPj4gMiA+Pj4gMF0gPSBiO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuVmEgPSBmdW5jdGlvbihiLCBjKSB7XG4gICAgICAgICAgICAgIHRoaXMuJGEoKTtcbiAgICAgICAgICAgICAgdGhpcy5iYihiKTtcbiAgICAgICAgICAgICAgdGhpcy5hYihjKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLiRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHIoKVt0aGlzLlVhICsgMTYgPj4gMiA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFZhID0gMCwgV2EgPSAwO1xuICAgICAgICAgIGZ1bmN0aW9uIFhhKGEsIGIsIGMsIGUpIHtcbiAgICAgICAgICAgIHJldHVybiBEID8gVygzLCAxLCBhLCBiLCBjLCBlKSA6IFlhKGEsIGIsIGMsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBZYShhLCBiLCBjLCBlKSB7XG4gICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICBlID4+Pj0gMDtcbiAgICAgICAgICAgIGlmIChcInVuZGVmaW5lZFwiID09IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcilcbiAgICAgICAgICAgICAgcmV0dXJuIEkoXCJDdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgU2hhcmVkQXJyYXlCdWZmZXIsIHB0aHJlYWRzIGFyZSBub3QgYXZhaWxhYmxlIVwiKSwgNjtcbiAgICAgICAgICAgIHZhciBoID0gW107XG4gICAgICAgICAgICBpZiAoRCAmJiAwID09PSBoLmxlbmd0aClcbiAgICAgICAgICAgICAgcmV0dXJuIFhhKGEsIGIsIGMsIGUpO1xuICAgICAgICAgICAgYSA9IHsgbWI6IGMsIE5hOiBhLCBlYjogZSwgc2I6IGggfTtcbiAgICAgICAgICAgIHJldHVybiBEID8gKGEudWIgPSBcInNwYXduVGhyZWFkXCIsIHBvc3RNZXNzYWdlKGEsIGgpLCAwKSA6IEhhKGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBaYShhLCBiLCBjKSB7XG4gICAgICAgICAgICByZXR1cm4gRCA/IFcoNCwgMSwgYSwgYiwgYykgOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiAkYShhLCBiKSB7XG4gICAgICAgICAgICBpZiAoRClcbiAgICAgICAgICAgICAgcmV0dXJuIFcoNSwgMSwgYSwgYik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBhYiA9IChhKSA9PiB7XG4gICAgICAgICAgICBmb3IgKHZhciBiID0gMCwgYyA9IDA7IGMgPCBhLmxlbmd0aDsgKytjKSB7XG4gICAgICAgICAgICAgIHZhciBlID0gYS5jaGFyQ29kZUF0KGMpO1xuICAgICAgICAgICAgICAxMjcgPj0gZSA/IGIrKyA6IDIwNDcgPj0gZSA/IGIgKz0gMiA6IDU1Mjk2IDw9IGUgJiYgNTczNDMgPj0gZSA/IChiICs9IDQsICsrYykgOiBiICs9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9LCBiYiA9IChhLCBiLCBjLCBlKSA9PiB7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGlmICghKDAgPCBlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB2YXIgaCA9IGM7XG4gICAgICAgICAgICBlID0gYyArIGUgLSAxO1xuICAgICAgICAgICAgZm9yICh2YXIgZyA9IDA7IGcgPCBhLmxlbmd0aDsgKytnKSB7XG4gICAgICAgICAgICAgIHZhciBrID0gYS5jaGFyQ29kZUF0KGcpO1xuICAgICAgICAgICAgICBpZiAoNTUyOTYgPD0gayAmJiA1NzM0MyA+PSBrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSBhLmNoYXJDb2RlQXQoKytnKTtcbiAgICAgICAgICAgICAgICBrID0gNjU1MzYgKyAoKGsgJiAxMDIzKSA8PCAxMCkgfCB0ICYgMTAyMztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoMTI3ID49IGspIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA+PSBlKVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gaztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoMjA0NyA+PSBrKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYyArIDEgPj0gZSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSAxOTIgfCBrID4+IDY7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmICg2NTUzNSA+PSBrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjICsgMiA+PSBlKVxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSAyMjQgfCBrID4+IDEyO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgKyAzID49IGUpXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDI0MCB8IGsgPj4gMTg7XG4gICAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDEyOCB8IGsgPj4gMTIgJiA2MztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDEyOCB8IGsgPj4gNiAmIDYzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSAxMjggfCBrICYgNjM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJbYyA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGMgLSBoO1xuICAgICAgICAgIH0sIGNiID0gKGEsIGIsIGMpID0+IGJiKGEsIG4oKSwgYiwgYyk7XG4gICAgICAgICAgZnVuY3Rpb24gZGIoYSwgYikge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDYsIDEsIGEsIGIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBlYihhLCBiLCBjKSB7XG4gICAgICAgICAgICBpZiAoRClcbiAgICAgICAgICAgICAgcmV0dXJuIFcoNywgMSwgYSwgYiwgYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGZiKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiBEID8gVyg4LCAxLCBhLCBiLCBjKSA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGdiKGEsIGIpIHtcbiAgICAgICAgICAgIGlmIChEKVxuICAgICAgICAgICAgICByZXR1cm4gVyg5LCAxLCBhLCBiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gaGIoYSwgYiwgYykge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDEwLCAxLCBhLCBiLCBjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gaWIoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDExLCAxLCBhLCBiLCBjLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gamIoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDEyLCAxLCBhLCBiLCBjLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24ga2IoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDEzLCAxLCBhLCBiLCBjLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbGIoYSkge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDE0LCAxLCBhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbWIoYSwgYikge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDE1LCAxLCBhLCBiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbmIoYSwgYiwgYykge1xuICAgICAgICAgICAgaWYgKEQpXG4gICAgICAgICAgICAgIHJldHVybiBXKDE2LCAxLCBhLCBiLCBjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9iID0gKGEpID0+IHtcbiAgICAgICAgICAgIGlmICghTSlcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoYSgpLCAhUCgpKVxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgRCA/IFRhKE4pIDogTmEoTik7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgICAgIGIgaW5zdGFuY2VvZiBVIHx8IFwidW53aW5kXCIgPT0gYiB8fCB6KDEsIGIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgYiBpbnN0YW5jZW9mIFUgfHwgXCJ1bndpbmRcIiA9PSBiIHx8IHooMSwgYik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZ1bmN0aW9uIHBiKGEpIHtcbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQXRvbWljcy50YiAmJiAoQXRvbWljcy50YihwKCksIGEgPj4gMiwgYSkudmFsdWUudGhlbihZKSwgYSArPSAxMjgsIEF0b21pY3Muc3RvcmUocCgpLCBhID4+IDIsIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXQgPSBwYjtcbiAgICAgICAgICBmdW5jdGlvbiBZKCkge1xuICAgICAgICAgICAgdmFyIGEgPSBYKCk7XG4gICAgICAgICAgICBhICYmIChwYihhKSwgb2IoKCkgPT4gcWIoKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3LmNoZWNrTWFpbGJveCA9IFk7XG4gICAgICAgICAgdmFyIFogPSAoYSkgPT4gMCA9PT0gYSAlIDQgJiYgKDAgIT09IGEgJSAxMDAgfHwgMCA9PT0gYSAlIDQwMCksIHJiID0gWzAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1XSwgc2IgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdO1xuICAgICAgICAgIGZ1bmN0aW9uIHRiKGEsIGIsIGMsIGUsIGgsIGcsIGssIHQpIHtcbiAgICAgICAgICAgIHJldHVybiBEID8gVygxNywgMSwgYSwgYiwgYywgZSwgaCwgZywgaywgdCkgOiAtNTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHViKGEsIGIsIGMsIGUsIGgsIGcsIGspIHtcbiAgICAgICAgICAgIGlmIChEKVxuICAgICAgICAgICAgICByZXR1cm4gVygxOCwgMSwgYSwgYiwgYywgZSwgaCwgZywgayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB3YiA9IChhKSA9PiB7XG4gICAgICAgICAgICB2YXIgYiA9IGFiKGEpICsgMSwgYyA9IHZiKGIpO1xuICAgICAgICAgICAgYyAmJiBjYihhLCBjLCBiKTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgIH0sIHliID0gKGEpID0+IHtcbiAgICAgICAgICAgIHZhciBiID0geGIoKTtcbiAgICAgICAgICAgIGEgPSBhKCk7XG4gICAgICAgICAgICBSYShiKTtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gVyhhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGggLSAyLCBlID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgcmV0dXJuIHliKCgpID0+IHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaCA9IHpiKDggKiBjKSwgZyA9IGggPj4gMywgayA9IDA7IGsgPCBjOyBrKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IGVbMiArIGtdO1xuICAgICAgICAgICAgICAgIGVhKClbZyArIGsgPj4+IDBdID0gdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gQWIoYSwgYywgaCwgYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIEJiID0gW10sIENiID0ge30sIEViID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFEYikge1xuICAgICAgICAgICAgICB2YXIgYSA9IHsgVVNFUjogXCJ3ZWJfdXNlclwiLCBMT0dOQU1FOiBcIndlYl91c2VyXCIsIFBBVEg6IFwiL1wiLCBQV0Q6IFwiL1wiLCBIT01FOiBcIi9ob21lL3dlYl91c2VyXCIsIExBTkc6IChcIm9iamVjdFwiID09IHR5cGVvZiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIHx8IFwiQ1wiKS5yZXBsYWNlKFwiLVwiLCBcIl9cIikgKyBcIi5VVEYtOFwiLCBfOiBqYSB8fCBcIi4vdGhpcy5wcm9ncmFtXCIgfSwgYjtcbiAgICAgICAgICAgICAgZm9yIChiIGluIENiKVxuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gQ2JbYl0gPyBkZWxldGUgYVtiXSA6IGFbYl0gPSBDYltiXTtcbiAgICAgICAgICAgICAgdmFyIGMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChiIGluIGEpXG4gICAgICAgICAgICAgICAgYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtcbiAgICAgICAgICAgICAgRGIgPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIERiO1xuICAgICAgICAgIH0sIERiO1xuICAgICAgICAgIGZ1bmN0aW9uIEZiKGEsIGIpIHtcbiAgICAgICAgICAgIGlmIChEKVxuICAgICAgICAgICAgICByZXR1cm4gVygxOSwgMSwgYSwgYik7XG4gICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIGMgPSAwO1xuICAgICAgICAgICAgRWIoKS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGgpIHtcbiAgICAgICAgICAgICAgdmFyIGcgPSBiICsgYztcbiAgICAgICAgICAgICAgaCA9IHIoKVthICsgNCAqIGggPj4gMiA+Pj4gMF0gPSBnO1xuICAgICAgICAgICAgICBmb3IgKGcgPSAwOyBnIDwgZS5sZW5ndGg7ICsrZylcbiAgICAgICAgICAgICAgICBhYSgpW2grKyA+PiAwID4+PiAwXSA9IGUuY2hhckNvZGVBdChnKTtcbiAgICAgICAgICAgICAgYWEoKVtoID4+IDAgPj4+IDBdID0gMDtcbiAgICAgICAgICAgICAgYyArPSBlLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBHYihhLCBiKSB7XG4gICAgICAgICAgICBpZiAoRClcbiAgICAgICAgICAgICAgcmV0dXJuIFcoMjAsIDEsIGEsIGIpO1xuICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgIHZhciBjID0gRWIoKTtcbiAgICAgICAgICAgIHIoKVthID4+IDIgPj4+IDBdID0gYy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZSA9IDA7XG4gICAgICAgICAgICBjLmZvckVhY2goZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICBlICs9IGgubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcigpW2IgPj4gMiA+Pj4gMF0gPSBlO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEhiKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBEID8gVygyMSwgMSwgYSkgOiA1MjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTGIoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgcmV0dXJuIEQgPyBXKDIyLCAxLCBhLCBiLCBjLCBlKSA6IDUyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBNYihhLCBiLCBjLCBlLCBoKSB7XG4gICAgICAgICAgICByZXR1cm4gRCA/IFcoMjMsIDEsIGEsIGIsIGMsIGUsIGgpIDogNzA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBOYiA9IFtudWxsLCBbXSwgW11dO1xuICAgICAgICAgIGZ1bmN0aW9uIE9iKGEsIGIsIGMsIGUpIHtcbiAgICAgICAgICAgIGlmIChEKVxuICAgICAgICAgICAgICByZXR1cm4gVygyNCwgMSwgYSwgYiwgYywgZSk7XG4gICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgZSA+Pj49IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBoID0gMCwgZyA9IDA7IGcgPCBjOyBnKyspIHtcbiAgICAgICAgICAgICAgdmFyIGsgPSByKClbYiA+PiAyID4+PiAwXSwgdCA9IHIoKVtiICsgNCA+PiAyID4+PiAwXTtcbiAgICAgICAgICAgICAgYiArPSA4O1xuICAgICAgICAgICAgICBmb3IgKHZhciBDID0gMDsgQyA8IHQ7IEMrKykge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gbigpW2sgKyBDID4+PiAwXSwgeSA9IE5iW2FdO1xuICAgICAgICAgICAgICAgIDAgPT09IHYgfHwgMTAgPT09IHYgPyAoKDEgPT09IGEgPyBxYSA6IEkpKEphKHksIDApKSwgeS5sZW5ndGggPSAwKSA6IHkucHVzaCh2KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoICs9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByKClbZSA+PiAyID4+PiAwXSA9IGg7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFBiID0gWzMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLCBRYiA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbiAgICAgICAgICBmdW5jdGlvbiBSYihhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IEFycmF5KGFiKGEpICsgMSk7XG4gICAgICAgICAgICBiYihhLCBiLCAwLCBiLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFNiID0gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGFhKCkuc2V0KGEsIGIgPj4+IDApO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gVGIoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gaChmLCBxLCB1KSB7XG4gICAgICAgICAgICAgIGZvciAoZiA9IFwibnVtYmVyXCIgPT0gdHlwZW9mIGYgPyBmLnRvU3RyaW5nKCkgOiBmIHx8IFwiXCI7IGYubGVuZ3RoIDwgcTsgKVxuICAgICAgICAgICAgICAgIGYgPSB1WzBdICsgZjtcbiAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnKGYsIHEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGgoZiwgcSwgXCIwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gayhmLCBxKSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHUoSWIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMCA+IEliID8gLTEgOiAwIDwgSWIgPyAxIDogMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgRztcbiAgICAgICAgICAgICAgMCA9PT0gKEcgPSB1KGYuZ2V0RnVsbFllYXIoKSAtIHEuZ2V0RnVsbFllYXIoKSkpICYmIDAgPT09IChHID0gdShmLmdldE1vbnRoKCkgLSBxLmdldE1vbnRoKCkpKSAmJiAoRyA9IHUoZi5nZXREYXRlKCkgLSBxLmdldERhdGUoKSkpO1xuICAgICAgICAgICAgICByZXR1cm4gRztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHQoZikge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGYuZ2V0RGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDI5KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLCAwLCAzKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIGYuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZi5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gQyhmKSB7XG4gICAgICAgICAgICAgIHZhciBxID0gZi5QYTtcbiAgICAgICAgICAgICAgZm9yIChmID0gbmV3IERhdGUobmV3IERhdGUoZi5RYSArIDE5MDAsIDAsIDEpLmdldFRpbWUoKSk7IDAgPCBxOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgdSA9IGYuZ2V0TW9udGgoKSwgRyA9IChaKGYuZ2V0RnVsbFllYXIoKSkgPyBQYiA6IFFiKVt1XTtcbiAgICAgICAgICAgICAgICBpZiAocSA+IEcgLSBmLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICAgIHEgLT0gRyAtIGYuZ2V0RGF0ZSgpICsgMSwgZi5zZXREYXRlKDEpLCAxMSA+IHUgPyBmLnNldE1vbnRoKHUgKyAxKSA6IChmLnNldE1vbnRoKDApLCBmLnNldEZ1bGxZZWFyKGYuZ2V0RnVsbFllYXIoKSArIDEpKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGYuc2V0RGF0ZShmLmdldERhdGUoKSArIHEpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHUgPSBuZXcgRGF0ZShmLmdldEZ1bGxZZWFyKCkgKyAxLCAwLCA0KTtcbiAgICAgICAgICAgICAgcSA9IHQobmV3IERhdGUoXG4gICAgICAgICAgICAgICAgZi5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgdSA9IHQodSk7XG4gICAgICAgICAgICAgIHJldHVybiAwID49IGsocSwgZikgPyAwID49IGsodSwgZikgPyBmLmdldEZ1bGxZZWFyKCkgKyAxIDogZi5nZXRGdWxsWWVhcigpIDogZi5nZXRGdWxsWWVhcigpIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGUgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIHYgPSBwKClbZSArIDQwID4+IDIgPj4+IDBdO1xuICAgICAgICAgICAgZSA9IHsgcWI6IHAoKVtlID4+IDIgPj4+IDBdLCBwYjogcCgpW2UgKyA0ID4+IDIgPj4+IDBdLCBTYTogcCgpW2UgKyA4ID4+IDIgPj4+IDBdLCBXYTogcCgpW2UgKyAxMiA+PiAyID4+PiAwXSwgVGE6IHAoKVtlICsgMTYgPj4gMiA+Pj4gMF0sIFFhOiBwKClbZSArIDIwID4+IDIgPj4+IDBdLCBNYTogcCgpW2UgKyAyNCA+PiAyID4+PiAwXSwgUGE6IHAoKVtlICsgMjggPj4gMiA+Pj4gMF0sIHliOiBwKClbZSArIDMyID4+IDIgPj4+IDBdLCBvYjogcCgpW2UgKyAzNiA+PiAyID4+PiAwXSwgcmI6IHYgPyBLYSh2KSA6IFwiXCIgfTtcbiAgICAgICAgICAgIGMgPSBLYShjKTtcbiAgICAgICAgICAgIHYgPSB7XG4gICAgICAgICAgICAgIFwiJWNcIjogXCIlYSAlYiAlZCAlSDolTTolUyAlWVwiLFxuICAgICAgICAgICAgICBcIiVEXCI6IFwiJW0vJWQvJXlcIixcbiAgICAgICAgICAgICAgXCIlRlwiOiBcIiVZLSVtLSVkXCIsXG4gICAgICAgICAgICAgIFwiJWhcIjogXCIlYlwiLFxuICAgICAgICAgICAgICBcIiVyXCI6IFwiJUk6JU06JVMgJXBcIixcbiAgICAgICAgICAgICAgXCIlUlwiOiBcIiVIOiVNXCIsXG4gICAgICAgICAgICAgIFwiJVRcIjogXCIlSDolTTolU1wiLFxuICAgICAgICAgICAgICBcIiV4XCI6IFwiJW0vJWQvJXlcIixcbiAgICAgICAgICAgICAgXCIlWFwiOiBcIiVIOiVNOiVTXCIsXG4gICAgICAgICAgICAgIFwiJUVjXCI6IFwiJWNcIixcbiAgICAgICAgICAgICAgXCIlRUNcIjogXCIlQ1wiLFxuICAgICAgICAgICAgICBcIiVFeFwiOiBcIiVtLyVkLyV5XCIsXG4gICAgICAgICAgICAgIFwiJUVYXCI6IFwiJUg6JU06JVNcIixcbiAgICAgICAgICAgICAgXCIlRXlcIjogXCIleVwiLFxuICAgICAgICAgICAgICBcIiVFWVwiOiBcIiVZXCIsXG4gICAgICAgICAgICAgIFwiJU9kXCI6IFwiJWRcIixcbiAgICAgICAgICAgICAgXCIlT2VcIjogXCIlZVwiLFxuICAgICAgICAgICAgICBcIiVPSFwiOiBcIiVIXCIsXG4gICAgICAgICAgICAgIFwiJU9JXCI6IFwiJUlcIixcbiAgICAgICAgICAgICAgXCIlT21cIjogXCIlbVwiLFxuICAgICAgICAgICAgICBcIiVPTVwiOiBcIiVNXCIsXG4gICAgICAgICAgICAgIFwiJU9TXCI6IFwiJVNcIixcbiAgICAgICAgICAgICAgXCIlT3VcIjogXCIldVwiLFxuICAgICAgICAgICAgICBcIiVPVVwiOiBcIiVVXCIsXG4gICAgICAgICAgICAgIFwiJU9WXCI6IFwiJVZcIixcbiAgICAgICAgICAgICAgXCIlT3dcIjogXCIld1wiLFxuICAgICAgICAgICAgICBcIiVPV1wiOiBcIiVXXCIsXG4gICAgICAgICAgICAgIFwiJU95XCI6IFwiJXlcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIHkgaW4gdilcbiAgICAgICAgICAgICAgYyA9IGMucmVwbGFjZShuZXcgUmVnRXhwKHksIFwiZ1wiKSwgdlt5XSk7XG4gICAgICAgICAgICB2YXIgSmIgPSBcIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLCBLYiA9IFwiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlclwiLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIHYgPSB7XG4gICAgICAgICAgICAgIFwiJWFcIjogKGYpID0+IEpiW2YuTWFdLnN1YnN0cmluZygwLCAzKSxcbiAgICAgICAgICAgICAgXCIlQVwiOiAoZikgPT4gSmJbZi5NYV0sXG4gICAgICAgICAgICAgIFwiJWJcIjogKGYpID0+IEtiW2YuVGFdLnN1YnN0cmluZygwLCAzKSxcbiAgICAgICAgICAgICAgXCIlQlwiOiAoZikgPT4gS2JbZi5UYV0sXG4gICAgICAgICAgICAgIFwiJUNcIjogKGYpID0+IGcoKGYuUWEgKyAxOTAwKSAvIDEwMCB8IDAsIDIpLFxuICAgICAgICAgICAgICBcIiVkXCI6IChmKSA9PiBnKGYuV2EsIDIpLFxuICAgICAgICAgICAgICBcIiVlXCI6IChmKSA9PiBoKGYuV2EsIDIsIFwiIFwiKSxcbiAgICAgICAgICAgICAgXCIlZ1wiOiAoZikgPT4gQyhmKS50b1N0cmluZygpLnN1YnN0cmluZygyKSxcbiAgICAgICAgICAgICAgXCIlR1wiOiAoZikgPT4gQyhmKSxcbiAgICAgICAgICAgICAgXCIlSFwiOiAoZikgPT4gZyhmLlNhLCAyKSxcbiAgICAgICAgICAgICAgXCIlSVwiOiAoZikgPT4ge1xuICAgICAgICAgICAgICAgIGYgPSBmLlNhO1xuICAgICAgICAgICAgICAgIDAgPT0gZiA/IGYgPSAxMiA6IDEyIDwgZiAmJiAoZiAtPSAxMik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGcoZiwgMik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiJWpcIjogKGYpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBxID0gMCwgdSA9IDA7IHUgPD0gZi5UYSAtIDE7IHEgKz0gKFooZi5RYSArIDE5MDApID8gUGIgOiBRYilbdSsrXSlcbiAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZyhmLldhICsgcSwgMyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiJW1cIjogKGYpID0+IGcoZi5UYSArIDEsIDIpLFxuICAgICAgICAgICAgICBcIiVNXCI6IChmKSA9PiBnKGYucGIsIDIpLFxuICAgICAgICAgICAgICBcIiVuXCI6ICgpID0+IFwiXFxuXCIsXG4gICAgICAgICAgICAgIFwiJXBcIjogKGYpID0+IDAgPD0gZi5TYSAmJiAxMiA+IGYuU2EgPyBcIkFNXCIgOiBcIlBNXCIsXG4gICAgICAgICAgICAgIFwiJVNcIjogKGYpID0+IGcoZi5xYiwgMiksXG4gICAgICAgICAgICAgIFwiJXRcIjogKCkgPT4gXCJcdFwiLFxuICAgICAgICAgICAgICBcIiV1XCI6IChmKSA9PiBmLk1hIHx8IDcsXG4gICAgICAgICAgICAgIFwiJVVcIjogKGYpID0+IGcoTWF0aC5mbG9vcigoZi5QYSArIDcgLSBmLk1hKSAvIDcpLCAyKSxcbiAgICAgICAgICAgICAgXCIlVlwiOiAoZikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBxID0gTWF0aC5mbG9vcigoZi5QYSArIDcgLSAoZi5NYSArIDYpICUgNykgLyA3KTtcbiAgICAgICAgICAgICAgICAyID49IChmLk1hICsgMzcxIC0gZi5QYSAtIDIpICUgNyAmJiBxKys7XG4gICAgICAgICAgICAgICAgaWYgKHEpXG4gICAgICAgICAgICAgICAgICA1MyA9PSBxICYmICh1ID0gKGYuTWEgKyAzNzEgLSBmLlBhKSAlIDcsIDQgPT0gdSB8fCAzID09IHUgJiYgWihmLlFhKSB8fCAocSA9IDEpKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHEgPSA1MjtcbiAgICAgICAgICAgICAgICAgIHZhciB1ID0gKGYuTWEgKyA3IC0gZi5QYSAtIDEpICUgNztcbiAgICAgICAgICAgICAgICAgICg0ID09IHUgfHwgNSA9PSB1ICYmIFooZi5RYSAlIDQwMCAtIDEpKSAmJiBxKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBnKHEsIDIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIiV3XCI6IChmKSA9PiBmLk1hLFxuICAgICAgICAgICAgICBcIiVXXCI6IChmKSA9PiBnKE1hdGguZmxvb3IoKGYuUGEgKyA3IC0gKGYuTWEgKyA2KSAlIDcpIC8gNyksIDIpLFxuICAgICAgICAgICAgICBcIiV5XCI6IChmKSA9PiAoZi5RYSArIDE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFxuICAgICAgICAgICAgICBcIiVZXCI6IChmKSA9PiBmLlFhICsgMTkwMCxcbiAgICAgICAgICAgICAgXCIlelwiOiAoZikgPT4ge1xuICAgICAgICAgICAgICAgIGYgPSBmLm9iO1xuICAgICAgICAgICAgICAgIHZhciBxID0gMCA8PSBmO1xuICAgICAgICAgICAgICAgIGYgPSBNYXRoLmFicyhmKSAvIDYwO1xuICAgICAgICAgICAgICAgIHJldHVybiAocSA/IFwiK1wiIDogXCItXCIpICsgU3RyaW5nKFwiMDAwMFwiICsgKGYgLyA2MCAqIDEwMCArIGYgJSA2MCkpLnNsaWNlKC00KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIlWlwiOiAoZikgPT4gZi5yYixcbiAgICAgICAgICAgICAgXCIlJVwiOiAoKSA9PiBcIiVcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UoXG4gICAgICAgICAgICAgIC8lJS9nLFxuICAgICAgICAgICAgICBcIlxcMFxcMFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yICh5IGluIHYpXG4gICAgICAgICAgICAgIGMuaW5jbHVkZXMoeSkgJiYgKGMgPSBjLnJlcGxhY2UobmV3IFJlZ0V4cCh5LCBcImdcIiksIHZbeV0oZSkpKTtcbiAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UoL1xcMFxcMC9nLCBcIiVcIik7XG4gICAgICAgICAgICB5ID0gUmIoYyk7XG4gICAgICAgICAgICBpZiAoeS5sZW5ndGggPiBiKVxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIFNiKHksIGEpO1xuICAgICAgICAgICAgcmV0dXJuIHkubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVi5WYSgpO1xuICAgICAgICAgIHZhciBVYiA9IFtudWxsLCBMYSwgTWEsIFhhLCBaYSwgJGEsIGRiLCBlYiwgZmIsIGdiLCBoYiwgaWIsIGpiLCBrYiwgbGIsIG1iLCBuYiwgdGIsIHViLCBGYiwgR2IsIEhiLCBMYiwgTWIsIE9iXSwgWGIgPSB7XG4gICAgICAgICAgICBiOiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICBuZXcgVWEoYSkuVmEoYiA+Pj4gMCwgYyA+Pj4gMCk7XG4gICAgICAgICAgICAgIFZhID0gYTtcbiAgICAgICAgICAgICAgV2ErKztcbiAgICAgICAgICAgICAgdGhyb3cgVmE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTjogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBWYihhID4+PiAwLCAhQSwgMSwgIWthLCAxMzEwNzIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgVi5ZYSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGo6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIEQgPyBwb3N0TWVzc2FnZSh7IGNtZDogXCJjbGVhbnVwVGhyZWFkXCIsIHRocmVhZDogYSB9KSA6IEdhKGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEk6IFlhLFxuICAgICAgICAgICAgaDogWmEsXG4gICAgICAgICAgICBUOiAkYSxcbiAgICAgICAgICAgIEQ6IGRiLFxuICAgICAgICAgICAgRjogZWIsXG4gICAgICAgICAgICBVOiBmYixcbiAgICAgICAgICAgIFI6IGdiLFxuICAgICAgICAgICAgSjogaGIsXG4gICAgICAgICAgICBROiBpYixcbiAgICAgICAgICAgIG46IGpiLFxuICAgICAgICAgICAgRToga2IsXG4gICAgICAgICAgICBCOiBsYixcbiAgICAgICAgICAgIFM6IG1iLFxuICAgICAgICAgICAgQzogbmIsXG4gICAgICAgICAgICBxOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgejogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYSA9PSBiID4+PiAwID8gc2V0VGltZW91dCgoKSA9PiBZKCkpIDogRCA/IHBvc3RNZXNzYWdlKHsgdGFyZ2V0VGhyZWFkOiBhLCBjbWQ6IFwiY2hlY2tNYWlsYm94XCIgfSkgOiAoYSA9IFYuTGFbYV0pICYmIGEucG9zdE1lc3NhZ2UoeyBjbWQ6IFwiY2hlY2tNYWlsYm94XCIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBNOiBwYixcbiAgICAgICAgICAgIHA6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgQiAmJiBWLkxhW2EgPj4+IDBdLnJlZigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHQ6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYSA9IGIgKyAyMDk3MTUyID4+PiAwIDwgNDE5NDMwNSAtICEhYSA/IChhID4+PiAwKSArIDQyOTQ5NjcyOTYgKiBiIDogTmFOO1xuICAgICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgICAgYSA9IG5ldyBEYXRlKDFlMyAqIGEpO1xuICAgICAgICAgICAgICBwKClbYyA+PiAyID4+PiAwXSA9IGEuZ2V0VVRDU2Vjb25kcygpO1xuICAgICAgICAgICAgICBwKClbYyArIDQgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ01pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgcCgpW2MgKyA4ID4+IDIgPj4+IDBdID0gYS5nZXRVVENIb3VycygpO1xuICAgICAgICAgICAgICBwKClbYyArIDEyID4+IDIgPj4+IDBdID0gYS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgIHAoKVtjICsgMTYgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICAgIHAoKVtjICsgMjAgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwO1xuICAgICAgICAgICAgICBwKClbYyArIDI0ID4+IDIgPj4+IDBdID0gYS5nZXRVVENEYXkoKTtcbiAgICAgICAgICAgICAgYSA9IChhLmdldFRpbWUoKSAtIERhdGUuVVRDKGEuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMCkpIC8gODY0ZTUgfCAwO1xuICAgICAgICAgICAgICBwKClbYyArIDI4ID4+IDIgPj4+IDBdID0gYTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1OiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGEgPSBiICsgMjA5NzE1MiA+Pj4gMCA8IDQxOTQzMDUgLSAhIWEgPyAoYSA+Pj4gMCkgKyA0Mjk0OTY3Mjk2ICogYiA6IE5hTjtcbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBuZXcgRGF0ZSgxZTMgKiBhKTtcbiAgICAgICAgICAgICAgcCgpW2MgPj4gMiA+Pj4gMF0gPSBhLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgICAgcCgpW2MgKyA0ID4+IDIgPj4+IDBdID0gYS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIHAoKVtjICsgOCA+PiAyID4+PiAwXSA9IGEuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgcCgpW2MgKyAxMiA+PiAyID4+PiAwXSA9IGEuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICBwKClbYyArIDE2ID4+IDIgPj4+IDBdID0gYS5nZXRNb250aCgpO1xuICAgICAgICAgICAgICBwKClbYyArIDIwID4+IDIgPj4+IDBdID0gYS5nZXRGdWxsWWVhcigpIC0gMTkwMDtcbiAgICAgICAgICAgICAgcCgpW2MgKyAyNCA+PiAyID4+PiAwXSA9IGEuZ2V0RGF5KCk7XG4gICAgICAgICAgICAgIGIgPSAoWihhLmdldEZ1bGxZZWFyKCkpID8gcmIgOiBzYilbYS5nZXRNb250aCgpXSArIGEuZ2V0RGF0ZSgpIC0gMSB8IDA7XG4gICAgICAgICAgICAgIHAoKVtjICsgMjggPj4gMiA+Pj4gMF0gPSBiO1xuICAgICAgICAgICAgICBwKClbYyArIDM2ID4+IDIgPj4+IDBdID0gLSg2MCAqIGEuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgICAgICAgICAgIGIgPSBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksIDYsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgICAgICAgIHZhciBlID0gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICAgICAgICBhID0gKGIgIT0gZSAmJiBhLmdldFRpbWV6b25lT2Zmc2V0KCkgPT0gTWF0aC5taW4oZSwgYikpIHwgMDtcbiAgICAgICAgICAgICAgcCgpW2MgKyAzMiA+PiAyID4+PiAwXSA9IGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdjogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgdmFyIGIgPSBuZXcgRGF0ZShwKClbYSArIDIwID4+IDIgPj4+IDBdICsgMTkwMCwgcCgpW2EgKyAxNiA+PiAyID4+PiAwXSwgcCgpW2EgKyAxMiA+PiAyID4+PiAwXSwgcCgpW2EgKyA4ID4+IDIgPj4+IDBdLCBwKClbYSArIDQgPj4gMiA+Pj4gMF0sIHAoKVthID4+IDIgPj4+IDBdLCAwKSwgYyA9IHAoKVthICsgMzIgPj4gMiA+Pj4gMF0sIGUgPSBiLmdldFRpbWV6b25lT2Zmc2V0KCksIGggPSBuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksIDYsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCksIGcgPSBuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksIDAsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCksIGsgPSBNYXRoLm1pbihnLCBoKTtcbiAgICAgICAgICAgICAgMCA+IGMgPyBwKClbYSArIDMyID4+IDIgPj4+IDBdID0gTnVtYmVyKGggIT0gZyAmJiBrID09IGUpIDogMCA8IGMgIT0gKGsgPT0gZSkgJiYgKGggPSBNYXRoLm1heChnLCBoKSwgYi5zZXRUaW1lKGIuZ2V0VGltZSgpICsgNmU0ICogKCgwIDwgYyA/IGsgOiBoKSAtIGUpKSk7XG4gICAgICAgICAgICAgIHAoKVthICsgMjQgPj4gMiA+Pj4gMF0gPSBiLmdldERheSgpO1xuICAgICAgICAgICAgICBjID0gKFooYi5nZXRGdWxsWWVhcigpKSA/IHJiIDogc2IpW2IuZ2V0TW9udGgoKV0gKyBiLmdldERhdGUoKSAtIDEgfCAwO1xuICAgICAgICAgICAgICBwKClbYSArIDI4ID4+IDIgPj4+IDBdID0gYztcbiAgICAgICAgICAgICAgcCgpW2EgPj4gMiA+Pj4gMF0gPSBiLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgICAgcCgpW2EgKyA0ID4+IDIgPj4+IDBdID0gYi5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIHAoKVthICsgOCA+PiAyID4+PiAwXSA9IGIuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgcCgpW2EgKyAxMiA+PiAyID4+PiAwXSA9IGIuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICBwKClbYSArIDE2ID4+IDIgPj4+IDBdID0gYi5nZXRNb250aCgpO1xuICAgICAgICAgICAgICBwKClbYSArIDIwID4+IDIgPj4+IDBdID0gYi5nZXRZZWFyKCk7XG4gICAgICAgICAgICAgIGEgPSBiLmdldFRpbWUoKSAvIDFlMztcbiAgICAgICAgICAgICAgcmV0dXJuIFdiKChUID0gYSwgMSA8PSArTWF0aC5hYnMoVCkgPyAwIDwgVCA/ICtNYXRoLmZsb29yKFQgLyA0Mjk0OTY3Mjk2KSA+Pj4gMCA6IH5+K01hdGguY2VpbCgoVCAtICsofn5UID4+PiAwKSkgLyA0Mjk0OTY3Mjk2KSA+Pj4gMCA6IDApKSwgYSA+Pj4gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByOiB0YixcbiAgICAgICAgICAgIHM6IHViLFxuICAgICAgICAgICAgeTogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBlKHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHYgPSB2LnRvVGltZVN0cmluZygpLm1hdGNoKC9cXCgoW0EtWmEteiBdKylcXCkkLykpID8gdlsxXSA6IFwiR01UXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgICAgdmFyIGggPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldEZ1bGxZZWFyKCksIGcgPSBuZXcgRGF0ZShoLCAwLCAxKSwgayA9IG5ldyBEYXRlKGgsIDYsIDEpO1xuICAgICAgICAgICAgICBoID0gZy5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICAgICAgICB2YXIgdCA9IGsuZ2V0VGltZXpvbmVPZmZzZXQoKSwgQyA9IE1hdGgubWF4KGgsIHQpO1xuICAgICAgICAgICAgICByKClbYSA+PiAyID4+PiAwXSA9IDYwICogQztcbiAgICAgICAgICAgICAgcCgpW2IgPj4gMiA+Pj4gMF0gPSBOdW1iZXIoaCAhPSB0KTtcbiAgICAgICAgICAgICAgYSA9IGUoZyk7XG4gICAgICAgICAgICAgIGIgPSBlKGspO1xuICAgICAgICAgICAgICBhID0gd2IoYSk7XG4gICAgICAgICAgICAgIGIgPSB3YihiKTtcbiAgICAgICAgICAgICAgdCA8IGggPyAocigpW2MgPj4gMiA+Pj4gMF0gPSBhLCByKClbYyArIDQgPj4gMiA+Pj4gMF0gPSBiKSA6IChyKClbYyA+PiAyID4+PiAwXSA9IGIsIHIoKVtjICsgNCA+PiAyID4+PiAwXSA9IGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGM6ICgpID0+IHtcbiAgICAgICAgICAgICAgSyhcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbzogKCkgPT4ge1xuICAgICAgICAgICAgICB3YSArPSAxO1xuICAgICAgICAgICAgICB0aHJvdyBcInVud2luZFwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gNDI5NDkwMTc2MDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlOiAoKSA9PiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICAgICAgICBmOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEIgPyAoaW5pdF9vcygpLCBfX3RvQ29tbW9uSlMob3NfZXhwb3J0cykpLmNwdXMoKS5sZW5ndGggOiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBLOiBmdW5jdGlvbihhLCBiLCBjLCBlKSB7XG4gICAgICAgICAgICAgIFYudmIgPSBiID4+PiAwO1xuICAgICAgICAgICAgICBCYi5sZW5ndGggPSBjO1xuICAgICAgICAgICAgICBiID0gZSA+Pj4gMCA+PiAzO1xuICAgICAgICAgICAgICBmb3IgKGUgPSAwOyBlIDwgYzsgZSsrKVxuICAgICAgICAgICAgICAgIEJiW2VdID0gZWEoKVtiICsgZSA+Pj4gMF07XG4gICAgICAgICAgICAgIHJldHVybiBVYlthXS5hcHBseShudWxsLCBCYik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgdmFyIGIgPSBuKCkubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAoYSA8PSBiIHx8IDQyOTQ5MDE3NjAgPCBhKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDE7IDQgPj0gYzsgYyAqPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGUgPSBiICogKDEgKyAwLjIgLyBjKTtcbiAgICAgICAgICAgICAgICBlID0gTWF0aC5taW4oZSwgYSArIDEwMDY2MzI5Nik7XG4gICAgICAgICAgICAgICAgdmFyIGggPSBNYXRoO1xuICAgICAgICAgICAgICAgIGUgPSBNYXRoLm1heChhLCBlKTtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICBoID0gaC5taW4uY2FsbChoLCA0Mjk0OTAxNzYwLCBlICsgKDY1NTM2IC0gZSAlIDY1NTM2KSAlIDY1NTM2KSAtIGQuYnVmZmVyLmJ5dGVMZW5ndGggKyA2NTUzNSA+Pj4gMTY7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkLmdyb3coaCk7XG4gICAgICAgICAgICAgICAgICAgIG0oKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSAxO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGcpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTzogRmIsXG4gICAgICAgICAgICBQOiBHYixcbiAgICAgICAgICAgIEg6IE5hLFxuICAgICAgICAgICAgZzogSGIsXG4gICAgICAgICAgICBtOiBMYixcbiAgICAgICAgICAgIHc6IE1iLFxuICAgICAgICAgICAgbDogT2IsXG4gICAgICAgICAgICBhOiBkIHx8IHcud2FzbU1lbW9yeSxcbiAgICAgICAgICAgIEc6IFRiLFxuICAgICAgICAgICAgZDogZnVuY3Rpb24oYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgICByZXR1cm4gVGIoYSA+Pj4gMCwgYiA+Pj4gMCwgYyA+Pj4gMCwgZSA+Pj4gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBhKGMsIGUpIHtcbiAgICAgICAgICAgICAgYyA9IGMuZXhwb3J0cztcbiAgICAgICAgICAgICAgTCA9IGMgPSBZYihjKTtcbiAgICAgICAgICAgICAgVi5aYS5wdXNoKEwueWEpO1xuICAgICAgICAgICAgICBzYSA9IEwuemE7XG4gICAgICAgICAgICAgIHVhLnVuc2hpZnQoTC5WKTtcbiAgICAgICAgICAgICAgcmEgPSBlO1xuICAgICAgICAgICAgICB6YSgpO1xuICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBiID0geyBhOiBYYiB9O1xuICAgICAgICAgICAgeWEoKTtcbiAgICAgICAgICAgIGlmICh3Lmluc3RhbnRpYXRlV2FzbSlcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdy5pbnN0YW50aWF0ZVdhc20oYiwgYSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBJKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIgKyBjKSwgeChjKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWEoYiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICBhKGMuaW5zdGFuY2UsIGMubW9kdWxlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKHgpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgdy5fT3J0SW5pdCA9IChhLCBiKSA9PiAody5fT3J0SW5pdCA9IEwuVykoYSwgYik7XG4gICAgICAgICAgdy5fT3J0R2V0TGFzdEVycm9yID0gKGEsIGIpID0+ICh3Ll9PcnRHZXRMYXN0RXJyb3IgPSBMLlgpKGEsIGIpO1xuICAgICAgICAgIHcuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zID0gKGEsIGIsIGMsIGUsIGgsIGcsIGssIHQsIEMsIHYpID0+ICh3Ll9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucyA9IEwuWSkoYSwgYiwgYywgZSwgaCwgZywgaywgdCwgQywgdik7XG4gICAgICAgICAgdy5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXIgPSAoYSwgYikgPT4gKHcuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyID0gTC5aKShhLCBiKTtcbiAgICAgICAgICB3Ll9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGUgPSAoYSwgYiwgYykgPT4gKHcuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZSA9IEwuXykoYSwgYiwgYyk7XG4gICAgICAgICAgdy5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5ID0gKGEsIGIsIGMpID0+ICh3Ll9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkgPSBMLiQpKGEsIGIsIGMpO1xuICAgICAgICAgIHcuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucyA9IChhKSA9PiAody5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zID0gTC5hYSkoYSk7XG4gICAgICAgICAgdy5fT3J0Q3JlYXRlU2Vzc2lvbiA9IChhLCBiLCBjKSA9PiAody5fT3J0Q3JlYXRlU2Vzc2lvbiA9IEwuYmEpKGEsIGIsIGMpO1xuICAgICAgICAgIHcuX09ydFJlbGVhc2VTZXNzaW9uID0gKGEpID0+ICh3Ll9PcnRSZWxlYXNlU2Vzc2lvbiA9IEwuY2EpKGEpO1xuICAgICAgICAgIHcuX09ydEdldElucHV0T3V0cHV0Q291bnQgPSAoYSwgYiwgYykgPT4gKHcuX09ydEdldElucHV0T3V0cHV0Q291bnQgPSBMLmRhKShhLCBiLCBjKTtcbiAgICAgICAgICB3Ll9PcnRHZXRJbnB1dE5hbWUgPSAoYSwgYikgPT4gKHcuX09ydEdldElucHV0TmFtZSA9IEwuZWEpKGEsIGIpO1xuICAgICAgICAgIHcuX09ydEdldE91dHB1dE5hbWUgPSAoYSwgYikgPT4gKHcuX09ydEdldE91dHB1dE5hbWUgPSBMLmZhKShhLCBiKTtcbiAgICAgICAgICB3Ll9PcnRGcmVlID0gKGEpID0+ICh3Ll9PcnRGcmVlID0gTC5nYSkoYSk7XG4gICAgICAgICAgdy5fT3J0Q3JlYXRlVGVuc29yID0gKGEsIGIsIGMsIGUsIGgsIGcpID0+ICh3Ll9PcnRDcmVhdGVUZW5zb3IgPSBMLmhhKShhLCBiLCBjLCBlLCBoLCBnKTtcbiAgICAgICAgICB3Ll9PcnRHZXRUZW5zb3JEYXRhID0gKGEsIGIsIGMsIGUsIGgpID0+ICh3Ll9PcnRHZXRUZW5zb3JEYXRhID0gTC5pYSkoYSwgYiwgYywgZSwgaCk7XG4gICAgICAgICAgdy5fT3J0UmVsZWFzZVRlbnNvciA9IChhKSA9PiAody5fT3J0UmVsZWFzZVRlbnNvciA9IEwuamEpKGEpO1xuICAgICAgICAgIHcuX09ydENyZWF0ZVJ1bk9wdGlvbnMgPSAoYSwgYiwgYywgZSkgPT4gKHcuX09ydENyZWF0ZVJ1bk9wdGlvbnMgPSBMLmthKShhLCBiLCBjLCBlKTtcbiAgICAgICAgICB3Ll9PcnRBZGRSdW5Db25maWdFbnRyeSA9IChhLCBiLCBjKSA9PiAody5fT3J0QWRkUnVuQ29uZmlnRW50cnkgPSBMLmxhKShhLCBiLCBjKTtcbiAgICAgICAgICB3Ll9PcnRSZWxlYXNlUnVuT3B0aW9ucyA9IChhKSA9PiAody5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMgPSBMLm1hKShhKTtcbiAgICAgICAgICB3Ll9PcnRDcmVhdGVCaW5kaW5nID0gKGEpID0+ICh3Ll9PcnRDcmVhdGVCaW5kaW5nID0gTC5uYSkoYSk7XG4gICAgICAgICAgdy5fT3J0QmluZElucHV0ID0gKGEsIGIsIGMpID0+ICh3Ll9PcnRCaW5kSW5wdXQgPSBMLm9hKShhLCBiLCBjKTtcbiAgICAgICAgICB3Ll9PcnRCaW5kT3V0cHV0ID0gKGEsIGIsIGMsIGUpID0+ICh3Ll9PcnRCaW5kT3V0cHV0ID0gTC5wYSkoYSwgYiwgYywgZSk7XG4gICAgICAgICAgdy5fT3J0Q2xlYXJCb3VuZE91dHB1dHMgPSAoYSkgPT4gKHcuX09ydENsZWFyQm91bmRPdXRwdXRzID0gTC5xYSkoYSk7XG4gICAgICAgICAgdy5fT3J0UmVsZWFzZUJpbmRpbmcgPSAoYSkgPT4gKHcuX09ydFJlbGVhc2VCaW5kaW5nID0gTC5yYSkoYSk7XG4gICAgICAgICAgdy5fT3J0UnVuV2l0aEJpbmRpbmcgPSAoYSwgYiwgYywgZSwgaCkgPT4gKHcuX09ydFJ1bldpdGhCaW5kaW5nID0gTC5zYSkoYSwgYiwgYywgZSwgaCk7XG4gICAgICAgICAgdy5fT3J0UnVuID0gKGEsIGIsIGMsIGUsIGgsIGcsIGssIHQpID0+ICh3Ll9PcnRSdW4gPSBMLnRhKShhLCBiLCBjLCBlLCBoLCBnLCBrLCB0KTtcbiAgICAgICAgICB3Ll9PcnRFbmRQcm9maWxpbmcgPSAoYSkgPT4gKHcuX09ydEVuZFByb2ZpbGluZyA9IEwudWEpKGEpO1xuICAgICAgICAgIHZhciBYID0gdy5fcHRocmVhZF9zZWxmID0gKCkgPT4gKFggPSB3Ll9wdGhyZWFkX3NlbGYgPSBMLnZhKSgpLCB2YiA9IHcuX21hbGxvYyA9IChhKSA9PiAodmIgPSB3Ll9tYWxsb2MgPSBMLndhKShhKTtcbiAgICAgICAgICB3Ll9mcmVlID0gKGEpID0+ICh3Ll9mcmVlID0gTC54YSkoYSk7XG4gICAgICAgICAgdy5fX2Vtc2NyaXB0ZW5fdGxzX2luaXQgPSAoKSA9PiAody5fX2Vtc2NyaXB0ZW5fdGxzX2luaXQgPSBMLnlhKSgpO1xuICAgICAgICAgIHZhciBWYiA9IHcuX19lbXNjcmlwdGVuX3RocmVhZF9pbml0ID0gKGEsIGIsIGMsIGUsIGgsIGcpID0+IChWYiA9IHcuX19lbXNjcmlwdGVuX3RocmVhZF9pbml0ID0gTC5BYSkoYSwgYiwgYywgZSwgaCwgZyk7XG4gICAgICAgICAgdy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWQgPSAoKSA9PiAody5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWQgPSBMLkJhKSgpO1xuICAgICAgICAgIHZhciBBYiA9IChhLCBiLCBjLCBlKSA9PiAoQWIgPSBMLkNhKShhLCBiLCBjLCBlKSwgT2EgPSAoYSkgPT4gKE9hID0gTC5EYSkoYSksIFRhID0gdy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQgPSAoYSkgPT4gKFRhID0gdy5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQgPSBMLkVhKShhKSwgcWIgPSB3Ll9fZW1zY3JpcHRlbl9jaGVja19tYWlsYm94ID0gKCkgPT4gKHFiID0gdy5fX2Vtc2NyaXB0ZW5fY2hlY2tfbWFpbGJveCA9IEwuRmEpKCksIFdiID0gKGEpID0+IChXYiA9IEwuR2EpKGEpLCBRYSA9IChhLCBiKSA9PiAoUWEgPSBMLkhhKShhLCBiKSwgeGIgPSAoKSA9PiAoeGIgPSBMLklhKSgpLCBSYSA9IChhKSA9PiAoUmEgPSBMLkphKShhKSwgemIgPSAoYSkgPT4gKHpiID0gTC5LYSkoYSk7XG4gICAgICAgICAgZnVuY3Rpb24gWWIoYSkge1xuICAgICAgICAgICAgYSA9IE9iamVjdC5hc3NpZ24oe30sIGEpO1xuICAgICAgICAgICAgdmFyIGIgPSAoZSkgPT4gKCkgPT4gZSgpID4+PiAwLCBjID0gKGUpID0+IChoKSA9PiBlKGgpID4+PiAwO1xuICAgICAgICAgICAgYS5fX2Vycm5vX2xvY2F0aW9uID0gYihhLl9fZXJybm9fbG9jYXRpb24pO1xuICAgICAgICAgICAgYS5wdGhyZWFkX3NlbGYgPSBiKGEucHRocmVhZF9zZWxmKTtcbiAgICAgICAgICAgIGEubWFsbG9jID0gYyhhLm1hbGxvYyk7XG4gICAgICAgICAgICBhLnN0YWNrU2F2ZSA9IGIoYS5zdGFja1NhdmUpO1xuICAgICAgICAgICAgYS5zdGFja0FsbG9jID0gYyhhLnN0YWNrQWxsb2MpO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHcua2VlcFJ1bnRpbWVBbGl2ZSA9IFA7XG4gICAgICAgICAgdy53YXNtTWVtb3J5ID0gZDtcbiAgICAgICAgICB3LnN0YWNrQWxsb2MgPSB6YjtcbiAgICAgICAgICB3LnN0YWNrU2F2ZSA9IHhiO1xuICAgICAgICAgIHcuc3RhY2tSZXN0b3JlID0gUmE7XG4gICAgICAgICAgdy5VVEY4VG9TdHJpbmcgPSBLYTtcbiAgICAgICAgICB3LnN0cmluZ1RvVVRGOCA9IGNiO1xuICAgICAgICAgIHcubGVuZ3RoQnl0ZXNVVEY4ID0gYWI7XG4gICAgICAgICAgdy5FeGl0U3RhdHVzID0gVTtcbiAgICAgICAgICB3LlBUaHJlYWQgPSBWO1xuICAgICAgICAgIHZhciBaYjtcbiAgICAgICAgICBSID0gZnVuY3Rpb24gJGIoKSB7XG4gICAgICAgICAgICBaYiB8fCBhYygpO1xuICAgICAgICAgICAgWmIgfHwgKFIgPSAkYik7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmdW5jdGlvbiBhYygpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGEoKSB7XG4gICAgICAgICAgICAgIGlmICghWmIgJiYgKFpiID0gdHJ1ZSwgdy5jYWxsZWRSdW4gPSB0cnVlLCAhTSkpIHtcbiAgICAgICAgICAgICAgICBEIHx8IFBhKHVhKTtcbiAgICAgICAgICAgICAgICBoYSh3KTtcbiAgICAgICAgICAgICAgICBpZiAody5vblJ1bnRpbWVJbml0aWFsaXplZClcbiAgICAgICAgICAgICAgICAgIHcub25SdW50aW1lSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIUQpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh3LnBvc3RSdW4pXG4gICAgICAgICAgICAgICAgICAgIGZvciAoXCJmdW5jdGlvblwiID09IHR5cGVvZiB3LnBvc3RSdW4gJiYgKHcucG9zdFJ1biA9IFt3LnBvc3RSdW5dKTsgdy5wb3N0UnVuLmxlbmd0aDsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB3LnBvc3RSdW4uc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YS51bnNoaWZ0KGIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBQYSh2YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISgwIDwgUSkpXG4gICAgICAgICAgICAgIGlmIChEKVxuICAgICAgICAgICAgICAgIGhhKHcpLCBEIHx8IFBhKHVhKSwgc3RhcnRXb3JrZXIodyk7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh3LnByZVJ1bilcbiAgICAgICAgICAgICAgICAgIGZvciAoXCJmdW5jdGlvblwiID09IHR5cGVvZiB3LnByZVJ1biAmJiAody5wcmVSdW4gPSBbdy5wcmVSdW5dKTsgdy5wcmVSdW4ubGVuZ3RoOyApXG4gICAgICAgICAgICAgICAgICAgIHRhLnVuc2hpZnQody5wcmVSdW4uc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgUGEodGEpO1xuICAgICAgICAgICAgICAgIDAgPCBRIHx8ICh3LnNldFN0YXR1cyA/ICh3LnNldFN0YXR1cyhcIlJ1bm5pbmcuLi5cIiksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3LnNldFN0YXR1cyhcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgICAgICB9LCAxKSkgOiBhKCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh3LnByZUluaXQpXG4gICAgICAgICAgICBmb3IgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2Ygdy5wcmVJbml0ICYmICh3LnByZUluaXQgPSBbdy5wcmVJbml0XSk7IDAgPCB3LnByZUluaXQubGVuZ3RoOyApXG4gICAgICAgICAgICAgIHcucHJlSW5pdC5wb3AoKSgpO1xuICAgICAgICAgIGFjKCk7XG4gICAgICAgICAgcmV0dXJuIG1vZHVsZUFyZy5yZWFkeTtcbiAgICAgICAgfTtcbiAgICAgIH0pKCk7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtVGhyZWFkZWQ7XG4gICAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lW1wiYW1kXCJdKVxuICAgICAgICBkZWZpbmUoW10sICgpID0+IG9ydFdhc21UaHJlYWRlZCk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanNcbiAgdmFyIHJlcXVpcmVfb3J0X3dhc21fdGhyZWFkZWRfd29ya2VyID0gX19jb21tb25KUyh7XG4gICAgXCJ3ZWIvbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanNcIihleHBvcnRzLCBtb2R1bGUpIHtcbiAgICAgIG1vZHVsZS5leHBvcnRzID0gJ1widXNlIHN0cmljdFwiO3ZhciBNb2R1bGU9e307dmFyIEVOVklST05NRU5UX0lTX05PREU9dHlwZW9mIHByb2Nlc3M9PVwib2JqZWN0XCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT1cIm9iamVjdFwiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT1cInN0cmluZ1wiO2lmKEVOVklST05NRU5UX0lTX05PREUpe3ZhciBub2RlV29ya2VyVGhyZWFkcz1yZXF1aXJlKFwid29ya2VyX3RocmVhZHNcIik7dmFyIHBhcmVudFBvcnQ9bm9kZVdvcmtlclRocmVhZHMucGFyZW50UG9ydDtwYXJlbnRQb3J0Lm9uKFwibWVzc2FnZVwiLGRhdGE9Pm9ubWVzc2FnZSh7ZGF0YTpkYXRhfSkpO3ZhciBmcz1yZXF1aXJlKFwiZnNcIik7T2JqZWN0LmFzc2lnbihnbG9iYWwse3NlbGY6Z2xvYmFsLHJlcXVpcmU6cmVxdWlyZSxNb2R1bGU6TW9kdWxlLGxvY2F0aW9uOntocmVmOl9fZmlsZW5hbWV9LFdvcmtlcjpub2RlV29ya2VyVGhyZWFkcy5Xb3JrZXIsaW1wb3J0U2NyaXB0czpmPT4oMCxldmFsKShmcy5yZWFkRmlsZVN5bmMoZixcInV0ZjhcIikrXCIvLyMgc291cmNlVVJMPVwiK2YpLHBvc3RNZXNzYWdlOm1zZz0+cGFyZW50UG9ydC5wb3N0TWVzc2FnZShtc2cpLHBlcmZvcm1hbmNlOmdsb2JhbC5wZXJmb3JtYW5jZXx8e25vdzpEYXRlLm5vd319KX12YXIgaW5pdGlhbGl6ZWRKUz1mYWxzZTtmdW5jdGlvbiB0aHJlYWRQcmludEVycigpe3ZhciB0ZXh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7ZnMud3JpdGVTeW5jKDIsdGV4dCtcIlxcXFxuXCIpO3JldHVybn1jb25zb2xlLmVycm9yKHRleHQpfWZ1bmN0aW9uIHRocmVhZEFsZXJ0KCl7dmFyIHRleHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtwb3N0TWVzc2FnZSh7Y21kOlwiYWxlcnRcIix0ZXh0OnRleHQsdGhyZWFkSWQ6TW9kdWxlW1wiX3B0aHJlYWRfc2VsZlwiXSgpfSl9dmFyIGVycj10aHJlYWRQcmludEVycjtzZWxmLmFsZXJ0PXRocmVhZEFsZXJ0O01vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXT0oaW5mbyxyZWNlaXZlSW5zdGFuY2UpPT57dmFyIG1vZHVsZT1Nb2R1bGVbXCJ3YXNtTW9kdWxlXCJdO01vZHVsZVtcIndhc21Nb2R1bGVcIl09bnVsbDt2YXIgaW5zdGFuY2U9bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSxpbmZvKTtyZXR1cm4gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlKX07c2VsZi5vbnVuaGFuZGxlZHJlamVjdGlvbj1lPT57dGhyb3cgZS5yZWFzb24/P2V9O2Z1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZSl7dHJ5e2lmKGUuZGF0YS5jbWQ9PT1cImxvYWRcIil7bGV0IG1lc3NhZ2VRdWV1ZT1bXTtzZWxmLm9ubWVzc2FnZT1lPT5tZXNzYWdlUXVldWUucHVzaChlKTtzZWxmLnN0YXJ0V29ya2VyPWluc3RhbmNlPT57TW9kdWxlPWluc3RhbmNlO3Bvc3RNZXNzYWdlKHtcImNtZFwiOlwibG9hZGVkXCJ9KTtmb3IobGV0IG1zZyBvZiBtZXNzYWdlUXVldWUpe2hhbmRsZU1lc3NhZ2UobXNnKX1zZWxmLm9ubWVzc2FnZT1oYW5kbGVNZXNzYWdlfTtNb2R1bGVbXCJ3YXNtTW9kdWxlXCJdPWUuZGF0YS53YXNtTW9kdWxlO2Zvcihjb25zdCBoYW5kbGVyIG9mIGUuZGF0YS5oYW5kbGVycyl7TW9kdWxlW2hhbmRsZXJdPSguLi5hcmdzKT0+e3Bvc3RNZXNzYWdlKHtjbWQ6XCJjYWxsSGFuZGxlclwiLGhhbmRsZXI6aGFuZGxlcixhcmdzOmFyZ3N9KX19TW9kdWxlW1wid2FzbU1lbW9yeVwiXT1lLmRhdGEud2FzbU1lbW9yeTtNb2R1bGVbXCJidWZmZXJcIl09TW9kdWxlW1wid2FzbU1lbW9yeVwiXS5idWZmZXI7TW9kdWxlW1wiRU5WSVJPTk1FTlRfSVNfUFRIUkVBRFwiXT10cnVlO2lmKHR5cGVvZiBlLmRhdGEudXJsT3JCbG9iPT1cInN0cmluZ1wiKXtpbXBvcnRTY3JpcHRzKGUuZGF0YS51cmxPckJsb2IpfWVsc2V7dmFyIG9iamVjdFVybD1VUkwuY3JlYXRlT2JqZWN0VVJMKGUuZGF0YS51cmxPckJsb2IpO2ltcG9ydFNjcmlwdHMob2JqZWN0VXJsKTtVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCl9b3J0V2FzbVRocmVhZGVkKE1vZHVsZSl9ZWxzZSBpZihlLmRhdGEuY21kPT09XCJydW5cIil7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9pbml0XCJdKGUuZGF0YS5wdGhyZWFkX3B0ciwvKmlzTWFpbkJyb3dzZXJUaHJlYWQ9Ki8wLC8qaXNNYWluUnVudGltZVRocmVhZD0qLzAsLypjYW5CbG9jaz0qLzEpO01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfbWFpbGJveF9hd2FpdFwiXShlLmRhdGEucHRocmVhZF9wdHIpO01vZHVsZVtcImVzdGFibGlzaFN0YWNrU3BhY2VcIl0oKTtNb2R1bGVbXCJQVGhyZWFkXCJdLnJlY2VpdmVPYmplY3RUcmFuc2ZlcihlLmRhdGEpO01vZHVsZVtcIlBUaHJlYWRcIl0udGhyZWFkSW5pdFRMUygpO2lmKCFpbml0aWFsaXplZEpTKXtpbml0aWFsaXplZEpTPXRydWV9dHJ5e01vZHVsZVtcImludm9rZUVudHJ5UG9pbnRcIl0oZS5kYXRhLnN0YXJ0X3JvdXRpbmUsZS5kYXRhLmFyZyl9Y2F0Y2goZXgpe2lmKGV4IT1cInVud2luZFwiKXt0aHJvdyBleH19fWVsc2UgaWYoZS5kYXRhLmNtZD09PVwiY2FuY2VsXCIpe2lmKE1vZHVsZVtcIl9wdGhyZWFkX3NlbGZcIl0oKSl7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9leGl0XCJdKC0xKX19ZWxzZSBpZihlLmRhdGEudGFyZ2V0PT09XCJzZXRpbW1lZGlhdGVcIil7fWVsc2UgaWYoZS5kYXRhLmNtZD09PVwiY2hlY2tNYWlsYm94XCIpe2lmKGluaXRpYWxpemVkSlMpe01vZHVsZVtcImNoZWNrTWFpbGJveFwiXSgpfX1lbHNlIGlmKGUuZGF0YS5jbWQpe2VycihcIndvcmtlci5qcyByZWNlaXZlZCB1bmtub3duIGNvbW1hbmQgXCIrZS5kYXRhLmNtZCk7ZXJyKGUuZGF0YSl9fWNhdGNoKGV4KXtpZihNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWRcIl0pe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZFwiXSgpfXRocm93IGV4fX1zZWxmLm9ubWVzc2FnZT1oYW5kbGVNZXNzYWdlO1xcbic7XG4gICAgfVxuICB9KTtcblxuICAvLyBub2RlanMtaWdub3JlOm5vZGU6cGF0aFxuICB2YXIgam9pbiA9IHZvaWQgMDtcblxuICAvLyB3ZWIvbGliL3dhc20vd2FzbS1mYWN0b3J5LnRzXG4gIHZhciBvcnRXYXNtRmFjdG9yeTtcbiAgaWYgKHRydWUpIHtcbiAgICBvcnRXYXNtRmFjdG9yeSA9IHJlcXVpcmVfb3J0X3RyYWluaW5nX3dhc21fc2ltZCgpO1xuICB9IGVsc2Uge1xuICAgIG9ydFdhc21GYWN0b3J5ID0gdHJ1ZSA/IG51bGwgOiBudWxsO1xuICB9XG4gIHZhciBvcnRXYXNtRmFjdG9yeVRocmVhZGVkID0gdHJ1ZSA/IHRydWUgPyByZXF1aXJlX29ydF93YXNtX3RocmVhZGVkKCkgOiBudWxsIDogb3J0V2FzbUZhY3Rvcnk7XG4gIHZhciB3YXNtO1xuICB2YXIgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgdmFyIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xuICB2YXIgaXNNdWx0aVRocmVhZFN1cHBvcnRlZCA9IChudW1UaHJlYWRzKSA9PiB7XG4gICAgaWYgKG51bVRocmVhZHMgPT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmICFzZWxmLmNyb3NzT3JpZ2luSXNvbGF0ZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiZW52Lndhc20ubnVtVGhyZWFkcyBpcyBzZXQgdG8gXCIgKyBudW1UaHJlYWRzICsgXCIsIGJ1dCB0aGlzIHdpbGwgbm90IHdvcmsgdW5sZXNzIHlvdSBlbmFibGUgY3Jvc3NPcmlnaW5Jc29sYXRlZCBtb2RlLiBTZWUgaHR0cHM6Ly93ZWIuZGV2L2Nyb3NzLW9yaWdpbi1pc29sYXRpb24tZ3VpZGUvIGZvciBtb3JlIGluZm8uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiZW52Lndhc20ubnVtVGhyZWFkcyBpcyBzZXQgdG8gXCIgKyBudW1UaHJlYWRzICsgXCIsIGhvd2V2ZXIsIGN1cnJlbnRseSBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuIFBsZWFzZSBjb25zaWRlciB1c2luZyBvbm54cnVudGltZS1ub2RlIGZvciBwZXJmb3JtYW5jZSBjcml0aWNhbCBzY2VuYXJpb3MuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG5ldyBNZXNzYWdlQ2hhbm5lbCgpLnBvcnQxLnBvc3RNZXNzYWdlKG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAwLFxuICAgICAgICA5NyxcbiAgICAgICAgMTE1LFxuICAgICAgICAxMDksXG4gICAgICAgIDEsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDEsXG4gICAgICAgIDQsXG4gICAgICAgIDEsXG4gICAgICAgIDk2LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAzLFxuICAgICAgICAyLFxuICAgICAgICAxLFxuICAgICAgICAwLFxuICAgICAgICA1LFxuICAgICAgICA0LFxuICAgICAgICAxLFxuICAgICAgICAzLFxuICAgICAgICAxLFxuICAgICAgICAxLFxuICAgICAgICAxMCxcbiAgICAgICAgMTEsXG4gICAgICAgIDEsXG4gICAgICAgIDksXG4gICAgICAgIDAsXG4gICAgICAgIDY1LFxuICAgICAgICAwLFxuICAgICAgICAyNTQsXG4gICAgICAgIDE2LFxuICAgICAgICAyLFxuICAgICAgICAwLFxuICAgICAgICAyNixcbiAgICAgICAgMTFcbiAgICAgIF0pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICB2YXIgaXNTaW1kU3VwcG9ydGVkID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAwLFxuICAgICAgICA5NyxcbiAgICAgICAgMTE1LFxuICAgICAgICAxMDksXG4gICAgICAgIDEsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDEsXG4gICAgICAgIDQsXG4gICAgICAgIDEsXG4gICAgICAgIDk2LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAzLFxuICAgICAgICAyLFxuICAgICAgICAxLFxuICAgICAgICAwLFxuICAgICAgICAxMCxcbiAgICAgICAgMzAsXG4gICAgICAgIDEsXG4gICAgICAgIDI4LFxuICAgICAgICAwLFxuICAgICAgICA2NSxcbiAgICAgICAgMCxcbiAgICAgICAgMjUzLFxuICAgICAgICAxNSxcbiAgICAgICAgMjUzLFxuICAgICAgICAxMixcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMjUzLFxuICAgICAgICAxODYsXG4gICAgICAgIDEsXG4gICAgICAgIDI2LFxuICAgICAgICAxMVxuICAgICAgXSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG4gIHZhciBnZXRXYXNtRmlsZU5hbWUgPSAodXNlU2ltZCwgdXNlVGhyZWFkcykgPT4ge1xuICAgIGlmICh1c2VTaW1kKSB7XG4gICAgICBpZiAodHJ1ZSkge1xuICAgICAgICByZXR1cm4gXCJvcnQtdHJhaW5pbmctd2FzbS1zaW1kLndhc21cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1c2VUaHJlYWRzID8gXCJvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc21cIiA6IFwib3J0LXdhc20tc2ltZC53YXNtXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1c2VUaHJlYWRzID8gXCJvcnQtd2FzbS10aHJlYWRlZC53YXNtXCIgOiBcIm9ydC13YXNtLndhc21cIjtcbiAgICB9XG4gIH07XG4gIHZhciBpbml0aWFsaXplV2ViQXNzZW1ibHkgPSBhc3luYyAoZmxhZ3MpID0+IHtcbiAgICBpZiAoaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgaWYgKGluaXRpYWxpemluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgY2FsbHMgdG8gJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpJyBkZXRlY3RlZC5cIik7XG4gICAgfVxuICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmV2aW91cyBjYWxsIHRvICdpbml0aWFsaXplV2ViQXNzZW1ibHkoKScgZmFpbGVkLlwiKTtcbiAgICB9XG4gICAgaW5pdGlhbGl6aW5nID0gdHJ1ZTtcbiAgICBjb25zdCB0aW1lb3V0ID0gZmxhZ3MuaW5pdFRpbWVvdXQ7XG4gICAgY29uc3QgbnVtVGhyZWFkcyA9IGZsYWdzLm51bVRocmVhZHM7XG4gICAgY29uc3Qgc2ltZCA9IGZsYWdzLnNpbWQ7XG4gICAgY29uc3QgdXNlVGhyZWFkcyA9IGlzTXVsdGlUaHJlYWRTdXBwb3J0ZWQobnVtVGhyZWFkcyk7XG4gICAgY29uc3QgdXNlU2ltZCA9IHNpbWQgJiYgaXNTaW1kU3VwcG9ydGVkKCk7XG4gICAgY29uc3Qgd2FzbVBhdGhzID0gZmxhZ3Mud2FzbVBhdGhzO1xuICAgIGNvbnN0IHdhc21QcmVmaXhPdmVycmlkZSA9IHR5cGVvZiB3YXNtUGF0aHMgPT09IFwic3RyaW5nXCIgPyB3YXNtUGF0aHMgOiB2b2lkIDA7XG4gICAgY29uc3Qgd2FzbUZpbGVOYW1lID0gZ2V0V2FzbUZpbGVOYW1lKHVzZVNpbWQsIHVzZVRocmVhZHMpO1xuICAgIGNvbnN0IHdhc21QYXRoT3ZlcnJpZGUgPSB0eXBlb2Ygd2FzbVBhdGhzID09PSBcIm9iamVjdFwiID8gd2FzbVBhdGhzW3dhc21GaWxlTmFtZV0gOiB2b2lkIDA7XG4gICAgbGV0IGlzVGltZW91dCA9IGZhbHNlO1xuICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgaWYgKHRpbWVvdXQgPiAwKSB7XG4gICAgICB0YXNrcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlzVGltZW91dCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gdXNlVGhyZWFkcyA/IG9ydFdhc21GYWN0b3J5VGhyZWFkZWQgOiBvcnRXYXNtRmFjdG9yeTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgbG9jYXRlRmlsZTogKGZpbGVOYW1lLCBzY3JpcHREaXJlY3RvcnkpID0+IHtcbiAgICAgICAgICBpZiAodXNlVGhyZWFkcyAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi53b3JrZXIuanNcIikgJiYgdHlwZW9mIEJsb2IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLy8gVGhpcyByZXF1aXJlKCkgZnVuY3Rpb24gaXMgaGFuZGxlZCBieSBlc2J1aWxkIHBsdWdpbiB0byBsb2FkIGZpbGUgY29udGVudCBhcyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICAgICAgICByZXF1aXJlX29ydF93YXNtX3RocmVhZGVkX3dvcmtlcigpXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHsgdHlwZTogXCJ0ZXh0L2phdmFzY3JpcHRcIiB9XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKFwiLndhc21cIikpIHtcbiAgICAgICAgICAgIGlmICh3YXNtUGF0aE92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB3YXNtUGF0aE92ZXJyaWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gd2FzbVByZWZpeE92ZXJyaWRlID8/IHNjcmlwdERpcmVjdG9yeTtcbiAgICAgICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgICAgICBpZiAod2FzbUZpbGVOYW1lID09PSBcIm9ydC13YXNtLXNpbWQud2FzbVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIFwib3J0LXdhc20tc2ltZC5qc2VwLndhc21cIjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNtRmlsZU5hbWUgPT09IFwib3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgXCJvcnQtd2FzbS1zaW1kLXRocmVhZGVkLmpzZXAud2FzbVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgd2FzbUZpbGVOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgZmlsZU5hbWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAodXNlVGhyZWFkcykge1xuICAgICAgICBjb25maWcubnVtVGhyZWFkcyA9IG51bVRocmVhZHM7XG4gICAgICAgIGlmICh0eXBlb2YgQmxvYiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gam9pbihfX2Rpcm5hbWUsIFwib3J0LXdhc20tdGhyZWFkZWQuanNcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlQ29kZSA9IGB2YXIgb3J0V2FzbVRocmVhZGVkPSR7ZmFjdG9yeS50b1N0cmluZygpfTtgO1xuICAgICAgICAgIGNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gbmV3IEJsb2IoW3NjcmlwdFNvdXJjZUNvZGVdLCB7IHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZhY3RvcnkoY29uZmlnKS50aGVuKFxuICAgICAgICAvLyB3YXNtIG1vZHVsZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB3YXNtID0gbW9kdWxlO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gd2FzbSBtb2R1bGUgZmFpbGVkIHRvIGluaXRpYWxpemVcbiAgICAgICAgKHdoYXQpID0+IHtcbiAgICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICByZWplY3Qod2hhdCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSkpO1xuICAgIGF3YWl0IFByb21pc2UucmFjZSh0YXNrcyk7XG4gICAgaWYgKGlzVGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXZWJBc3NlbWJseSBiYWNrZW5kIGluaXRpYWxpemluZyBmYWlsZWQgZHVlIHRvIHRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xuICAgIH1cbiAgfTtcbiAgdmFyIGdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgIGlmIChpbml0aWFsaXplZCAmJiB3YXNtKSB7XG4gICAgICByZXR1cm4gd2FzbTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViQXNzZW1ibHkgaXMgbm90IGluaXRpYWxpemVkIHlldC5cIik7XG4gIH07XG5cbiAgLy8gd2ViL2xpYi93YXNtL3dhc20tdXRpbHMudHNcbiAgdmFyIGFsbG9jV2FzbVN0cmluZyA9IChkYXRhLCBhbGxvY3MpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IHdhc20yLmxlbmd0aEJ5dGVzVVRGOChkYXRhKSArIDE7XG4gICAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20yLl9tYWxsb2MoZGF0YUxlbmd0aCk7XG4gICAgd2FzbTIuc3RyaW5nVG9VVEY4KGRhdGEsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIGFsbG9jcy5wdXNoKGRhdGFPZmZzZXQpO1xuICAgIHJldHVybiBkYXRhT2Zmc2V0O1xuICB9O1xuICB2YXIgaXRlcmF0ZUV4dHJhT3B0aW9ucyA9IChvcHRpb25zLCBwcmVmaXgsIHNlZW4sIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJvYmplY3RcIiAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMob3B0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2lyY3VsYXIgcmVmZXJlbmNlIGluIG9wdGlvbnNcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWVuLmFkZChvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcHJlZml4ID8gcHJlZml4ICsga2V5IDoga2V5O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKHZhbHVlLCBuYW1lICsgXCIuXCIsIHNlZW4sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGhhbmRsZXIobmFtZSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgaGFuZGxlcihuYW1lLCB2YWx1ZSA/IFwiMVwiIDogXCIwXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYW5kbGUgZXh0cmEgY29uZmlnIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICB2YXIgY2hlY2tMYXN0RXJyb3IgPSAobWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IHdhc20yID0gZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBzdGFjayA9IHdhc20yLnN0YWNrU2F2ZSgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKDgpO1xuICAgICAgd2FzbTIuX09ydEdldExhc3RFcnJvcihwYXJhbXNPZmZzZXQsIHBhcmFtc09mZnNldCArIDQpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbTIuSEVBUDMyW3BhcmFtc09mZnNldCAvIDRdO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlUG9pbnRlciA9IHdhc20yLkhFQVBVMzJbcGFyYW1zT2Zmc2V0IC8gNCArIDFdO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlUG9pbnRlciA/IHdhc20yLlVURjhUb1N0cmluZyhlcnJvck1lc3NhZ2VQb2ludGVyKSA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gRVJST1JfQ09ERTogJHtlcnJvckNvZGV9LCBFUlJPUl9NRVNTQUdFOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gd2ViL2xpYi93YXNtL3J1bi1vcHRpb25zLnRzXG4gIHZhciBzZXRSdW5PcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICAgIGNvbnN0IGFsbG9jcyA9IFtdO1xuICAgIGNvbnN0IHJ1bk9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucz8ubG9nU2V2ZXJpdHlMZXZlbCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJ1bk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA9IDI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dTZXZlcml0eUxldmVsKSB8fCBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPCAwIHx8IG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA+IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucz8ubG9nVmVyYm9zaXR5TGV2ZWwgPT09IHZvaWQgMCkge1xuICAgICAgICBydW5PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsID0gMDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgdmVyYm9zaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsfWApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnM/LnRlcm1pbmF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJ1bk9wdGlvbnMudGVybWluYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgdGFnRGF0YU9mZnNldCA9IDA7XG4gICAgICBpZiAob3B0aW9ucz8udGFnICE9PSB2b2lkIDApIHtcbiAgICAgICAgdGFnRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhvcHRpb25zLnRhZywgYWxsb2NzKTtcbiAgICAgIH1cbiAgICAgIHJ1bk9wdGlvbnNIYW5kbGUgPSB3YXNtMi5fT3J0Q3JlYXRlUnVuT3B0aW9ucyhcbiAgICAgICAgcnVuT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsLFxuICAgICAgICBydW5PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsLFxuICAgICAgICAhIXJ1bk9wdGlvbnMudGVybWluYXRlLFxuICAgICAgICB0YWdEYXRhT2Zmc2V0XG4gICAgICApO1xuICAgICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBjcmVhdGUgcnVuIG9wdGlvbnMuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnM/LmV4dHJhICE9PSB2b2lkIDApIHtcbiAgICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhvcHRpb25zLmV4dHJhLCBcIlwiLCAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcodmFsdWUsIGFsbG9jcyk7XG4gICAgICAgICAgaWYgKHdhc20yLl9PcnRBZGRSdW5Db25maWdFbnRyeShydW5PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgcnVuIGNvbmZpZyBlbnRyeTogJHtrZXl9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbcnVuT3B0aW9uc0hhbmRsZSwgYWxsb2NzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMocnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgICB9XG4gICAgICBhbGxvY3MuZm9yRWFjaCgoYWxsb2MpID0+IHdhc20yLl9mcmVlKGFsbG9jKSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfTtcblxuICAvLyB3ZWIvbGliL3dhc20vc2Vzc2lvbi1vcHRpb25zLnRzXG4gIHZhciBnZXRHcmFwaE9wdGltemF0aW9uTGV2ZWwgPSAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkgPT4ge1xuICAgIHN3aXRjaCAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkge1xuICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgY2FzZSBcImJhc2ljXCI6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSBcImV4dGVuZGVkXCI6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgY2FzZSBcImFsbFwiOlxuICAgICAgICByZXR1cm4gOTk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGdyYXBoIG9wdGltaXphdGlvbiBsZXZlbDogJHtncmFwaE9wdGltaXphdGlvbkxldmVsfWApO1xuICAgIH1cbiAgfTtcbiAgdmFyIGdldEV4ZWN1dGlvbk1vZGUgPSAoZXhlY3V0aW9uTW9kZSkgPT4ge1xuICAgIHN3aXRjaCAoZXhlY3V0aW9uTW9kZSkge1xuICAgICAgY2FzZSBcInNlcXVlbnRpYWxcIjpcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBjYXNlIFwicGFyYWxsZWxcIjpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGV4ZWN1dGlvbiBtb2RlOiAke2V4ZWN1dGlvbk1vZGV9YCk7XG4gICAgfVxuICB9O1xuICB2YXIgYXBwZW5kRGVmYXVsdE9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucy5leHRyYSkge1xuICAgICAgb3B0aW9ucy5leHRyYSA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuZXh0cmEuc2Vzc2lvbikge1xuICAgICAgb3B0aW9ucy5leHRyYS5zZXNzaW9uID0ge307XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSBvcHRpb25zLmV4dHJhLnNlc3Npb247XG4gICAgaWYgKCFzZXNzaW9uLnVzZV9vcnRfbW9kZWxfYnl0ZXNfZGlyZWN0bHkpIHtcbiAgICAgIHNlc3Npb24udXNlX29ydF9tb2RlbF9ieXRlc19kaXJlY3RseSA9IFwiMVwiO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMgJiYgb3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMuc29tZSgoZXApID0+ICh0eXBlb2YgZXAgPT09IFwic3RyaW5nXCIgPyBlcCA6IGVwLm5hbWUpID09PSBcIndlYmdwdVwiKSkge1xuICAgICAgb3B0aW9ucy5lbmFibGVNZW1QYXR0ZXJuID0gZmFsc2U7XG4gICAgfVxuICB9O1xuICB2YXIgc2V0RXhlY3V0aW9uUHJvdmlkZXJzID0gKHNlc3Npb25PcHRpb25zSGFuZGxlLCBleGVjdXRpb25Qcm92aWRlcnMsIGFsbG9jcykgPT4ge1xuICAgIGZvciAoY29uc3QgZXAgb2YgZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICBsZXQgZXBOYW1lID0gdHlwZW9mIGVwID09PSBcInN0cmluZ1wiID8gZXAgOiBlcC5uYW1lO1xuICAgICAgc3dpdGNoIChlcE5hbWUpIHtcbiAgICAgICAgY2FzZSBcIndlYm5uXCI6XG4gICAgICAgICAgZXBOYW1lID0gXCJXRUJOTlwiO1xuICAgICAgICAgIGlmICh0eXBlb2YgZXAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHdlYm5uT3B0aW9ucyA9IGVwO1xuICAgICAgICAgICAgaWYgKHdlYm5uT3B0aW9ucz8uZGV2aWNlVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwiZGV2aWNlVHlwZVwiLCBhbGxvY3MpO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcod2Vibm5PcHRpb25zLmRldmljZVR5cGUsIGFsbG9jcyk7XG4gICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdkZXZpY2VUeXBlJyAtICR7d2Vibm5PcHRpb25zLmRldmljZVR5cGV9LmApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5udW1UaHJlYWRzKSB7XG4gICAgICAgICAgICAgIGxldCBudW1UaHJlYWRzID0gd2Vibm5PcHRpb25zLm51bVRocmVhZHM7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtVGhyZWFkcyAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG51bVRocmVhZHMpIHx8IG51bVRocmVhZHMgPCAwKSB7XG4gICAgICAgICAgICAgICAgbnVtVGhyZWFkcyA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhcIm51bVRocmVhZHNcIiwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG51bVRocmVhZHMudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ251bVRocmVhZHMnIC0gJHt3ZWJubk9wdGlvbnMubnVtVGhyZWFkc30uYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/LnBvd2VyUHJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwicG93ZXJQcmVmZXJlbmNlXCIsIGFsbG9jcyk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdwb3dlclByZWZlcmVuY2UnIC0gJHt3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlfS5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlYmdwdVwiOlxuICAgICAgICAgIGVwTmFtZSA9IFwiSlNcIjtcbiAgICAgICAgICBpZiAodHlwZW9mIGVwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB3ZWJncHVPcHRpb25zID0gZXA7XG4gICAgICAgICAgICBpZiAod2ViZ3B1T3B0aW9ucz8ucHJlZmVycmVkTGF5b3V0KSB7XG4gICAgICAgICAgICAgIGlmICh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCAhPT0gXCJOQ0hXXCIgJiYgd2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXQgIT09IFwiTkhXQ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmVmZXJyZWRMYXlvdXQgbXVzdCBiZSBlaXRoZXIgJ05DSFcnIG9yICdOSFdDJzogJHt3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwicHJlZmVycmVkTGF5b3V0XCIsIGFsbG9jcyk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAncHJlZmVycmVkTGF5b3V0JyAtICR7d2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXR9LmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid2FzbVwiOlxuICAgICAgICBjYXNlIFwiY3B1XCI6XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGV4ZWN1dGlvbiBwcm92aWRlcjogJHtlcE5hbWV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlcE5hbWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGVwTmFtZSwgYWxsb2NzKTtcbiAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcihzZXNzaW9uT3B0aW9uc0hhbmRsZSwgZXBOYW1lRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGFwcGVuZCBleGVjdXRpb24gcHJvdmlkZXI6ICR7ZXBOYW1lfS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBzZXRTZXNzaW9uT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGxldCBzZXNzaW9uT3B0aW9uc0hhbmRsZSA9IDA7XG4gICAgY29uc3QgYWxsb2NzID0gW107XG4gICAgY29uc3Qgc2Vzc2lvbk9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGFwcGVuZERlZmF1bHRPcHRpb25zKHNlc3Npb25PcHRpb25zKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCA9IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbChzZXNzaW9uT3B0aW9ucy5ncmFwaE9wdGltaXphdGlvbkxldmVsID8/IFwiYWxsXCIpO1xuICAgICAgY29uc3QgZXhlY3V0aW9uTW9kZSA9IGdldEV4ZWN1dGlvbk1vZGUoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uTW9kZSA/PyBcInNlcXVlbnRpYWxcIik7XG4gICAgICBjb25zdCBsb2dJZERhdGFPZmZzZXQgPSB0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMubG9nSWQgPT09IFwic3RyaW5nXCIgPyBhbGxvY1dhc21TdHJpbmcoc2Vzc2lvbk9wdGlvbnMubG9nSWQsIGFsbG9jcykgOiAwO1xuICAgICAgY29uc3QgbG9nU2V2ZXJpdHlMZXZlbCA9IHNlc3Npb25PcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPz8gMjtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsb2dTZXZlcml0eUxldmVsKSB8fCBsb2dTZXZlcml0eUxldmVsIDwgMCB8fCBsb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGxvZyBzZXJ2ZXJpdHkgbGV2ZWwgaXMgbm90IHZhbGlkOiAke2xvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsb2dWZXJib3NpdHlMZXZlbCA9IHNlc3Npb25PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsID8/IDA7XG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobG9nVmVyYm9zaXR5TGV2ZWwpIHx8IGxvZ1ZlcmJvc2l0eUxldmVsIDwgMCB8fCBsb2dWZXJib3NpdHlMZXZlbCA+IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgdmVyYm9zaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtsb2dWZXJib3NpdHlMZXZlbH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGltaXplZE1vZGVsRmlsZVBhdGhPZmZzZXQgPSB0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMub3B0aW1pemVkTW9kZWxGaWxlUGF0aCA9PT0gXCJzdHJpbmdcIiA/IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoLCBhbGxvY3MpIDogMDtcbiAgICAgIHNlc3Npb25PcHRpb25zSGFuZGxlID0gd2FzbTIuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zKFxuICAgICAgICBncmFwaE9wdGltaXphdGlvbkxldmVsLFxuICAgICAgICAhIXNlc3Npb25PcHRpb25zLmVuYWJsZUNwdU1lbUFyZW5hLFxuICAgICAgICAhIXNlc3Npb25PcHRpb25zLmVuYWJsZU1lbVBhdHRlcm4sXG4gICAgICAgIGV4ZWN1dGlvbk1vZGUsXG4gICAgICAgICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlUHJvZmlsaW5nLFxuICAgICAgICAwLFxuICAgICAgICBsb2dJZERhdGFPZmZzZXQsXG4gICAgICAgIGxvZ1NldmVyaXR5TGV2ZWwsXG4gICAgICAgIGxvZ1ZlcmJvc2l0eUxldmVsLFxuICAgICAgICBvcHRpbWl6ZWRNb2RlbEZpbGVQYXRoT2Zmc2V0XG4gICAgICApO1xuICAgICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKFwiQ2FuJ3QgY3JlYXRlIHNlc3Npb24gb3B0aW9ucy5cIik7XG4gICAgICB9XG4gICAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICAgIHNldEV4ZWN1dGlvblByb3ZpZGVycyhzZXNzaW9uT3B0aW9uc0hhbmRsZSwgc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzLCBhbGxvY3MpO1xuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZW5hYmxlR3JhcGhDYXB0dXJlIG11c3QgYmUgYSBib29sZWFuIHZhbHVlOiAke3Nlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwiZW5hYmxlR3JhcGhDYXB0dXJlXCIsIGFsbG9jcyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmUudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKHdhc20yLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihcbiAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ2VuYWJsZUdyYXBoQ2FwdHVyZScgLSAke3Nlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZX0uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmcmVlIGRpbWVuc2lvbiBvdmVycmlkZSBuYW1lIG11c3QgYmUgYSBzdHJpbmc6ICR7bmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlIHZhbHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcjogJHt2YWx1ZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbmFtZU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhuYW1lLCBhbGxvY3MpO1xuICAgICAgICAgIGlmICh3YXNtMi5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlKHNlc3Npb25PcHRpb25zSGFuZGxlLCBuYW1lT2Zmc2V0LCB2YWx1ZSkgIT09IDApIHtcbiAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBmcmVlIGRpbWVuc2lvbiBvdmVycmlkZTogJHtuYW1lfSAtICR7dmFsdWV9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25PcHRpb25zLmV4dHJhICE9PSB2b2lkIDApIHtcbiAgICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhzZXNzaW9uT3B0aW9ucy5leHRyYSwgXCJcIiwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCksIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhrZXksIGFsbG9jcyk7XG4gICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuICAgICAgICAgIGlmICh3YXNtMi5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zKHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIGFsbG9jcy5mb3JFYWNoKChhbGxvYykgPT4gd2FzbTIuX2ZyZWUoYWxsb2MpKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuXG4gIC8vIHdlYi9saWIvd2FzbS93YXNtLWNvbW1vbi50c1xuICB2YXIgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0gPSAodHlwZSkgPT4ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImludDhcIjpcbiAgICAgICAgcmV0dXJuIDMgLyogaW50OCAqLztcbiAgICAgIGNhc2UgXCJ1aW50OFwiOlxuICAgICAgICByZXR1cm4gMiAvKiB1aW50OCAqLztcbiAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgIHJldHVybiA5IC8qIGJvb2wgKi87XG4gICAgICBjYXNlIFwiaW50MTZcIjpcbiAgICAgICAgcmV0dXJuIDUgLyogaW50MTYgKi87XG4gICAgICBjYXNlIFwidWludDE2XCI6XG4gICAgICAgIHJldHVybiA0IC8qIHVpbnQxNiAqLztcbiAgICAgIGNhc2UgXCJpbnQzMlwiOlxuICAgICAgICByZXR1cm4gNiAvKiBpbnQzMiAqLztcbiAgICAgIGNhc2UgXCJ1aW50MzJcIjpcbiAgICAgICAgcmV0dXJuIDEyIC8qIHVpbnQzMiAqLztcbiAgICAgIGNhc2UgXCJmbG9hdDE2XCI6XG4gICAgICAgIHJldHVybiAxMCAvKiBmbG9hdDE2ICovO1xuICAgICAgY2FzZSBcImZsb2F0MzJcIjpcbiAgICAgICAgcmV0dXJuIDEgLyogZmxvYXQgKi87XG4gICAgICBjYXNlIFwiZmxvYXQ2NFwiOlxuICAgICAgICByZXR1cm4gMTEgLyogZG91YmxlICovO1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gOCAvKiBzdHJpbmcgKi87XG4gICAgICBjYXNlIFwiaW50NjRcIjpcbiAgICAgICAgcmV0dXJuIDcgLyogaW50NjQgKi87XG4gICAgICBjYXNlIFwidWludDY0XCI6XG4gICAgICAgIHJldHVybiAxMyAvKiB1aW50NjQgKi87XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfTtcbiAgdmFyIHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nID0gKHR5cGVQcm90bykgPT4ge1xuICAgIHN3aXRjaCAodHlwZVByb3RvKSB7XG4gICAgICBjYXNlIDMgLyogaW50OCAqLzpcbiAgICAgICAgcmV0dXJuIFwiaW50OFwiO1xuICAgICAgY2FzZSAyIC8qIHVpbnQ4ICovOlxuICAgICAgICByZXR1cm4gXCJ1aW50OFwiO1xuICAgICAgY2FzZSA5IC8qIGJvb2wgKi86XG4gICAgICAgIHJldHVybiBcImJvb2xcIjtcbiAgICAgIGNhc2UgNSAvKiBpbnQxNiAqLzpcbiAgICAgICAgcmV0dXJuIFwiaW50MTZcIjtcbiAgICAgIGNhc2UgNCAvKiB1aW50MTYgKi86XG4gICAgICAgIHJldHVybiBcInVpbnQxNlwiO1xuICAgICAgY2FzZSA2IC8qIGludDMyICovOlxuICAgICAgICByZXR1cm4gXCJpbnQzMlwiO1xuICAgICAgY2FzZSAxMiAvKiB1aW50MzIgKi86XG4gICAgICAgIHJldHVybiBcInVpbnQzMlwiO1xuICAgICAgY2FzZSAxMCAvKiBmbG9hdDE2ICovOlxuICAgICAgICByZXR1cm4gXCJmbG9hdDE2XCI7XG4gICAgICBjYXNlIDEgLyogZmxvYXQgKi86XG4gICAgICAgIHJldHVybiBcImZsb2F0MzJcIjtcbiAgICAgIGNhc2UgMTEgLyogZG91YmxlICovOlxuICAgICAgICByZXR1cm4gXCJmbG9hdDY0XCI7XG4gICAgICBjYXNlIDggLyogc3RyaW5nICovOlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIGNhc2UgNyAvKiBpbnQ2NCAqLzpcbiAgICAgICAgcmV0dXJuIFwiaW50NjRcIjtcbiAgICAgIGNhc2UgMTMgLyogdWludDY0ICovOlxuICAgICAgICByZXR1cm4gXCJ1aW50NjRcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGVQcm90b31gKTtcbiAgICB9XG4gIH07XG4gIHZhciBnZXRUZW5zb3JFbGVtZW50U2l6ZSA9IChkYXRlVHlwZSkgPT4gW3ZvaWQgMCwgNCwgMSwgMSwgMiwgMiwgNCwgOCwgdm9pZCAwLCAxLCAyLCA4LCA0LCA4LCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwXVtkYXRlVHlwZV07XG4gIHZhciB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3IgPSAodHlwZSkgPT4ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImZsb2F0MTZcIjpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBGbG9hdDE2QXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgRmxvYXQxNkFycmF5LmZyb20gPyBGbG9hdDE2QXJyYXkgOiBVaW50MTZBcnJheTtcbiAgICAgIGNhc2UgXCJmbG9hdDMyXCI6XG4gICAgICAgIHJldHVybiBGbG9hdDMyQXJyYXk7XG4gICAgICBjYXNlIFwidWludDhcIjpcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICBjYXNlIFwiaW50OFwiOlxuICAgICAgICByZXR1cm4gSW50OEFycmF5O1xuICAgICAgY2FzZSBcInVpbnQxNlwiOlxuICAgICAgICByZXR1cm4gVWludDE2QXJyYXk7XG4gICAgICBjYXNlIFwiaW50MTZcIjpcbiAgICAgICAgcmV0dXJuIEludDE2QXJyYXk7XG4gICAgICBjYXNlIFwiaW50MzJcIjpcbiAgICAgICAgcmV0dXJuIEludDMyQXJyYXk7XG4gICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICByZXR1cm4gVWludDhBcnJheTtcbiAgICAgIGNhc2UgXCJmbG9hdDY0XCI6XG4gICAgICAgIHJldHVybiBGbG9hdDY0QXJyYXk7XG4gICAgICBjYXNlIFwidWludDMyXCI6XG4gICAgICAgIHJldHVybiBVaW50MzJBcnJheTtcbiAgICAgIGNhc2UgXCJpbnQ2NFwiOlxuICAgICAgICByZXR1cm4gQmlnSW50NjRBcnJheTtcbiAgICAgIGNhc2UgXCJ1aW50NjRcIjpcbiAgICAgICAgcmV0dXJuIEJpZ1VpbnQ2NEFycmF5O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCB0eXBlOiAke3R5cGV9YCk7XG4gICAgfVxuICB9O1xuICB2YXIgbG9nTGV2ZWxTdHJpbmdUb0VudW0gPSAobG9nTGV2ZWwpID0+IHtcbiAgICBzd2l0Y2ggKGxvZ0xldmVsKSB7XG4gICAgICBjYXNlIFwidmVyYm9zZVwiOlxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGNhc2UgXCJpbmZvXCI6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSBcIndhcm5pbmdcIjpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICBjYXNlIFwiZmF0YWxcIjpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvZ2dpbmcgbGV2ZWw6ICR7bG9nTGV2ZWx9YCk7XG4gICAgfVxuICB9O1xuICB2YXIgaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlID0gKHR5cGUpID0+IHR5cGUgPT09IFwiZmxvYXQzMlwiIHx8IHR5cGUgPT09IFwiZmxvYXQxNlwiIHx8IHR5cGUgPT09IFwiaW50MzJcIiB8fCB0eXBlID09PSBcImludDY0XCIgfHwgdHlwZSA9PT0gXCJ1aW50MzJcIiB8fCB0eXBlID09PSBcInVpbnQ4XCIgfHwgdHlwZSA9PT0gXCJib29sXCI7XG4gIHZhciBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0gPSAobG9jYXRpb24pID0+IHtcbiAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7XG4gICAgICBjYXNlIFwibm9uZVwiOlxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGNhc2UgXCJjcHVcIjpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBjYXNlIFwiY3B1LXBpbm5lZFwiOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgXCJ0ZXh0dXJlXCI6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgY2FzZSBcImdwdS1idWZmZXJcIjpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgbG9jYXRpb246ICR7bG9jYXRpb259YCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIHdlYi9saWIvd2FzbS93YXNtLXV0aWxzLWxvYWQtZmlsZS50c1xuICBpbml0X2ZzKCk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTpub2RlOmZzL3Byb21pc2VzXG4gIHZhciByZWFkRmlsZTIgPSB2b2lkIDA7XG5cbiAgLy8gd2ViL2xpYi93YXNtL3dhc20tdXRpbHMtbG9hZC1maWxlLnRzXG4gIHZhciBsb2FkRmlsZSA9IGFzeW5jIChmaWxlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVhZEZpbGUyKGZpbGUpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlLmNvZGUgPT09IFwiRVJSX0ZTX0ZJTEVfVE9PX0xBUkdFXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW0oZmlsZSk7XG4gICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBkYXRhIGZpbGU6ICR7ZmlsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LUxlbmd0aFwiKTtcbiAgICAgICAgY29uc3QgZmlsZVNpemUgPSBjb250ZW50TGVuZ3RoSGVhZGVyID8gcGFyc2VJbnQoY29udGVudExlbmd0aEhlYWRlciwgMTApIDogMDtcbiAgICAgICAgaWYgKGZpbGVTaXplIDwgMTA3Mzc0MTgyNCkge1xuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGF0YSBmaWxlOiAke2ZpbGV9LCBubyByZXNwb25zZSBib2R5LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihmaWxlU2l6ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKGZpbGVTaXplIC8gNjU1MzYpO1xuICAgICAgICAgICAgICBidWZmZXIgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHsgaW5pdGlhbDogcGFnZXMsIG1heGltdW06IHBhZ2VzIH0pLmJ1ZmZlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaHVua1NpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBuZXcgVWludDhBcnJheShidWZmZXIsIG9mZnNldCwgY2h1bmtTaXplKTtcbiAgICAgICAgICAgIGNodW5rLnNldCh2YWx1ZSk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCAwLCBmaWxlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKTtcbiAgICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGZpbGUpO1xuICAgIH1cbiAgfTtcblxuICAvLyB3ZWIvbGliL3dhc20vd2FzbS1jb3JlLWltcGwudHNcbiAgdmFyIGluaXRPcnQgPSAobnVtVGhyZWFkcywgbG9nZ2luZ0xldmVsKSA9PiB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gZ2V0SW5zdGFuY2UoKS5fT3J0SW5pdChudW1UaHJlYWRzLCBsb2dnaW5nTGV2ZWwpO1xuICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKFwiQ2FuJ3QgaW5pdGlhbGl6ZSBvbm54cnVudGltZS5cIik7XG4gICAgfVxuICB9O1xuICB2YXIgaW5pdFJ1bnRpbWUgPSBhc3luYyAoZW52KSA9PiB7XG4gICAgaW5pdE9ydChlbnYud2FzbS5udW1UaHJlYWRzLCBsb2dMZXZlbFN0cmluZ1RvRW51bShlbnYubG9nTGV2ZWwpKTtcbiAgfTtcbiAgdmFyIGluaXRFcCA9IGFzeW5jIChlbnYsIGVwTmFtZSkgPT4ge1xuICAgIGlmIChmYWxzZSkge1xuICAgICAgY29uc3QgaW5pdEpzZXAgPSBudWxsLmluaXQ7XG4gICAgICBpZiAoZXBOYW1lID09PSBcIndlYmdwdVwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcInVuZGVmaW5lZFwiIHx8ICFuYXZpZ2F0b3IuZ3B1KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViR1BVIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWRhcHRlciA9IGVudi53ZWJncHUuYWRhcHRlcjtcbiAgICAgICAgaWYgKCFhZGFwdGVyKSB7XG4gICAgICAgICAgY29uc3QgcG93ZXJQcmVmZXJlbmNlID0gZW52LndlYmdwdS5wb3dlclByZWZlcmVuY2U7XG4gICAgICAgICAgaWYgKHBvd2VyUHJlZmVyZW5jZSAhPT0gdm9pZCAwICYmIHBvd2VyUHJlZmVyZW5jZSAhPT0gXCJsb3ctcG93ZXJcIiAmJiBwb3dlclByZWZlcmVuY2UgIT09IFwiaGlnaC1wZXJmb3JtYW5jZVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG93ZXJQcmVmZXJlbmNlIHNldHRpbmc6IFwiJHtwb3dlclByZWZlcmVuY2V9XCJgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZm9yY2VGYWxsYmFja0FkYXB0ZXIgPSBlbnYud2ViZ3B1LmZvcmNlRmFsbGJhY2tBZGFwdGVyO1xuICAgICAgICAgIGlmIChmb3JjZUZhbGxiYWNrQWRhcHRlciAhPT0gdm9pZCAwICYmIHR5cGVvZiBmb3JjZUZhbGxiYWNrQWRhcHRlciAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JjZUZhbGxiYWNrQWRhcHRlciBzZXR0aW5nOiBcIiR7Zm9yY2VGYWxsYmFja0FkYXB0ZXJ9XCJgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoeyBwb3dlclByZWZlcmVuY2UsIGZvcmNlRmFsbGJhY2tBZGFwdGVyIH0pO1xuICAgICAgICAgIGlmICghYWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdldCBHUFUgYWRhcHRlci4gWW91IG1heSBuZWVkIHRvIGVuYWJsZSBmbGFnIFwiLS1lbmFibGUtdW5zYWZlLXdlYmdwdVwiIGlmIHlvdSBhcmUgdXNpbmcgQ2hyb21lLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWRhcHRlci5saW1pdHMgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGFkYXB0ZXIuZmVhdHVyZXMgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGFkYXB0ZXIucmVxdWVzdERldmljZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEdQVSBhZGFwdGVyIHNldCBpbiBgZW52LndlYmdwdS5hZGFwdGVyYC4gSXQgbXVzdCBiZSBhIEdQVUFkYXB0ZXIgb2JqZWN0LlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnYud2FzbS5zaW1kKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJOb3Qgc3VwcG9ydGVkIGZvciBXZWJHUFU9T04gYW5kIFNJTUQ9T0ZGLiBQbGVhc2Ugc2V0IGBlbnYud2FzbS5zaW1kYCB0byB0cnVlIHdoZW4gdXNpbmcgYHdlYmdwdWAgRVBcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaW5pdEpzZXAoXCJ3ZWJncHVcIiwgZ2V0SW5zdGFuY2UoKSwgZW52LCBhZGFwdGVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcE5hbWUgPT09IFwid2Vibm5cIikge1xuICAgICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhbmF2aWdhdG9yLm1sKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViTk4gaXMgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IGVudmlyb25tZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGluaXRKc2VwKFwid2Vibm5cIiwgZ2V0SW5zdGFuY2UoKSwgZW52KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBhY3RpdmVTZXNzaW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHZhciBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudCA9IChzZXNzaW9uSGFuZGxlKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHN0YWNrID0gd2FzbTIuc3RhY2tTYXZlKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGFPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKDgpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbTIuX09ydEdldElucHV0T3V0cHV0Q291bnQoc2Vzc2lvbkhhbmRsZSwgZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIDQpO1xuICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcihcIkNhbid0IGdldCBzZXNzaW9uIGlucHV0L291dHB1dCBjb3VudC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3dhc20yLkhFQVAzMltkYXRhT2Zmc2V0IC8gNF0sIHdhc20yLkhFQVAzMltkYXRhT2Zmc2V0IC8gNCArIDFdXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICB9XG4gIH07XG4gIHZhciBjb3B5RnJvbUV4dGVybmFsQnVmZmVyID0gKG1vZGVsKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IG1vZGVsRGF0YU9mZnNldCA9IHdhc20yLl9tYWxsb2MobW9kZWwuYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG1vZGVsRGF0YU9mZnNldCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBjcmVhdGUgYSBzZXNzaW9uLiBmYWlsZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIgb2Ygc2l6ZSAke21vZGVsLmJ5dGVMZW5ndGh9LmApO1xuICAgIH1cbiAgICB3YXNtMi5IRUFQVTguc2V0KG1vZGVsLCBtb2RlbERhdGFPZmZzZXQpO1xuICAgIHJldHVybiBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbC5ieXRlTGVuZ3RoXTtcbiAgfTtcbiAgdmFyIGNyZWF0ZVNlc3Npb24gPSBhc3luYyAobW9kZWxEYXRhLCBvcHRpb25zKSA9PiB7XG4gICAgbGV0IG1vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoO1xuICAgIGNvbnN0IHdhc20yID0gZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbERhdGEpKSB7XG4gICAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gbW9kZWxEYXRhO1xuICAgIH0gZWxzZSBpZiAobW9kZWxEYXRhLmJ1ZmZlciA9PT0gd2FzbTIuSEVBUFU4LmJ1ZmZlcikge1xuICAgICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IFttb2RlbERhdGEuYnl0ZU9mZnNldCwgbW9kZWxEYXRhLmJ5dGVMZW5ndGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gY29weUZyb21FeHRlcm5hbEJ1ZmZlcihtb2RlbERhdGEpO1xuICAgIH1cbiAgICBsZXQgc2Vzc2lvbkhhbmRsZSA9IDA7XG4gICAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgICBsZXQgaW9CaW5kaW5nSGFuZGxlID0gMDtcbiAgICBsZXQgYWxsb2NzID0gW107XG4gICAgY29uc3QgaW5wdXROYW1lc1VURjhFbmNvZGVkID0gW107XG4gICAgY29uc3Qgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBbc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGFsbG9jc10gPSBzZXRTZXNzaW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zPy5leHRlcm5hbERhdGEgJiYgd2FzbTIubW91bnRFeHRlcm5hbERhdGEpIHtcbiAgICAgICAgY29uc3QgbG9hZGluZ1Byb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRpb25zLmV4dGVybmFsRGF0YSkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgZmlsZSA9PT0gXCJzdHJpbmdcIiA/IGZpbGUgOiBmaWxlLnBhdGg7XG4gICAgICAgICAgbG9hZGluZ1Byb21pc2VzLnB1c2gobG9hZEZpbGUodHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIgPyBmaWxlIDogZmlsZS5kYXRhKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB3YXNtMi5tb3VudEV4dGVybmFsRGF0YShwYXRoLCBkYXRhKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZ1Byb21pc2VzKTtcbiAgICAgIH1cbiAgICAgIHNlc3Npb25IYW5kbGUgPSBhd2FpdCB3YXNtMi5fT3J0Q3JlYXRlU2Vzc2lvbihtb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aCwgc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgICAgaWYgKHNlc3Npb25IYW5kbGUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBjcmVhdGUgYSBzZXNzaW9uLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFtpbnB1dENvdW50LCBvdXRwdXRDb3VudF0gPSBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudChzZXNzaW9uSGFuZGxlKTtcbiAgICAgIGNvbnN0IGVuYWJsZUdyYXBoQ2FwdHVyZSA9ICEhb3B0aW9ucz8uZW5hYmxlR3JhcGhDYXB0dXJlO1xuICAgICAgY29uc3QgaW5wdXROYW1lcyA9IFtdO1xuICAgICAgY29uc3Qgb3V0cHV0TmFtZXMgPSBbXTtcbiAgICAgIGNvbnN0IG91dHB1dFByZWZlcnJlZExvY2F0aW9ucyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHdhc20yLl9PcnRHZXRJbnB1dE5hbWUoc2Vzc2lvbkhhbmRsZSwgaSk7XG4gICAgICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBnZXQgYW4gaW5wdXQgbmFtZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLnB1c2gobmFtZSk7XG4gICAgICAgIGlucHV0TmFtZXMucHVzaCh3YXNtMi5VVEY4VG9TdHJpbmcobmFtZSkpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB3YXNtMi5fT3J0R2V0T3V0cHV0TmFtZShzZXNzaW9uSGFuZGxlLCBpKTtcbiAgICAgICAgaWYgKG5hbWUgPT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihcIkNhbid0IGdldCBhbiBvdXRwdXQgbmFtZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5wdXNoKG5hbWUpO1xuICAgICAgICBjb25zdCBuYW1lU3RyaW5nID0gd2FzbTIuVVRGOFRvU3RyaW5nKG5hbWUpO1xuICAgICAgICBvdXRwdXROYW1lcy5wdXNoKG5hbWVTdHJpbmcpO1xuICAgICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlICYmIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5wdXNoKFwiZ3B1LWJ1ZmZlclwiKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHR5cGVvZiBvcHRpb25zPy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IG9wdGlvbnMucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gOiBvcHRpb25zPy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbj8uW25hbWVTdHJpbmddID8/IFwiY3B1XCI7XG4gICAgICAgICAgaWYgKGxvY2F0aW9uICE9PSBcImNwdVwiICYmIGxvY2F0aW9uICE9PSBcImNwdS1waW5uZWRcIiAmJiBsb2NhdGlvbiAhPT0gXCJncHUtYnVmZmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHN1cHBvcnRlZCBwcmVmZXJyZWQgb3V0cHV0IGxvY2F0aW9uOiAke2xvY2F0aW9ufS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBsb2NhdGlvbiAhPT0gXCJncHUtYnVmZmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHN1cHBvcnRlZCBwcmVmZXJyZWQgb3V0cHV0IGxvY2F0aW9uOiAke2xvY2F0aW9ufS4gT25seSAnZ3B1LWJ1ZmZlcicgbG9jYXRpb24gaXMgc3VwcG9ydGVkIHdoZW4gZW5hYmxlR3JhcGhDYXB0dXJlIGlzIHRydWUuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGJpbmRpbmdTdGF0ZSA9IG51bGw7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgaW9CaW5kaW5nSGFuZGxlID0gd2FzbTIuX09ydENyZWF0ZUJpbmRpbmcoc2Vzc2lvbkhhbmRsZSk7XG4gICAgICAgIGlmIChpb0JpbmRpbmdIYW5kbGUgPT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihcIkNhbid0IGNyZWF0ZSBJTyBiaW5kaW5nLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kaW5nU3RhdGUgPSB7XG4gICAgICAgICAgaGFuZGxlOiBpb0JpbmRpbmdIYW5kbGUsXG4gICAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLFxuICAgICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWQ6IG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5tYXAoKGwpID0+IGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bShsKSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgc2Vzc2lvbkhhbmRsZSxcbiAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgYmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIGZhbHNlXVxuICAgICAgKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lcywgb3V0cHV0TmFtZXNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlucHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKChidWYpID0+IHdhc20yLl9PcnRGcmVlKGJ1ZikpO1xuICAgICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKChidWYpID0+IHdhc20yLl9PcnRGcmVlKGJ1ZikpO1xuICAgICAgaWYgKGlvQmluZGluZ0hhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZUJpbmRpbmcoaW9CaW5kaW5nSGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZXNzaW9uSGFuZGxlICE9PSAwKSB7XG4gICAgICAgIHdhc20yLl9PcnRSZWxlYXNlU2Vzc2lvbihzZXNzaW9uSGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHdhc20yLl9mcmVlKG1vZGVsRGF0YU9mZnNldCk7XG4gICAgICBpZiAoc2Vzc2lvbk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgICAgd2FzbTIuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucyhzZXNzaW9uT3B0aW9uc0hhbmRsZSk7XG4gICAgICB9XG4gICAgICBhbGxvY3MuZm9yRWFjaCgoYWxsb2MpID0+IHdhc20yLl9mcmVlKGFsbG9jKSk7XG4gICAgICB3YXNtMi51bm1vdW50RXh0ZXJuYWxEYXRhPy4oKTtcbiAgICB9XG4gIH07XG4gIHZhciByZWxlYXNlU2Vzc2lvbiA9IChzZXNzaW9uSWQpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVsZWFzZSBzZXNzaW9uLiBpbnZhbGlkIHNlc3Npb24gaWQ6ICR7c2Vzc2lvbklkfWApO1xuICAgIH1cbiAgICBjb25zdCBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlXSA9IHNlc3Npb247XG4gICAgaWYgKGlvQmluZGluZ1N0YXRlKSB7XG4gICAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlKSB7XG4gICAgICAgIHdhc20yLl9PcnRDbGVhckJvdW5kT3V0cHV0cyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICAgICAgfVxuICAgICAgd2FzbTIuX09ydFJlbGVhc2VCaW5kaW5nKGlvQmluZGluZ1N0YXRlLmhhbmRsZSk7XG4gICAgfVxuICAgIHdhc20yLmpzZXBPblJlbGVhc2VTZXNzaW9uPy4oc2Vzc2lvbklkKTtcbiAgICBpbnB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaCgoYnVmKSA9PiB3YXNtMi5fT3J0RnJlZShidWYpKTtcbiAgICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goKGJ1ZikgPT4gd2FzbTIuX09ydEZyZWUoYnVmKSk7XG4gICAgd2FzbTIuX09ydFJlbGVhc2VTZXNzaW9uKHNlc3Npb25IYW5kbGUpO1xuICAgIGFjdGl2ZVNlc3Npb25zLmRlbGV0ZShzZXNzaW9uSWQpO1xuICB9O1xuICB2YXIgcHJlcGFyZUlucHV0T3V0cHV0VGVuc29yID0gKHRlbnNvciwgdGVuc29ySGFuZGxlcywgYWxsb2NzLCBzZXNzaW9uSWQsIGluZGV4LCBlbmFibGVHcmFwaENhcHR1cmUgPSBmYWxzZSkgPT4ge1xuICAgIGlmICghdGVuc29yKSB7XG4gICAgICB0ZW5zb3JIYW5kbGVzLnB1c2goMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHdhc20yID0gZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclswXTtcbiAgICBjb25zdCBkaW1zID0gdGVuc29yWzFdO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gdGVuc29yWzNdO1xuICAgIGxldCByYXdEYXRhO1xuICAgIGxldCBkYXRhQnl0ZUxlbmd0aDtcbiAgICBpZiAoZGF0YVR5cGUgPT09IFwic3RyaW5nXCIgJiYgbG9jYXRpb24gPT09IFwiZ3B1LWJ1ZmZlclwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmcgdGVuc29yIGlzIG5vdCBzdXBwb3J0ZWQgb24gR1BVLlwiKTtcbiAgICB9XG4gICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBsb2NhdGlvbiAhPT0gXCJncHUtYnVmZmVyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4dGVybmFsIGJ1ZmZlciBtdXN0IGJlIHByb3ZpZGVkIGZvciBpbnB1dC9vdXRwdXQgaW5kZXggJHtpbmRleH0gd2hlbiBlbmFibGVHcmFwaENhcHR1cmUgaXMgdHJ1ZS5gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobG9jYXRpb24gPT09IFwiZ3B1LWJ1ZmZlclwiKSB7XG4gICAgICBjb25zdCBncHVCdWZmZXIgPSB0ZW5zb3JbMl0uZ3B1QnVmZmVyO1xuICAgICAgY29uc3QgZWxlbWVudFNpemVJbkJ5dGVzID0gZ2V0VGVuc29yRWxlbWVudFNpemUodGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0oZGF0YVR5cGUpKTtcbiAgICAgIGRhdGFCeXRlTGVuZ3RoID0gZGltcy5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKSAqIGVsZW1lbnRTaXplSW5CeXRlcztcbiAgICAgIGNvbnN0IHJlZ2lzdGVyQnVmZmVyID0gd2FzbTIuanNlcFJlZ2lzdGVyQnVmZmVyO1xuICAgICAgaWYgKCFyZWdpc3RlckJ1ZmZlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RlbnNvciBsb2NhdGlvbiBcImdwdS1idWZmZXJcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgdXNpbmcgV2ViR1BVLicpO1xuICAgICAgfVxuICAgICAgcmF3RGF0YSA9IHJlZ2lzdGVyQnVmZmVyKHNlc3Npb25JZCwgaW5kZXgsIGdwdUJ1ZmZlciwgZGF0YUJ5dGVMZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhID0gdGVuc29yWzJdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSA0ICogZGF0YS5sZW5ndGg7XG4gICAgICAgIHJhd0RhdGEgPSB3YXNtMi5fbWFsbG9jKGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgICAgYWxsb2NzLnB1c2gocmF3RGF0YSk7XG4gICAgICAgIGxldCBkYXRhSW5kZXggPSByYXdEYXRhIC8gNDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2ldICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB0ZW5zb3IgZGF0YSBhdCBpbmRleCAke2l9IGlzIG5vdCBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXNtMi5IRUFQVTMyW2RhdGFJbmRleCsrXSA9IGFsbG9jV2FzbVN0cmluZyhkYXRhW2ldLCBhbGxvY3MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhQnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgcmF3RGF0YSA9IHdhc20yLl9tYWxsb2MoZGF0YUJ5dGVMZW5ndGgpO1xuICAgICAgICBhbGxvY3MucHVzaChyYXdEYXRhKTtcbiAgICAgICAgd2FzbTIuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhQnl0ZUxlbmd0aCksIHJhd0RhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IHdhc20yLnN0YWNrU2F2ZSgpO1xuICAgIGNvbnN0IGRpbXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKDQgKiBkaW1zLmxlbmd0aCk7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBkaW1JbmRleCA9IGRpbXNPZmZzZXQgLyA0O1xuICAgICAgZGltcy5mb3JFYWNoKChkKSA9PiB3YXNtMi5IRUFQMzJbZGltSW5kZXgrK10gPSBkKTtcbiAgICAgIGNvbnN0IHRlbnNvcjIgPSB3YXNtMi5fT3J0Q3JlYXRlVGVuc29yKFxuICAgICAgICB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bShkYXRhVHlwZSksXG4gICAgICAgIHJhd0RhdGEsXG4gICAgICAgIGRhdGFCeXRlTGVuZ3RoLFxuICAgICAgICBkaW1zT2Zmc2V0LFxuICAgICAgICBkaW1zLmxlbmd0aCxcbiAgICAgICAgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtKGxvY2F0aW9uKVxuICAgICAgKTtcbiAgICAgIGlmICh0ZW5zb3IyID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBjcmVhdGUgdGVuc29yIGZvciBpbnB1dC9vdXRwdXQuIHNlc3Npb249JHtzZXNzaW9uSWR9LCBpbmRleD0ke2luZGV4fS5gKTtcbiAgICAgIH1cbiAgICAgIHRlbnNvckhhbmRsZXMucHVzaCh0ZW5zb3IyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICB9XG4gIH07XG4gIHZhciBydW4gPSBhc3luYyAoc2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0VGVuc29ycywgb3V0cHV0SW5kaWNlcywgb3V0cHV0VGVuc29ycywgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHdhc20yID0gZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBydW4gaW5mZXJlbmNlLiBpbnZhbGlkIHNlc3Npb24gaWQ6ICR7c2Vzc2lvbklkfWApO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uSGFuZGxlID0gc2Vzc2lvblswXTtcbiAgICBjb25zdCBpbnB1dE5hbWVzVVRGOEVuY29kZWQgPSBzZXNzaW9uWzFdO1xuICAgIGNvbnN0IG91dHB1dE5hbWVzVVRGOEVuY29kZWQgPSBzZXNzaW9uWzJdO1xuICAgIGNvbnN0IGlvQmluZGluZ1N0YXRlID0gc2Vzc2lvblszXTtcbiAgICBjb25zdCBlbmFibGVHcmFwaENhcHR1cmUgPSBzZXNzaW9uWzRdO1xuICAgIGNvbnN0IGlucHV0T3V0cHV0Qm91bmQgPSBzZXNzaW9uWzVdO1xuICAgIGNvbnN0IGlucHV0Q291bnQgPSBpbnB1dEluZGljZXMubGVuZ3RoO1xuICAgIGNvbnN0IG91dHB1dENvdW50ID0gb3V0cHV0SW5kaWNlcy5sZW5ndGg7XG4gICAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICAgIGxldCBydW5PcHRpb25zQWxsb2NzID0gW107XG4gICAgY29uc3QgaW5wdXRUZW5zb3JIYW5kbGVzID0gW107XG4gICAgY29uc3Qgb3V0cHV0VGVuc29ySGFuZGxlcyA9IFtdO1xuICAgIGNvbnN0IGlucHV0T3V0cHV0QWxsb2NzID0gW107XG4gICAgY29uc3QgYmVmb3JlUnVuU3RhY2sgPSB3YXNtMi5zdGFja1NhdmUoKTtcbiAgICBjb25zdCBpbnB1dFZhbHVlc09mZnNldCA9IHdhc20yLnN0YWNrQWxsb2MoaW5wdXRDb3VudCAqIDQpO1xuICAgIGNvbnN0IGlucHV0TmFtZXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKGlucHV0Q291bnQgKiA0KTtcbiAgICBjb25zdCBvdXRwdXRWYWx1ZXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKG91dHB1dENvdW50ICogNCk7XG4gICAgY29uc3Qgb3V0cHV0TmFtZXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKG91dHB1dENvdW50ICogNCk7XG4gICAgdHJ5IHtcbiAgICAgIFtydW5PcHRpb25zSGFuZGxlLCBydW5PcHRpb25zQWxsb2NzXSA9IHNldFJ1bk9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgaW5wdXRUZW5zb3JzW2ldLFxuICAgICAgICAgIGlucHV0VGVuc29ySGFuZGxlcyxcbiAgICAgICAgICBpbnB1dE91dHB1dEFsbG9jcyxcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgaW5wdXRJbmRpY2VzW2ldLFxuICAgICAgICAgIGVuYWJsZUdyYXBoQ2FwdHVyZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvcihcbiAgICAgICAgICBvdXRwdXRUZW5zb3JzW2ldLFxuICAgICAgICAgIG91dHB1dFRlbnNvckhhbmRsZXMsXG4gICAgICAgICAgaW5wdXRPdXRwdXRBbGxvY3MsXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGlucHV0Q291bnQgKyBvdXRwdXRJbmRpY2VzW2ldLFxuICAgICAgICAgIGVuYWJsZUdyYXBoQ2FwdHVyZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IGlucHV0VmFsdWVzSW5kZXggPSBpbnB1dFZhbHVlc09mZnNldCAvIDQ7XG4gICAgICBsZXQgaW5wdXROYW1lc0luZGV4ID0gaW5wdXROYW1lc09mZnNldCAvIDQ7XG4gICAgICBsZXQgb3V0cHV0VmFsdWVzSW5kZXggPSBvdXRwdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgICAgbGV0IG91dHB1dE5hbWVzSW5kZXggPSBvdXRwdXROYW1lc09mZnNldCAvIDQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgICB3YXNtMi5IRUFQVTMyW2lucHV0VmFsdWVzSW5kZXgrK10gPSBpbnB1dFRlbnNvckhhbmRsZXNbaV07XG4gICAgICAgIHdhc20yLkhFQVBVMzJbaW5wdXROYW1lc0luZGV4KytdID0gaW5wdXROYW1lc1VURjhFbmNvZGVkW2lucHV0SW5kaWNlc1tpXV07XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgICAgd2FzbTIuSEVBUFUzMltvdXRwdXRWYWx1ZXNJbmRleCsrXSA9IG91dHB1dFRlbnNvckhhbmRsZXNbaV07XG4gICAgICAgIHdhc20yLkhFQVBVMzJbb3V0cHV0TmFtZXNJbmRleCsrXSA9IG91dHB1dE5hbWVzVVRGOEVuY29kZWRbb3V0cHV0SW5kaWNlc1tpXV07XG4gICAgICB9XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgY29uc3QgeyBoYW5kbGUsIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucywgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZCB9ID0gaW9CaW5kaW5nU3RhdGU7XG4gICAgICAgIGlmIChpbnB1dE5hbWVzVVRGOEVuY29kZWQubGVuZ3RoICE9PSBpbnB1dENvdW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCBjb3VudCBmcm9tIGZlZWRzICgke2lucHV0Q291bnR9KSBpcyBleHBlY3RlZCB0byBiZSBhbHdheXMgZXF1YWwgdG8gbW9kZWwncyBpbnB1dCBjb3VudCAoJHtpbnB1dE5hbWVzVVRGOEVuY29kZWQubGVuZ3RofSkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGlucHV0SW5kaWNlc1tpXTtcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUyID0gYXdhaXQgd2FzbTIuX09ydEJpbmRJbnB1dChoYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIGlucHV0VGVuc29ySGFuZGxlc1tpXSk7XG4gICAgICAgICAgaWYgKGVycm9yQ29kZTIgIT09IDApIHtcbiAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBiaW5kIGlucHV0WyR7aX1dIGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBvdXRwdXRJbmRpY2VzW2ldO1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gb3V0cHV0VGVuc29yc1tpXT8uWzNdO1xuICAgICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlMiA9IHdhc20yLl9PcnRCaW5kT3V0cHV0KGhhbmRsZSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIG91dHB1dFRlbnNvckhhbmRsZXNbaV0sIDApO1xuICAgICAgICAgICAgaWYgKGVycm9yQ29kZTIgIT09IDApIHtcbiAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgcHJlLWFsbG9jYXRlZCBvdXRwdXRbJHtpfV0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckNvZGUyID0gd2FzbTIuX09ydEJpbmRPdXRwdXQoaGFuZGxlLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkW2luZGV4XSwgMCwgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZFtpbmRleF0pO1xuICAgICAgICAgICAgaWYgKGVycm9yQ29kZTIgIT09IDApIHtcbiAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgb3V0cHV0WyR7aX1dIHRvICR7b3V0cHV0UHJlZmVycmVkTG9jYXRpb25zW2ldfSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZSwgdHJ1ZV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHdhc20yLmpzZXBPblJ1blN0YXJ0Py4oc2Vzc2lvbkhhbmRsZSk7XG4gICAgICBsZXQgZXJyb3JDb2RlO1xuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIGVycm9yQ29kZSA9IGF3YWl0IHdhc20yLl9PcnRSdW5XaXRoQmluZGluZyhcbiAgICAgICAgICBzZXNzaW9uSGFuZGxlLFxuICAgICAgICAgIGlvQmluZGluZ1N0YXRlLmhhbmRsZSxcbiAgICAgICAgICBvdXRwdXRDb3VudCxcbiAgICAgICAgICBvdXRwdXRWYWx1ZXNPZmZzZXQsXG4gICAgICAgICAgcnVuT3B0aW9uc0hhbmRsZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JDb2RlID0gYXdhaXQgd2FzbTIuX09ydFJ1bihcbiAgICAgICAgICBzZXNzaW9uSGFuZGxlLFxuICAgICAgICAgIGlucHV0TmFtZXNPZmZzZXQsXG4gICAgICAgICAgaW5wdXRWYWx1ZXNPZmZzZXQsXG4gICAgICAgICAgaW5wdXRDb3VudCxcbiAgICAgICAgICBvdXRwdXROYW1lc09mZnNldCxcbiAgICAgICAgICBvdXRwdXRDb3VudCxcbiAgICAgICAgICBvdXRwdXRWYWx1ZXNPZmZzZXQsXG4gICAgICAgICAgcnVuT3B0aW9uc0hhbmRsZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcihcImZhaWxlZCB0byBjYWxsIE9ydFJ1bigpLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRlbnNvciA9IHdhc20yLkhFQVBVMzJbb3V0cHV0VmFsdWVzT2Zmc2V0IC8gNCArIGldO1xuICAgICAgICBpZiAodGVuc29yID09PSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldKSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2gob3V0cHV0VGVuc29yc1tpXSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3JlR2V0VGVuc29yRGF0YVN0YWNrID0gd2FzbTIuc3RhY2tTYXZlKCk7XG4gICAgICAgIGNvbnN0IHRlbnNvckRhdGFPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKDQgKiA0KTtcbiAgICAgICAgbGV0IGtlZXBPdXRwdXRUZW5zb3IgPSBmYWxzZTtcbiAgICAgICAgbGV0IHR5cGUsIGRhdGFPZmZzZXQgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZTIgPSB3YXNtMi5fT3J0R2V0VGVuc29yRGF0YShcbiAgICAgICAgICAgIHRlbnNvcixcbiAgICAgICAgICAgIHRlbnNvckRhdGFPZmZzZXQsXG4gICAgICAgICAgICB0ZW5zb3JEYXRhT2Zmc2V0ICsgNCxcbiAgICAgICAgICAgIHRlbnNvckRhdGFPZmZzZXQgKyA4LFxuICAgICAgICAgICAgdGVuc29yRGF0YU9mZnNldCArIDEyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlMiAhPT0gMCkge1xuICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGFjY2VzcyBvdXRwdXQgdGVuc29yIGRhdGEgb24gaW5kZXggJHtpfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHRlbnNvckRhdGFJbmRleCA9IHRlbnNvckRhdGFPZmZzZXQgLyA0O1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gd2FzbTIuSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgICAgZGF0YU9mZnNldCA9IHdhc20yLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICAgIGNvbnN0IGRpbXNPZmZzZXQgPSB3YXNtMi5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBkaW1zTGVuZ3RoID0gd2FzbTIuSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgICAgY29uc3QgZGltcyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkyID0gMDsgaTIgPCBkaW1zTGVuZ3RoOyBpMisrKSB7XG4gICAgICAgICAgICBkaW1zLnB1c2god2FzbTIuSEVBUFUzMltkaW1zT2Zmc2V0IC8gNCArIGkyXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhc20yLl9PcnRGcmVlKGRpbXNPZmZzZXQpO1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBkaW1zLnJlZHVjZSgoYSwgYikgPT4gYSAqIGIsIDEpO1xuICAgICAgICAgIHR5cGUgPSB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyhkYXRhVHlwZSk7XG4gICAgICAgICAgY29uc3QgcHJlZmVycmVkTG9jYXRpb24gPSBpb0JpbmRpbmdTdGF0ZT8ub3V0cHV0UHJlZmVycmVkTG9jYXRpb25zW291dHB1dEluZGljZXNbaV1dO1xuICAgICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAocHJlZmVycmVkTG9jYXRpb24gPT09IFwiZ3B1LWJ1ZmZlclwiKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmluZyB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiBHUFUuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nRGF0YSA9IFtdO1xuICAgICAgICAgICAgbGV0IGRhdGFJbmRleCA9IGRhdGFPZmZzZXQgLyA0O1xuICAgICAgICAgICAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IHNpemU7IGkyKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2FzbTIuSEVBUFUzMltkYXRhSW5kZXgrK107XG4gICAgICAgICAgICAgIGNvbnN0IG1heEJ5dGVzVG9SZWFkID0gaTIgPT09IHNpemUgLSAxID8gdm9pZCAwIDogd2FzbTIuSEVBUFUzMltkYXRhSW5kZXhdIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICBzdHJpbmdEYXRhLnB1c2god2FzbTIuVVRGOFRvU3RyaW5nKG9mZnNldCwgbWF4Qnl0ZXNUb1JlYWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFt0eXBlLCBkaW1zLCBzdHJpbmdEYXRhLCBcImNwdVwiXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcmVmZXJyZWRMb2NhdGlvbiA9PT0gXCJncHUtYnVmZmVyXCIgJiYgc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZ2V0QnVmZmVyID0gd2FzbTIuanNlcEdldEJ1ZmZlcjtcbiAgICAgICAgICAgICAgaWYgKCFnZXRCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZWZlcnJlZExvY2F0aW9uIFwiZ3B1LWJ1ZmZlclwiIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCB1c2luZyBXZWJHUFUuJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZ3B1QnVmZmVyID0gZ2V0QnVmZmVyKGRhdGFPZmZzZXQpO1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IGdldFRlbnNvckVsZW1lbnRTaXplKGRhdGFUeXBlKTtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplID09PSB2b2lkIDAgfHwgIWlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAga2VlcE91dHB1dFRlbnNvciA9IHRydWU7XG4gICAgICAgICAgICAgIG91dHB1dC5wdXNoKFtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRpbXMsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZ3B1QnVmZmVyLFxuICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHdhc20yLmpzZXBDcmVhdGVEb3dubG9hZGVyKGdwdUJ1ZmZlciwgc2l6ZSAqIGVsZW1lbnRTaXplLCB0eXBlKSxcbiAgICAgICAgICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2FzbTIuX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiZ3B1LWJ1ZmZlclwiXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZWRBcnJheUNvbnN0cnVjdG9yID0gdGVuc29yVHlwZVRvVHlwZWRBcnJheUNvbnN0cnVjdG9yKHR5cGUpO1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcihzaXplKTtcbiAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKS5zZXQod2FzbTIuSEVBUFU4LnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgICAgb3V0cHV0LnB1c2goW3R5cGUsIGRpbXMsIGRhdGEsIFwiY3B1XCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKGJlZm9yZUdldFRlbnNvckRhdGFTdGFjayk7XG4gICAgICAgICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIgJiYgZGF0YU9mZnNldCkge1xuICAgICAgICAgICAgd2FzbTIuX2ZyZWUoZGF0YU9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgha2VlcE91dHB1dFRlbnNvcikge1xuICAgICAgICAgICAgd2FzbTIuX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpb0JpbmRpbmdTdGF0ZSAmJiAhZW5hYmxlR3JhcGhDYXB0dXJlKSB7XG4gICAgICAgIHdhc20yLl9PcnRDbGVhckJvdW5kT3V0cHV0cyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICAgICAgICBhY3RpdmVTZXNzaW9ucy5zZXQoXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGlvQmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIGZhbHNlXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKGJlZm9yZVJ1blN0YWNrKTtcbiAgICAgIGlucHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKCh2KSA9PiB3YXNtMi5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgICBvdXRwdXRUZW5zb3JIYW5kbGVzLmZvckVhY2goKHYpID0+IHdhc20yLl9PcnRSZWxlYXNlVGVuc29yKHYpKTtcbiAgICAgIGlucHV0T3V0cHV0QWxsb2NzLmZvckVhY2goKHApID0+IHdhc20yLl9mcmVlKHApKTtcbiAgICAgIGlmIChydW5PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICAgIHdhc20yLl9PcnRSZWxlYXNlUnVuT3B0aW9ucyhydW5PcHRpb25zSGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIHJ1bk9wdGlvbnNBbGxvY3MuZm9yRWFjaCgocCkgPT4gd2FzbTIuX2ZyZWUocCkpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGVuZFByb2ZpbGluZyA9IChzZXNzaW9uSWQpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzZXNzaW9uIGlkXCIpO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uSGFuZGxlID0gc2Vzc2lvblswXTtcbiAgICBjb25zdCBwcm9maWxlRmlsZU5hbWUgPSB3YXNtMi5fT3J0RW5kUHJvZmlsaW5nKHNlc3Npb25IYW5kbGUpO1xuICAgIGlmIChwcm9maWxlRmlsZU5hbWUgPT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKFwiQ2FuJ3QgZ2V0IGFuIHByb2ZpbGUgZmlsZSBuYW1lLlwiKTtcbiAgICB9XG4gICAgd2FzbTIuX09ydEZyZWUocHJvZmlsZUZpbGVOYW1lKTtcbiAgfTtcbiAgdmFyIGV4dHJhY3RUcmFuc2ZlcmFibGVCdWZmZXJzID0gKHRlbnNvcnMpID0+IHtcbiAgICBjb25zdCBidWZmZXJzID0gW107XG4gICAgZm9yIChjb25zdCB0ZW5zb3Igb2YgdGVuc29ycykge1xuICAgICAgY29uc3QgZGF0YSA9IHRlbnNvclsyXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSAmJiBcImJ1ZmZlclwiIGluIGRhdGEpIHtcbiAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuYnVmZmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcnM7XG4gIH07XG5cbiAgLy8gd2ViL2xpYi93YXNtL3Byb3h5LXdvcmtlci9tYWluLnRzXG4gIHNlbGYub25tZXNzYWdlID0gKGV2KSA9PiB7XG4gICAgY29uc3QgeyB0eXBlLCBpbjogbWVzc2FnZSB9ID0gZXYuZGF0YTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJpbml0LXdhc21cIjpcbiAgICAgICAgICBpbml0aWFsaXplV2ViQXNzZW1ibHkobWVzc2FnZS53YXNtKS50aGVuKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBpbml0UnVudGltZShtZXNzYWdlKS50aGVuKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSwgZXJyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSwgZXJyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbml0LWVwXCI6IHtcbiAgICAgICAgICBjb25zdCB7IGVwTmFtZSwgZW52IH0gPSBtZXNzYWdlO1xuICAgICAgICAgIGluaXRFcChlbnYsIGVwTmFtZSkudGhlbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlLCBlcnIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY29weS1mcm9tXCI6IHtcbiAgICAgICAgICBjb25zdCB7IGJ1ZmZlciB9ID0gbWVzc2FnZTtcbiAgICAgICAgICBjb25zdCBidWZmZXJEYXRhID0gY29weUZyb21FeHRlcm5hbEJ1ZmZlcihidWZmZXIpO1xuICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSwgb3V0OiBidWZmZXJEYXRhIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjcmVhdGVcIjoge1xuICAgICAgICAgIGNvbnN0IHsgbW9kZWwsIG9wdGlvbnMgfSA9IG1lc3NhZ2U7XG4gICAgICAgICAgY3JlYXRlU2Vzc2lvbihtb2RlbCwgb3B0aW9ucykudGhlbihcbiAgICAgICAgICAgIChzZXNzaW9uTWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlLCBvdXQ6IHNlc3Npb25NZXRhZGF0YSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSwgZXJyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbGVhc2VcIjpcbiAgICAgICAgICByZWxlYXNlU2Vzc2lvbihtZXNzYWdlKTtcbiAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJydW5cIjoge1xuICAgICAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0cywgb3V0cHV0SW5kaWNlcywgb3B0aW9ucyB9ID0gbWVzc2FnZTtcbiAgICAgICAgICBydW4oc2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0cywgb3V0cHV0SW5kaWNlcywgbmV3IEFycmF5KG91dHB1dEluZGljZXMubGVuZ3RoKS5maWxsKG51bGwpLCBvcHRpb25zKS50aGVuKFxuICAgICAgICAgICAgKG91dHB1dHMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG91dHB1dHMuc29tZSgobykgPT4gb1szXSAhPT0gXCJjcHVcIikpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUsIGVycjogXCJQcm94eSBkb2VzIG5vdCBzdXBwb3J0IG5vbi1jcHUgdGVuc29yIGxvY2F0aW9uLlwiIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgeyB0eXBlLCBvdXQ6IG91dHB1dHMgfSxcbiAgICAgICAgICAgICAgICAgIGV4dHJhY3RUcmFuc2ZlcmFibGVCdWZmZXJzKFsuLi5pbnB1dHMsIC4uLm91dHB1dHNdKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSwgZXJyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImVuZC1wcm9maWxpbmdcIjpcbiAgICAgICAgICBlbmRQcm9maWxpbmcobWVzc2FnZSk7XG4gICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlLCBlcnIgfSk7XG4gICAgfVxuICB9O1xufSkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXdvZ0lDSjJaWEp6YVc5dUlqb2dNeXdLSUNBaWMyOTFjbU5sY3lJNklGc2libTlrWldwekxXbG5ibTl5WlRwbWN5SXNJQ0p1YjJSbGFuTXRhV2R1YjNKbE9uQmhkR2dpTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2WW1sdVpHbHVaeTl2Y25RdGRISmhhVzVwYm1jdGQyRnpiUzF6YVcxa0xtcHpJaXdnSW01dlpHVnFjeTFwWjI1dmNtVTZkMjl5YTJWeVgzUm9jbVZoWkhNaUxDQWlibTlrWldwekxXbG5ibTl5WlRwd1pYSm1YMmh2YjJ0eklpd2dJbTV2WkdWcWN5MXBaMjV2Y21VNmIzTWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZZbWx1WkdsdVp5OXZjblF0ZDJGemJTMTBhSEpsWVdSbFpDNXFjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlpYVc1a2FXNW5MMjl5ZEMxM1lYTnRMWFJvY21WaFpHVmtMbmR2Y210bGNpNXFjeUlzSUNKdWIyUmxhbk10YVdkdWIzSmxPbTV2WkdVNmNHRjBhQ0lzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzkzWVhOdExXWmhZM1J2Y25rdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZkMkZ6YlMxMWRHbHNjeTUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5eWRXNHRiM0IwYVc5dWN5NTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzl6WlhOemFXOXVMVzl3ZEdsdmJuTXVkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2ZDJGemJTMWpiMjF0YjI0dWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZkMkZ6YlMxMWRHbHNjeTFzYjJGa0xXWnBiR1V1ZEhNaUxDQWlibTlrWldwekxXbG5ibTl5WlRwdWIyUmxPbVp6TDNCeWIyMXBjMlZ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDNkaGMyMHRZMjl5WlMxcGJYQnNMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDNCeWIzaDVMWGR2Y210bGNpOXRZV2x1TG5SeklsMHNDaUFnSW5OdmRYSmpaWE5EYjI1MFpXNTBJam9nV3lKbGVIQnZjblFnWTI5dWMzUWdjbVZoWkVacGJHVWdQU0IxYm1SbFptbHVaV1E3Wlhod2IzSjBJR052Ym5OMElISmxZV1JHYVd4bFUzbHVZeUE5SUhWdVpHVm1hVzVsWkR0bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFVtVmhaRk4wY21WaGJTQTlJSFZ1WkdWbWFXNWxaRHNpTENBaVpYaHdiM0owSUdOdmJuTjBJR3B2YVc0Z1BTQjFibVJsWm1sdVpXUTdJaXdnSWx4dWRtRnlJRzl5ZEZkaGMyMGdQU0FvS0NrZ1BUNGdlMXh1SUNCMllYSWdYM05qY21sd2RFUnBjaUE5SUhSNWNHVnZaaUJrYjJOMWJXVnVkQ0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVlnWkc5amRXMWxiblF1WTNWeWNtVnVkRk5qY21sd2RDQS9JR1J2WTNWdFpXNTBMbU4xY25KbGJuUlRZM0pwY0hRdWMzSmpJRG9nZFc1a1pXWnBibVZrTzF4dUlDQnBaaUFvZEhsd1pXOW1JRjlmWm1sc1pXNWhiV1VnSVQwOUlDZDFibVJsWm1sdVpXUW5LU0JmYzJOeWFYQjBSR2x5SUQwZ1gzTmpjbWx3ZEVScGNpQjhmQ0JmWDJacGJHVnVZVzFsTzF4dUlDQnlaWFIxY200Z0tGeHVablZ1WTNScGIyNG9iVzlrZFd4bFFYSm5JRDBnZTMwcElIdGNibHh1ZG1GeUlHUTliVzlrZFd4bFFYSm5MR3NzYkR0a0xuSmxZV1I1UFc1bGR5QlFjbTl0YVhObEtDaGhMR0lwUFQ1N2F6MWhPMnc5WW4wcE8zWmhjaUJ5UFU5aWFtVmpkQzVoYzNOcFoyNG9lMzBzWkNrc2RqMWNJaTR2ZEdocGN5NXdjbTluY21GdFhDSXNZV0U5WENKdlltcGxZM1JjSWowOWRIbHdaVzltSUhkcGJtUnZkeXg0UFZ3aVpuVnVZM1JwYjI1Y0lqMDlkSGx3Wlc5bUlHbHRjRzl5ZEZOamNtbHdkSE1zWW1FOVhDSnZZbXBsWTNSY0lqMDlkSGx3Wlc5bUlIQnliMk5sYzNNbUpsd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQndjbTlqWlhOekxuWmxjbk5wYjI1ekppWmNJbk4wY21sdVoxd2lQVDEwZVhCbGIyWWdjSEp2WTJWemN5NTJaWEp6YVc5dWN5NXViMlJsTEhrOVhDSmNJaXhCTEVJc1F6dGNibWxtS0dKaEtYdDJZWElnWm5NOWNtVnhkV2x5WlNoY0ltWnpYQ0lwTEVROWNtVnhkV2x5WlNoY0luQmhkR2hjSWlrN2VUMTRQMFF1WkdseWJtRnRaU2g1S1N0Y0lpOWNJanBmWDJScGNtNWhiV1VyWENJdlhDSTdRVDBvWVN4aUtUMCtlMkU5WVM1emRHRnlkSE5YYVhSb0tGd2labWxzWlRvdkwxd2lLVDl1WlhjZ1ZWSk1LR0VwT2tRdWJtOXliV0ZzYVhwbEtHRXBPM0psZEhWeWJpQm1jeTV5WldGa1JtbHNaVk41Ym1Nb1lTeGlQM1p2YVdRZ01EcGNJblYwWmpoY0lpbDlPME05WVQwK2UyRTlRU2hoTENFd0tUdGhMbUoxWm1abGNueDhLR0U5Ym1WM0lGVnBiblE0UVhKeVlYa29ZU2twTzNKbGRIVnliaUJoZlR0Q1BTaGhMR0lzWXl4bVBTRXdLVDArZTJFOVlTNXpkR0Z5ZEhOWGFYUm9LRndpWm1sc1pUb3ZMMXdpS1Q5dVpYY2dWVkpNS0dFcE9rUXVibTl5YldGc2FYcGxLR0VwTzJaekxuSmxZV1JHYVd4bEtHRXNaajkyYjJsa0lEQTZYQ0oxZEdZNFhDSXNLR2NzYUNrOVBudG5QMk1vWnlrNllpaG1QMmd1WW5WbVptVnlPbWdwZlNsOU95RmtMblJvYVhOUWNtOW5jbUZ0SmlZeFBIQnliMk5sYzNNdVlYSm5kaTVzWlc1bmRHZ21KaWgyUFhCeWIyTmxjM011WVhKbmRsc3hYUzV5WlhCc1lXTmxLQzljWEZ4Y0wyY3NYQ0l2WENJcEtUdHdjbTlqWlhOekxtRnlaM1l1YzJ4cFkyVW9NaWs3WkM1cGJuTndaV04wUFNncFBUNWNJbHRGYlhOamNtbHdkR1Z1SUUxdlpIVnNaU0J2WW1wbFkzUmRYQ0o5Wld4elpTQnBaaWhoWVh4OFhHNTRLWGcvZVQxelpXeG1MbXh2WTJGMGFXOXVMbWh5WldZNlhDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JR1J2WTNWdFpXNTBKaVprYjJOMWJXVnVkQzVqZFhKeVpXNTBVMk55YVhCMEppWW9lVDFrYjJOMWJXVnVkQzVqZFhKeVpXNTBVMk55YVhCMExuTnlZeWtzWDNOamNtbHdkRVJwY2lZbUtIazlYM05qY21sd2RFUnBjaWtzTUNFOVBYa3VhVzVrWlhoUFppaGNJbUpzYjJJNlhDSXBQM2s5ZVM1emRXSnpkSElvTUN4NUxuSmxjR3hoWTJVb0wxcy9JMTB1S2k4c1hDSmNJaWt1YkdGemRFbHVaR1Y0VDJZb1hDSXZYQ0lwS3pFcE9uazlYQ0pjSWl4QlBXRTlQbnQyWVhJZ1lqMXVaWGNnV0UxTVNIUjBjRkpsY1hWbGMzUTdZaTV2Y0dWdUtGd2lSMFZVWENJc1lTd2hNU2s3WWk1elpXNWtLRzUxYkd3cE8zSmxkSFZ5YmlCaUxuSmxjM0J2Ym5ObFZHVjRkSDBzZUNZbUtFTTlZVDArZTNaaGNpQmlQVzVsZHlCWVRVeElkSFJ3VW1WeGRXVnpkRHRpTG05d1pXNG9YQ0pIUlZSY0lpeGhMQ0V4S1R0aUxuSmxjM0J2Ym5ObFZIbHdaVDFjSW1GeWNtRjVZblZtWm1WeVhDSTdZaTV6Wlc1a0tHNTFiR3dwTzNKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTaGlMbkpsYzNCdmJuTmxLWDBwTEVJOUtHRXNZaXhqS1QwK2UzWmhjaUJtUFc1bGR5QllUVXhJZEhSd1VtVnhkV1Z6ZER0bUxtOXdaVzRvWENKSFJWUmNJaXhoTENFd0tUdG1MbkpsYzNCdmJuTmxWSGx3WlQxY2Jsd2lZWEp5WVhsaWRXWm1aWEpjSWp0bUxtOXViRzloWkQwb0tUMCtlekl3TUQwOVppNXpkR0YwZFhOOGZEQTlQV1l1YzNSaGRIVnpKaVptTG5KbGMzQnZibk5sUDJJb1ppNXlaWE53YjI1elpTazZZeWdwZlR0bUxtOXVaWEp5YjNJOVl6dG1Mbk5sYm1Rb2JuVnNiQ2w5TzNaaGNpQmpZVDFrTG5CeWFXNTBmSHhqYjI1emIyeGxMbXh2Wnk1aWFXNWtLR052Ym5OdmJHVXBMRVU5WkM1d2NtbHVkRVZ5Y254OFkyOXVjMjlzWlM1bGNuSnZjaTVpYVc1a0tHTnZibk52YkdVcE8wOWlhbVZqZEM1aGMzTnBaMjRvWkN4eUtUdHlQVzUxYkd3N1pDNTBhR2x6VUhKdlozSmhiU1ltS0hZOVpDNTBhR2x6VUhKdlozSmhiU2s3ZG1GeUlFWTdaQzUzWVhOdFFtbHVZWEo1SmlZb1JqMWtMbmRoYzIxQ2FXNWhjbmtwTzNaaGNpQnViMFY0YVhSU2RXNTBhVzFsUFdRdWJtOUZlR2wwVW5WdWRHbHRaWHg4SVRBN1hDSnZZbXBsWTNSY0lpRTlkSGx3Wlc5bUlGZGxZa0Z6YzJWdFlteDVKaVpIS0Z3aWJtOGdibUYwYVhabElIZGhjMjBnYzNWd2NHOXlkQ0JrWlhSbFkzUmxaRndpS1R0MllYSWdTQ3hKTEdSaFBTRXhMRW9zU3l4TUxFMDdYRzVtZFc1amRHbHZiaUJsWVNncGUzWmhjaUJoUFVndVluVm1abVZ5TzJRdVNFVkJVRGc5U2oxdVpYY2dTVzUwT0VGeWNtRjVLR0VwTzJRdVNFVkJVREUyUFc1bGR5QkpiblF4TmtGeWNtRjVLR0VwTzJRdVNFVkJVRE15UFV3OWJtVjNJRWx1ZERNeVFYSnlZWGtvWVNrN1pDNUlSVUZRVlRnOVN6MXVaWGNnVldsdWREaEJjbkpoZVNoaEtUdGtMa2hGUVZCVk1UWTlibVYzSUZWcGJuUXhOa0Z5Y21GNUtHRXBPMlF1U0VWQlVGVXpNajFOUFc1bGR5QlZhVzUwTXpKQmNuSmhlU2hoS1R0a0xraEZRVkJHTXpJOWJtVjNJRVpzYjJGME16SkJjbkpoZVNoaEtUdGtMa2hGUVZCR05qUTlibVYzSUVac2IyRjBOalJCY25KaGVTaGhLWDEyWVhJZ1ptRTlXMTBzYUdFOVcxMHNhV0U5VzEwN1puVnVZM1JwYjI0Z2FtRW9LWHQyWVhJZ1lUMWtMbkJ5WlZKMWJpNXphR2xtZENncE8yWmhMblZ1YzJocFpuUW9ZU2w5ZG1GeUlFNDlNQ3hQUFc1MWJHd3NVRDF1ZFd4c08xeHVablZ1WTNScGIyNGdSeWhoS1h0cFppaGtMbTl1UVdKdmNuUXBaQzV2YmtGaWIzSjBLR0VwTzJFOVhDSkJZbTl5ZEdWa0tGd2lLMkVyWENJcFhDSTdSU2hoS1R0a1lUMGhNRHRoUFc1bGR5QlhaV0pCYzNObGJXSnNlUzVTZFc1MGFXMWxSWEp5YjNJb1lTdGNJaTRnUW5WcGJHUWdkMmwwYUNBdGMwRlRVMFZTVkVsUFRsTWdabTl5SUcxdmNtVWdhVzVtYnk1Y0lpazdiQ2hoS1R0MGFISnZkeUJoTzMxbWRXNWpkR2x2YmlCcllTaGhLWHR5WlhSMWNtNGdZUzV6ZEdGeWRITlhhWFJvS0Z3aVpHRjBZVHBoY0hCc2FXTmhkR2x2Ymk5dlkzUmxkQzF6ZEhKbFlXMDdZbUZ6WlRZMExGd2lLWDEyWVhJZ1VUdFJQVndpYjNKMExYUnlZV2x1YVc1bkxYZGhjMjB0YzJsdFpDNTNZWE50WENJN2FXWW9JV3RoS0ZFcEtYdDJZWElnYkdFOVVUdFJQV1F1Ykc5allYUmxSbWxzWlQ5a0xteHZZMkYwWlVacGJHVW9iR0VzZVNrNmVTdHNZWDFtZFc1amRHbHZiaUJ0WVNoaEtYdHBaaWhoUFQxUkppWkdLWEpsZEhWeWJpQnVaWGNnVldsdWREaEJjbkpoZVNoR0tUdHBaaWhES1hKbGRIVnliaUJES0dFcE8zUm9jbTkzWENKaWIzUm9JR0Z6ZVc1aklHRnVaQ0J6ZVc1aklHWmxkR05vYVc1bklHOW1JSFJvWlNCM1lYTnRJR1poYVd4bFpGd2lPMzFjYm1aMWJtTjBhVzl1SUc1aEtHRXBlMmxtS0NGR0ppWW9ZV0Y4ZkhncEtYdHBaaWhjSW1aMWJtTjBhVzl1WENJOVBYUjVjR1Z2WmlCbVpYUmphQ1ltSVdFdWMzUmhjblJ6VjJsMGFDaGNJbVpwYkdVNkx5OWNJaWtwY21WMGRYSnVJR1psZEdOb0tHRXNlMk55WldSbGJuUnBZV3h6T2x3aWMyRnRaUzF2Y21sbmFXNWNJbjBwTG5Sb1pXNG9ZajArZTJsbUtDRmlMbTlyS1hSb2NtOTNYQ0ptWVdsc1pXUWdkRzhnYkc5aFpDQjNZWE50SUdKcGJtRnllU0JtYVd4bElHRjBJQ2RjSWl0aEsxd2lKMXdpTzNKbGRIVnliaUJpTG1GeWNtRjVRblZtWm1WeUtDbDlLUzVqWVhSamFDZ29LVDArYldFb1lTa3BPMmxtS0VJcGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaGlMR01wUFQ1N1FpaGhMR1k5UG1Jb2JtVjNJRlZwYm5RNFFYSnlZWGtvWmlrcExHTXBmU2w5Y21WMGRYSnVJRkJ5YjIxcGMyVXVjbVZ6YjJ4MlpTZ3BMblJvWlc0b0tDazlQbTFoS0dFcEtYMW1kVzVqZEdsdmJpQnZZU2hoTEdJc1l5bDdjbVYwZFhKdUlHNWhLR0VwTG5Sb1pXNG9aajArVjJWaVFYTnpaVzFpYkhrdWFXNXpkR0Z1ZEdsaGRHVW9aaXhpS1NrdWRHaGxiaWhtUFQ1bUtTNTBhR1Z1S0dNc1pqMCtlMFVvWENKbVlXbHNaV1FnZEc4Z1lYTjVibU5vY205dWIzVnpiSGtnY0hKbGNHRnlaU0IzWVhOdE9pQmNJaXRtS1R0SEtHWXBmU2w5WEc1bWRXNWpkR2x2YmlCd1lTaGhMR0lwZTNaaGNpQmpQVkU3Y21WMGRYSnVJRVo4ZkZ3aVpuVnVZM1JwYjI1Y0lpRTlkSGx3Wlc5bUlGZGxZa0Z6YzJWdFlteDVMbWx1YzNSaGJuUnBZWFJsVTNSeVpXRnRhVzVuZkh4cllTaGpLWHg4WXk1emRHRnlkSE5YYVhSb0tGd2labWxzWlRvdkwxd2lLWHg4WW1GOGZGd2lablZ1WTNScGIyNWNJaUU5ZEhsd1pXOW1JR1psZEdOb1AyOWhLR01zWVN4aUtUcG1aWFJqYUNoakxIdGpjbVZrWlc1MGFXRnNjenBjSW5OaGJXVXRiM0pwWjJsdVhDSjlLUzUwYUdWdUtHWTlQbGRsWWtGemMyVnRZbXg1TG1sdWMzUmhiblJwWVhSbFUzUnlaV0Z0YVc1bktHWXNZU2t1ZEdobGJpaGlMR1oxYm1OMGFXOXVLR2NwZTBVb1hDSjNZWE50SUhOMGNtVmhiV2x1WnlCamIyMXdhV3hsSUdaaGFXeGxaRG9nWENJclp5azdSU2hjSW1aaGJHeHBibWNnWW1GamF5QjBieUJCY25KaGVVSjFabVpsY2lCcGJuTjBZVzUwYVdGMGFXOXVYQ0lwTzNKbGRIVnliaUJ2WVNoakxHRXNZaWw5S1NsOWRtRnlJRklzVXoxaFBUNTdabTl5S0Rzd1BHRXViR1Z1WjNSb095bGhMbk5vYVdaMEtDa29aQ2w5TzF4dVpuVnVZM1JwYjI0Z2NXRW9ZU2w3ZEdocGN5NUlZVDFoTFRJME8zUm9hWE11VEdFOVpuVnVZM1JwYjI0b1lpbDdUVnQwYUdsekxraGhLelErUGpJK1BqNHdYVDFpZlR0MGFHbHpMa3RoUFdaMWJtTjBhVzl1S0dJcGUwMWJkR2hwY3k1SVlTczRQajR5UGo0K01GMDlZbjA3ZEdocGN5NUpZVDFtZFc1amRHbHZiaWhpTEdNcGUzUm9hWE11U21Fb0tUdDBhR2x6TGt4aEtHSXBPM1JvYVhNdVMyRW9ZeWw5TzNSb2FYTXVTbUU5Wm5WdVkzUnBiMjRvS1h0TlczUm9hWE11U0dFck1UWStQakkrUGo0d1hUMHdmWDFjYm5aaGNpQnlZVDB3TEhOaFBUQXNkR0U5WENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlGUmxlSFJFWldOdlpHVnlQMjVsZHlCVVpYaDBSR1ZqYjJSbGNpaGNJblYwWmpoY0lpazZkbTlwWkNBd0xIVmhQU2hoTEdJc1l5azlQbnRpUGo0K1BUQTdkbUZ5SUdZOVlpdGpPMlp2Y2loalBXSTdZVnRqWFNZbUlTaGpQajFtS1RzcEt5dGpPMmxtS0RFMlBHTXRZaVltWVM1aWRXWm1aWEltSm5SaEtYSmxkSFZ5YmlCMFlTNWtaV052WkdVb1lTNXpkV0poY25KaGVTaGlMR01wS1R0bWIzSW9aajFjSWx3aU8ySThZenNwZTNaaGNpQm5QV0ZiWWlzclhUdHBaaWhuSmpFeU9DbDdkbUZ5SUdnOVlWdGlLeXRkSmpZek8ybG1LREU1TWowOUtHY21NakkwS1NsbUt6MVRkSEpwYm1jdVpuSnZiVU5vWVhKRGIyUmxLQ2huSmpNeEtUdzhObnhvS1R0bGJITmxlM1poY2lCdFBXRmJZaXNyWFNZMk16dG5QVEl5TkQwOUtHY21NalF3S1Q4b1p5WXhOU2s4UERFeWZHZzhQRFo4YlRvb1p5WTNLVHc4TVRoOGFEdzhNVEo4YlR3OE5ueGhXMklySzEwbU5qTTdOalUxTXpZK1p6OW1LejFUZEhKcGJtY3Vabkp2YlVOb1lYSkRiMlJsS0djcE9paG5MVDAyTlRVek5peG1LejFUZEhKcGJtY3Vabkp2YlVOb1lYSkRiMlJsS0RVMU1qazJmR2MrUGpFd0xEVTJNekl3ZkdjbU1UQXlNeWtwZlgxbGJITmxJR1lyUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1p5bDljbVYwZFhKdUlHWjlMRnh1VkQwb1lTeGlLVDArS0dFK1BqNDlNQ2svZFdFb1N5eGhMR0lwT2x3aVhDSXNWVDFoUFQ1N1ptOXlLSFpoY2lCaVBUQXNZejB3TzJNOFlTNXNaVzVuZEdnN0t5dGpLWHQyWVhJZ1pqMWhMbU5vWVhKRGIyUmxRWFFvWXlrN01USTNQajFtUDJJckt6b3lNRFEzUGoxbVAySXJQVEk2TlRVeU9UWThQV1ltSmpVM016UXpQajFtUHloaUt6MDBMQ3NyWXlrNllpczlNMzF5WlhSMWNtNGdZbjBzVmowb1lTeGlMR01zWmlrOVBudGpQajQrUFRBN2FXWW9JU2d3UEdZcEtYSmxkSFZ5YmlBd08zWmhjaUJuUFdNN1pqMWpLMll0TVR0bWIzSW9kbUZ5SUdnOU1EdG9QR0V1YkdWdVozUm9PeXNyYUNsN2RtRnlJRzA5WVM1amFHRnlRMjlrWlVGMEtHZ3BPMmxtS0RVMU1qazJQRDF0SmlZMU56TTBNejQ5YlNsN2RtRnlJSEU5WVM1amFHRnlRMjlrWlVGMEtDc3JhQ2s3YlQwMk5UVXpOaXNvS0cwbU1UQXlNeWs4UERFd0tYeHhKakV3TWpOOWFXWW9NVEkzUGoxdEtYdHBaaWhqUGoxbUtXSnlaV0ZyTzJKYll5c3JQajQrTUYwOWJYMWxiSE5sZTJsbUtESXdORGMrUFcwcGUybG1LR01yTVQ0OVppbGljbVZoYXp0aVcyTXJLejQrUGpCZFBURTVNbnh0UGo0MmZXVnNjMlY3YVdZb05qVTFNelUrUFcwcGUybG1LR01yTWo0OVppbGljbVZoYXp0aVcyTXJLejQrUGpCZFBUSXlOSHh0UGo0eE1uMWxiSE5sZTJsbUtHTXJNejQ5WEc1bUtXSnlaV0ZyTzJKYll5c3JQajQrTUYwOU1qUXdmRzArUGpFNE8ySmJZeXNyUGo0K01GMDlNVEk0ZkcwK1BqRXlKall6ZldKYll5c3JQajQrTUYwOU1USTRmRzArUGpZbU5qTjlZbHRqS3lzK1BqNHdYVDB4TWpoOGJTWTJNMzE5WWx0alBqNCtNRjA5TUR0eVpYUjFjbTRnWXkxbmZTeFhQV0U5UGpBOVBUMWhKVFFtSmlnd0lUMDlZU1V4TURCOGZEQTlQVDFoSlRRd01Da3NkbUU5V3pBc016RXNOakFzT1RFc01USXhMREUxTWl3eE9ESXNNakV6TERJME5Dd3lOelFzTXpBMUxETXpOVjBzZDJFOVd6QXNNekVzTlRrc09UQXNNVEl3TERFMU1Td3hPREVzTWpFeUxESTBNeXd5TnpNc016QTBMRE16TkYwc1FtRTlZVDArZTNaaGNpQmlQVlVvWVNrck1TeGpQVUZoS0dJcE8yTW1KbFlvWVN4TExHTXNZaWs3Y21WMGRYSnVJR045TEZnOWUzMHNRMkU5S0NrOVBudHBaaWdoV1NsN2RtRnlJR0U5ZTFWVFJWSTZYQ0ozWldKZmRYTmxjbHdpTEV4UFIwNUJUVVU2WENKM1pXSmZkWE5sY2x3aUxGQkJWRWc2WENJdlhDSXNVRmRFT2x3aUwxd2lMRWhQVFVVNlhDSXZhRzl0WlM5M1pXSmZkWE5sY2x3aUxFeEJUa2M2S0Z3aWIySnFaV04wWENJOVBYUjVjR1Z2WmlCdVlYWnBaMkYwYjNJbUptNWhkbWxuWVhSdmNpNXNZVzVuZFdGblpYTW1KbTVoZG1sbllYUnZjaTVzWVc1bmRXRm5aWE5iTUYxOGZGd2lRMXdpS1M1eVpYQnNZV05sS0Z3aUxWd2lMRnh1WENKZlhDSXBLMXdpTGxWVVJpMDRYQ0lzWHpwMmZIeGNJaTR2ZEdocGN5NXdjbTluY21GdFhDSjlMR0k3Wm05eUtHSWdhVzRnV0NsMmIybGtJREE5UFQxWVcySmRQMlJsYkdWMFpTQmhXMkpkT21GYllsMDlXRnRpWFR0MllYSWdZejFiWFR0bWIzSW9ZaUJwYmlCaEtXTXVjSFZ6YUNoZ0pIdGlmVDBrZTJGYllsMTlZQ2s3V1QxamZYSmxkSFZ5YmlCWmZTeFpMRVJoUFZ0dWRXeHNMRnRkTEZ0ZFhTeEZZVDFiTXpFc01qa3NNekVzTXpBc016RXNNekFzTXpFc016RXNNekFzTXpFc016QXNNekZkTEVaaFBWc3pNU3d5T0N3ek1Td3pNQ3d6TVN3ek1Dd3pNU3d6TVN3ek1Dd3pNU3d6TUN3ek1WMDdablZ1WTNScGIyNGdSMkVvWVNsN2RtRnlJR0k5UVhKeVlYa29WU2hoS1NzeEtUdFdLR0VzWWl3d0xHSXViR1Z1WjNSb0tUdHlaWFIxY200Z1luMWNibVoxYm1OMGFXOXVJRWhoS0dFc1lpeGpMR1lwZTJaMWJtTjBhVzl1SUdjb1pTeHVMSEFwZTJadmNpaGxQVndpYm5WdFltVnlYQ0k5UFhSNWNHVnZaaUJsUDJVdWRHOVRkSEpwYm1jb0tUcGxmSHhjSWx3aU8yVXViR1Z1WjNSb1BHNDdLV1U5Y0Zzd1hTdGxPM0psZEhWeWJpQmxmV1oxYm1OMGFXOXVJR2dvWlN4dUtYdHlaWFIxY200Z1p5aGxMRzRzWENJd1hDSXBmV1oxYm1OMGFXOXVJRzBvWlN4dUtYdG1kVzVqZEdsdmJpQndLSGhoS1h0eVpYUjFjbTRnTUQ1NFlUOHRNVG93UEhoaFB6RTZNSDEyWVhJZ2Vqc3dQVDA5S0hvOWNDaGxMbWRsZEVaMWJHeFpaV0Z5S0NrdGJpNW5aWFJHZFd4c1dXVmhjaWdwS1NrbUpqQTlQVDBvZWoxd0tHVXVaMlYwVFc5dWRHZ29LUzF1TG1kbGRFMXZiblJvS0NrcEtTWW1LSG85Y0NobExtZGxkRVJoZEdVb0tTMXVMbWRsZEVSaGRHVW9LU2twTzNKbGRIVnliaUI2ZldaMWJtTjBhVzl1SUhFb1pTbDdjM2RwZEdOb0tHVXVaMlYwUkdGNUtDa3BlMk5oYzJVZ01EcHlaWFIxY200Z2JtVjNJRVJoZEdVb1pTNW5aWFJHZFd4c1dXVmhjaWdwTFRFc01URXNNamtwTzJOaGMyVWdNVHB5WlhSMWNtNGdaVHRqWVhObElESTZjbVYwZFhKdUlHNWxkeUJFWVhSbEtHVXVaMlYwUm5Wc2JGbGxZWElvS1N3d0xETXBPMk5oYzJVZ016cHlaWFIxY200Z2JtVjNJRVJoZEdVb1pTNW5aWFJHZFd4c1dXVmhjaWdwTEZ4dU1Dd3lLVHRqWVhObElEUTZjbVYwZFhKdUlHNWxkeUJFWVhSbEtHVXVaMlYwUm5Wc2JGbGxZWElvS1N3d0xERXBPMk5oYzJVZ05UcHlaWFIxY200Z2JtVjNJRVJoZEdVb1pTNW5aWFJHZFd4c1dXVmhjaWdwTFRFc01URXNNekVwTzJOaGMyVWdOanB5WlhSMWNtNGdibVYzSUVSaGRHVW9aUzVuWlhSR2RXeHNXV1ZoY2lncExURXNNVEVzTXpBcGZYMW1kVzVqZEdsdmJpQjNLR1VwZTNaaGNpQnVQV1V1UTJFN1ptOXlLR1U5Ym1WM0lFUmhkR1VvS0c1bGR5QkVZWFJsS0dVdVJHRXJNVGt3TUN3d0xERXBLUzVuWlhSVWFXMWxLQ2twT3pBOGJqc3BlM1poY2lCd1BXVXVaMlYwVFc5dWRHZ29LU3g2UFNoWEtHVXVaMlYwUm5Wc2JGbGxZWElvS1NrL1JXRTZSbUVwVzNCZE8ybG1LRzQrZWkxbExtZGxkRVJoZEdVb0tTbHVMVDE2TFdVdVoyVjBSR0YwWlNncEt6RXNaUzV6WlhSRVlYUmxLREVwTERFeFBuQS9aUzV6WlhSTmIyNTBhQ2h3S3pFcE9paGxMbk5sZEUxdmJuUm9LREFwTEdVdWMyVjBSblZzYkZsbFlYSW9aUzVuWlhSR2RXeHNXV1ZoY2lncEt6RXBLVHRsYkhObGUyVXVjMlYwUkdGMFpTaGxMbWRsZEVSaGRHVW9LU3R1S1R0aWNtVmhhMzE5Y0QxdVpYY2dSR0YwWlNobExtZGxkRVoxYkd4WlpXRnlLQ2tyTVN3d0xEUXBPMjQ5Y1NodVpYY2dSR0YwWlNobExtZGxkRVoxYkd4WlpXRnlLQ2tzWEc0d0xEUXBLVHR3UFhFb2NDazdjbVYwZFhKdUlEQStQVzBvYml4bEtUOHdQajF0S0hBc1pTay9aUzVuWlhSR2RXeHNXV1ZoY2lncEt6RTZaUzVuWlhSR2RXeHNXV1ZoY2lncE9tVXVaMlYwUm5Wc2JGbGxZWElvS1MweGZXRStQajQ5TUR0aVBqNCtQVEE3WXo0K1BqMHdPMlkrUGo0OU1EdDJZWElnZEQxTVcyWXJOREErUGpJK1BqNHdYVHRtUFh0UFlUcE1XMlkrUGpJK1BqNHdYU3hPWVRwTVcyWXJORDQrTWo0K1BqQmRMRVZoT2t4YlppczRQajR5UGo0K01GMHNSMkU2VEZ0bUt6RXlQajR5UGo0K01GMHNSbUU2VEZ0bUt6RTJQajR5UGo0K01GMHNSR0U2VEZ0bUt6SXdQajR5UGo0K01GMHNlR0U2VEZ0bUt6STBQajR5UGo0K01GMHNRMkU2VEZ0bUt6STRQajR5UGo0K01GMHNVV0U2VEZ0bUt6TXlQajR5UGo0K01GMHNUV0U2VEZ0bUt6TTJQajR5UGo0K01GMHNVR0U2ZEQ5VUtIUXBPbHdpWENKOU8yTTlWQ2hqS1R0MFBYdGNJaVZqWENJNlhDSWxZU0FsWWlBbFpDQWxTRG9sVFRvbFV5QWxXVndpTEZ3aUpVUmNJanBjSWlWdEx5VmtMeVY1WENJc1hDSWxSbHdpT2x3aUpWa3RKVzB0SldSY0lpeGNJaVZvWENJNlhDSWxZbHdpTEZ3aUpYSmNJanBjSWlWSk9pVk5PaVZUSUNWd1hDSXNYQ0lsVWx3aU9sd2lKVWc2SlUxY0lpeGNJaVZVWENJNlhDSWxTRG9sVFRvbFUxd2lMRndpSlhoY0lqcGNJaVZ0THlWa0x5VjVYQ0lzWENJbFdGd2lPbHdpSlVnNkpVMDZKVk5jSWl4Y0lpVkZZMXdpT2x3aUpXTmNJaXhjYmx3aUpVVkRYQ0k2WENJbFExd2lMRndpSlVWNFhDSTZYQ0lsYlM4bFpDOGxlVndpTEZ3aUpVVllYQ0k2WENJbFNEb2xUVG9sVTF3aUxGd2lKVVY1WENJNlhDSWxlVndpTEZ3aUpVVlpYQ0k2WENJbFdWd2lMRndpSlU5a1hDSTZYQ0lsWkZ3aUxGd2lKVTlsWENJNlhDSWxaVndpTEZ3aUpVOUlYQ0k2WENJbFNGd2lMRndpSlU5SlhDSTZYQ0lsU1Z3aUxGd2lKVTl0WENJNlhDSWxiVndpTEZ3aUpVOU5YQ0k2WENJbFRWd2lMRndpSlU5VFhDSTZYQ0lsVTF3aUxGd2lKVTkxWENJNlhDSWxkVndpTEZ3aUpVOVZYQ0k2WENJbFZWd2lMRndpSlU5V1hDSTZYQ0lsVmx3aUxGd2lKVTkzWENJNlhDSWxkMXdpTEZ3aUpVOVhYQ0k2WENJbFYxd2lMRndpSlU5NVhDSTZYQ0lsZVZ3aWZUdG1iM0lvZG1GeUlIVWdhVzRnZENsalBXTXVjbVZ3YkdGalpTaHVaWGNnVW1WblJYaHdLSFVzWENKblhDSXBMSFJiZFYwcE8zWmhjaUI1WVQxY0lsTjFibVJoZVNCTmIyNWtZWGtnVkhWbGMyUmhlU0JYWldSdVpYTmtZWGtnVkdoMWNuTmtZWGtnUm5KcFpHRjVJRk5oZEhWeVpHRjVYQ0l1YzNCc2FYUW9YQ0lnWENJcExIcGhQVndpU21GdWRXRnllU0JHWldKeWRXRnllU0JOWVhKamFDQkJjSEpwYkNCTllYa2dTblZ1WlNCS2RXeDVJRUYxWjNWemRDQlRaWEIwWlcxaVpYSWdUMk4wYjJKbGNpQk9iM1psYldKbGNpQkVaV05sYldKbGNsd2lMbk53YkdsMEtGd2lJRndpS1R0MFBYdGNJaVZoWENJNlpUMCtlV0ZiWlM1NFlWMHVjM1ZpYzNSeWFXNW5LREFzTXlrc1hDSWxRVndpT21VOVBubGhXMlV1ZUdGZExGd2lKV0pjSWpwbFBUNWNibnBoVzJVdVJtRmRMbk4xWW5OMGNtbHVaeWd3TERNcExGd2lKVUpjSWpwbFBUNTZZVnRsTGtaaFhTeGNJaVZEWENJNlpUMCthQ2dvWlM1RVlTc3hPVEF3S1M4eE1EQjhNQ3d5S1N4Y0lpVmtYQ0k2WlQwK2FDaGxMa2RoTERJcExGd2lKV1ZjSWpwbFBUNW5LR1V1UjJFc01peGNJaUJjSWlrc1hDSWxaMXdpT21VOVBuY29aU2t1ZEc5VGRISnBibWNvS1M1emRXSnpkSEpwYm1jb01pa3NYQ0lsUjF3aU9tVTlQbmNvWlNrc1hDSWxTRndpT21VOVBtZ29aUzVGWVN3eUtTeGNJaVZKWENJNlpUMCtlMlU5WlM1RllUc3dQVDFsUDJVOU1USTZNVEk4WlNZbUtHVXRQVEV5S1R0eVpYUjFjbTRnYUNobExESXBmU3hjSWlWcVhDSTZaVDArZTJadmNpaDJZWElnYmowd0xIQTlNRHR3UEQxbExrWmhMVEU3YmlzOUtGY29aUzVFWVNzeE9UQXdLVDlGWVRwR1lTbGJjQ3NyWFNrN2NtVjBkWEp1SUdnb1pTNUhZU3R1TERNcGZTeGNJaVZ0WENJNlpUMCthQ2hsTGtaaEt6RXNNaWtzWENJbFRWd2lPbVU5UG1nb1pTNU9ZU3d5S1N4Y0lpVnVYQ0k2S0NrOVBsd2lYRnh1WENJc1hDSWxjRndpT21VOVBqQThQV1V1UldFbUpqRXlQbVV1UldFL1hDSkJUVndpT2x3aVVFMWNJaXhjSWlWVFhDSTZaVDArYUNobExrOWhMRElwTEZ3aUpYUmNJam9vS1QwK1hDSmNYSFJjSWl4Y0lpVjFYQ0k2WlQwK1pTNTRZWHg4Tnl4Y0lpVlZYQ0k2WlQwK2FDaE5ZWFJvTG1ac2IyOXlLQ2hsTGtOaEt6Y3RaUzU0WVNrdk55a3NNaWtzWENJbFZsd2lPbVU5UGx4dWUzWmhjaUJ1UFUxaGRHZ3VabXh2YjNJb0tHVXVRMkVyTnkwb1pTNTRZU3MyS1NVM0tTODNLVHN5UGowb1pTNTRZU3N6TnpFdFpTNURZUzB5S1NVM0ppWnVLeXM3YVdZb2JpazFNejA5YmlZbUtIQTlLR1V1ZUdFck16Y3hMV1V1UTJFcEpUY3NORDA5Y0h4OE16MDljQ1ltVnlobExrUmhLWHg4S0c0OU1Ta3BPMlZzYzJWN2JqMDFNanQyWVhJZ2NEMG9aUzU0WVNzM0xXVXVRMkV0TVNrbE56c29ORDA5Y0h4OE5UMDljQ1ltVnlobExrUmhKVFF3TUMweEtTa21KbTRySzMxeVpYUjFjbTRnYUNodUxESXBmU3hjSWlWM1hDSTZaVDArWlM1NFlTeGNJaVZYWENJNlpUMCthQ2hOWVhSb0xtWnNiMjl5S0NobExrTmhLemN0S0dVdWVHRXJOaWtsTnlrdk55a3NNaWtzWENJbGVWd2lPbVU5UGlobExrUmhLekU1TURBcExuUnZVM1J5YVc1bktDa3VjM1ZpYzNSeWFXNW5LRElwTEZ3aUpWbGNJanBsUFQ1bExrUmhLekU1TURBc1hDSWxlbHdpT21VOVBudGxQV1V1VFdFN2RtRnlJRzQ5TUR3OVpUdGxQVTFoZEdndVlXSnpLR1VwTHpZd08zSmxkSFZ5YmlodVAxd2lLMXdpT2x3aUxWd2lLU3RUZEhKcGJtY29YQ0l3TURBd1hDSXJLR1V2TmpBcU1UQXdLMlVsTmpBcEtTNXpiR2xqWlNndE5DbDlMRndpSlZwY0lqcGxQVDVsTGxCaExGd2lKU1ZjSWpvb0tUMCtYQ0lsWENKOU8yTTlZeTV5WlhCc1lXTmxLQzhsSlM5bkxGd2lYRng0TURCY1hIZ3dNRndpS1R0bWIzSW9kU0JwYmlCMEtXTXVhVzVqYkhWa1pYTW9kU2ttSmx4dUtHTTlZeTV5WlhCc1lXTmxLRzVsZHlCU1pXZEZlSEFvZFN4Y0ltZGNJaWtzZEZ0MVhTaG1LU2twTzJNOVl5NXlaWEJzWVdObEtDOWNYREJjWERBdlp5eGNJaVZjSWlrN2RUMUhZU2hqS1R0cFppaDFMbXhsYm1kMGFENWlLWEpsZEhWeWJpQXdPMG91YzJWMEtIVXNZVDQrUGpBcE8zSmxkSFZ5YmlCMUxteGxibWQwYUMweGZWeHVkbUZ5SUVwaFBYdGhPbVoxYm1OMGFXOXVLR0VzWWl4aktYdGhQajQrUFRBN0tHNWxkeUJ4WVNoaEtTa3VTV0VvWWo0K1BqQXNZejQrUGpBcE8zSmhQV0U3YzJFckt6dDBhSEp2ZHlCeVlUdDlMR1U2Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnTUgwc1NEcG1kVzVqZEdsdmJpZ3BlMzBzZURwbWRXNWpkR2x2YmlncGUzMHNlanBtZFc1amRHbHZiaWdwZTMwc2F6cG1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQXdmU3hHT21aMWJtTjBhVzl1S0NsN2ZTeENPbVoxYm1OMGFXOXVLQ2w3ZlN4Rk9tWjFibU4wYVc5dUtDbDdmU3huT21aMWJtTjBhVzl1S0NsN2ZTeDVPbVoxYm1OMGFXOXVLQ2w3ZlN4Mk9tWjFibU4wYVc5dUtDbDdmU3hIT21aMWJtTjBhVzl1S0NsN2ZTeDNPbVoxYm1OMGFXOXVLQ2w3ZlN4c09pZ3BQVDRoTUN4dk9tWjFibU4wYVc5dUtHRXNZaXhqS1h0aFBXSXJNakE1TnpFMU1qNCtQakE4TkRFNU5ETXdOUzBoSVdFL0tHRStQajR3S1NzME1qazBPVFkzTWprMkttSTZUbUZPTzJNK1BqNDlNRHRoUFc1bGR5QkVZWFJsS0RGRk15cGhLVHRNVzJNK1BqSStQajR3WFQxaExtZGxkRlZVUTFObFkyOXVaSE1vS1R0TVcyTXJORDQrTWo0K1BqQmRQV0V1WjJWMFZWUkRUV2x1ZFhSbGN5Z3BPMHhiWXlzNFBqNHlQajQrTUYwOVlTNW5aWFJWVkVOSWIzVnljeWdwTzB4Yll5c3hNajQrTWo0K1BseHVNRjA5WVM1blpYUlZWRU5FWVhSbEtDazdURnRqS3pFMlBqNHlQajQrTUYwOVlTNW5aWFJWVkVOTmIyNTBhQ2dwTzB4Yll5c3lNRDQrTWo0K1BqQmRQV0V1WjJWMFZWUkRSblZzYkZsbFlYSW9LUzB4T1RBd08weGJZeXN5TkQ0K01qNCtQakJkUFdFdVoyVjBWVlJEUkdGNUtDazdURnRqS3pJNFBqNHlQajQrTUYwOUtHRXVaMlYwVkdsdFpTZ3BMVVJoZEdVdVZWUkRLR0V1WjJWMFZWUkRSblZzYkZsbFlYSW9LU3d3TERFc01Dd3dMREFzTUNrcEx6ZzJORVUxZkRCOUxIQTZablZ1WTNScGIyNG9ZU3hpTEdNcGUyRTlZaXN5TURrM01UVXlQajQrTUR3ME1UazBNekExTFNFaFlUOG9ZVDQrUGpBcEt6UXlPVFE1TmpjeU9UWXFZanBPWVU0N1l6NCtQajB3TzJFOWJtVjNJRVJoZEdVb01VVXpLbUVwTzB4Yll6NCtNajQrUGpCZFBXRXVaMlYwVTJWamIyNWtjeWdwTzB4Yll5czBQajR5UGo0K01GMDlZUzVuWlhSTmFXNTFkR1Z6S0NrN1RGdGpLemcrUGpJK1BqNHdYVDFoTG1kbGRFaHZkWEp6S0NrN1RGdGpLekV5UGo0eVBqNCtNRjA5WVM1blpYUkVZWFJsS0NrN1RGdGpLekUyUGo0eVBqNCtNRjA5WVM1blpYUk5iMjUwYUNncE8weGJZeXN5TUQ0K01qNCtQakJkUFdFdVoyVjBSblZzYkZsbFlYSW9LUzB4T1RBd08weGJZeXN5TkQ0K01qNCtQakJkUFdFdVoyVjBSR0Y1S0NrN1RGdGpLekk0UGo0eVBqNCtYRzR3WFQwb1Z5aGhMbWRsZEVaMWJHeFpaV0Z5S0NrcFAzWmhPbmRoS1Z0aExtZGxkRTF2Ym5Sb0tDbGRLMkV1WjJWMFJHRjBaU2dwTFRGOE1EdE1XMk1yTXpZK1BqSStQajR3WFQwdEtEWXdLbUV1WjJWMFZHbHRaWHB2Ym1WUFptWnpaWFFvS1NrN1lqMG9ibVYzSUVSaGRHVW9ZUzVuWlhSR2RXeHNXV1ZoY2lncExEWXNNU2twTG1kbGRGUnBiV1Y2YjI1bFQyWm1jMlYwS0NrN2RtRnlJR1k5S0c1bGR5QkVZWFJsS0dFdVoyVjBSblZzYkZsbFlYSW9LU3d3TERFcEtTNW5aWFJVYVcxbGVtOXVaVTltWm5ObGRDZ3BPMHhiWXlzek1qNCtNajQrUGpCZFBTaGlJVDFtSmlaaExtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDazlQVTFoZEdndWJXbHVLR1lzWWlrcGZEQjlMSEU2Wm5WdVkzUnBiMjRvWVNsN1lUNCtQajB3TzNaaGNpQmlQVzVsZHlCRVlYUmxLRXhiWVNzeU1ENCtNajQrUGpCZEt6RTVNREFzVEZ0aEt6RTJQajR5UGo0K01GMHNURnRoS3pFeVBqNHlQajQrTUYwc1RGdGhLemcrUGpJK1BqNHdYU3hNVzJFck5ENCtNajQrUGpCZExFeGJZVDQrTWo0K1BqQmRMREFwTEdNOVRGdGhLek15UGo0eVBqNCtNRjBzWmoxaUxtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDa3NaejBvYm1WM0lFUmhkR1VvWWk1blpYUkdkV3hzV1dWaGNpZ3BMRFlzTVNrcExtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDa3NYRzVvUFNodVpYY2dSR0YwWlNoaUxtZGxkRVoxYkd4WlpXRnlLQ2tzTUN3eEtTa3VaMlYwVkdsdFpYcHZibVZQWm1aelpYUW9LU3h0UFUxaGRHZ3ViV2x1S0dnc1p5azdNRDVqUDB4YllTc3pNajQrTWo0K1BqQmRQVTUxYldKbGNpaG5JVDFvSmladFBUMW1LVG93UEdNaFBTaHRQVDFtS1NZbUtHYzlUV0YwYUM1dFlYZ29hQ3huS1N4aUxuTmxkRlJwYldVb1lpNW5aWFJVYVcxbEtDa3JOa1UwS2lnb01EeGpQMjA2WnlrdFppa3BLVHRNVzJFck1qUStQakkrUGo0d1hUMWlMbWRsZEVSaGVTZ3BPMHhiWVNzeU9ENCtNajQrUGpCZFBTaFhLR0l1WjJWMFJuVnNiRmxsWVhJb0tTay9kbUU2ZDJFcFcySXVaMlYwVFc5dWRHZ29LVjByWWk1blpYUkVZWFJsS0NrdE1Yd3dPMHhiWVQ0K01qNCtQakJkUFdJdVoyVjBVMlZqYjI1a2N5Z3BPMHhiWVNzMFBqNHlQajQrTUYwOVlpNW5aWFJOYVc1MWRHVnpLQ2s3VEZ0aEt6ZytQakkrUGo0d1hUMWlMbWRsZEVodmRYSnpLQ2s3VEZ0aEt6RXlQajR5UGo0K01GMDlZaTVuWlhSRVlYUmxLQ2s3VEZ0aEt6RTJQajR5UGo0K01GMDlZaTVuWlhSTmIyNTBhQ2dwTzB4YllTc3lNRDQrTWo0K1BqQmRQV0l1WjJWMFdXVmhjaWdwTzJFOVlpNW5aWFJVYVcxbEtDa3ZNVVV6TzNKbGRIVnliaUJKWVNnb1VqMWhMREU4UFN0TllYUm9MbUZpY3loU0tUOHdQRkkvSzAxaGRHZ3VabXh2YjNJb1VpOWNialF5T1RRNU5qY3lPVFlwUGo0K01EcCtmaXROWVhSb0xtTmxhV3dvS0ZJdEt5aCtmbEkrUGo0d0tTa3ZOREk1TkRrMk56STVOaWsrUGo0d09qQXBLU3hoUGo0K01IMHNiVHBtZFc1amRHbHZiaWdwZTNKbGRIVnliaTAxTW4wc2JqcG1kVzVqZEdsdmJpZ3BlMzBzZERwbWRXNWpkR2x2YmloaExHSXNZeWw3Wm5WdVkzUnBiMjRnWmloM0tYdHlaWFIxY200b2R6MTNMblJ2VkdsdFpWTjBjbWx1WnlncExtMWhkR05vS0M5Y1hDZ29XMEV0V21FdGVpQmRLeWxjWENra0x5a3BQM2RiTVYwNlhDSkhUVlJjSW4xalBqNCtQVEE3ZG1GeUlHYzlLRzVsZHlCRVlYUmxLUzVuWlhSR2RXeHNXV1ZoY2lncExHZzlibVYzSUVSaGRHVW9aeXd3TERFcExHMDlibVYzSUVSaGRHVW9aeXcyTERFcE8yYzlhQzVuWlhSVWFXMWxlbTl1WlU5bVpuTmxkQ2dwTzNaaGNpQnhQVzB1WjJWMFZHbHRaWHB2Ym1WUFptWnpaWFFvS1R0TlcyRStQajR3UGo0eVBqNCtNRjA5TmpBcVRXRjBhQzV0WVhnb1p5eHhLVHRNVzJJK1BqNHdQajR5UGo0K01GMDlUblZ0WW1WeUtHY2hQWEVwTzJFOVppaG9LVHRpUFdZb2JTazdZVDFDWVNoaEtUdGlQVUpoS0dJcE8zRThaejhvVFZ0alBqNHlQajQrTUYwOVlTeE5XMk1yTkQ0K01qNCtQakJkUFdJcE9paE5XMk0rUGpJK1BqNHdYVDFpTEUxYll5czBQajR5UGo0K01GMDlZU2w5TEdRNktDazlQbnRIS0Z3aVhDSXBmU3hjYm1nNlpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z1JHRjBaUzV1YjNjb0tYMHNkVHBtZFc1amRHbHZiaWdwZTNKbGRIVnliaUEwTWprME9UQXhOell3ZlN4aU9pZ3BQVDV3WlhKbWIzSnRZVzVqWlM1dWIzY29LU3hKT21aMWJtTjBhVzl1S0dFc1lpeGpLWHRpUGo0K1BUQTdjbVYwZFhKdUlFc3VZMjl3ZVZkcGRHaHBiaWhoUGo0K01ENCtQakFzWWo0K1BqQXNZaXNvWXo0K1BqQXBQajQrTUNsOUxITTZablZ1WTNScGIyNG9ZU2w3WVQ0K1BqMHdPM1poY2lCaVBVc3ViR1Z1WjNSb08ybG1LRFF5T1RRNU1ERTNOakE4WVNseVpYUjFjbTRoTVR0bWIzSW9kbUZ5SUdNOU1UczBQajFqTzJNcVBUSXBlM1poY2lCbVBXSXFLREVyTGpJdll5azdaajFOWVhSb0xtMXBiaWhtTEdFck1UQXdOall6TWprMktUdDJZWElnWnoxTllYUm9PMlk5VFdGMGFDNXRZWGdvWVN4bUtUdGhPbnRuUFdjdWJXbHVMbU5oYkd3b1p5dzBNamswT1RBeE56WXdMR1lyS0RZMU5UTTJMV1lsTmpVMU16WXBKVFkxTlRNMktTMUlMbUoxWm1abGNpNWllWFJsVEdWdVozUm9LelkxTlRNMVBqNCtNVFk3ZEhKNWUwZ3VaM0p2ZHlobktUdGxZU2dwTzNaaGNpQm9QVEU3WW5KbFlXc2dZWDFqWVhSamFDaHRLWHQ5YUQxMmIybGtJREI5YVdZb2FDbHlaWFIxY200aE1IMXlaWFIxY200aE1YMHNRenBtZFc1amRHbHZiaWhoTEdJcGUyRStQajQ5WEc0d08ySStQajQ5TUR0MllYSWdZejB3TzBOaEtDa3VabTl5UldGamFDaG1kVzVqZEdsdmJpaG1MR2NwZTNaaGNpQm9QV0lyWXp0blBVMWJZU3MwS21jK1BqSStQajR3WFQxb08yWnZjaWhvUFRBN2FEeG1MbXhsYm1kMGFEc3JLMmdwU2x0bkt5cytQakErUGo0d1hUMW1MbU5vWVhKRGIyUmxRWFFvYUNrN1NsdG5QajR3UGo0K01GMDlNRHRqS3oxbUxteGxibWQwYUNzeGZTazdjbVYwZFhKdUlEQjlMRVE2Wm5WdVkzUnBiMjRvWVN4aUtYdGhQajQrUFRBN1lqNCtQajB3TzNaaGNpQmpQVU5oS0NrN1RWdGhQajR5UGo0K01GMDlZeTVzWlc1bmRHZzdkbUZ5SUdZOU1EdGpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aeWw3WmlzOVp5NXNaVzVuZEdnck1YMHBPMDFiWWo0K01qNCtQakJkUFdZN2NtVjBkWEp1SURCOUxHWTZLQ2s5UGpVeUxHbzZablZ1WTNScGIyNG9LWHR5WlhSMWNtNGdOVEo5TEhJNlpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z056QjlMR2s2Wm5WdVkzUnBiMjRvWVN4aUxHTXNaaWw3WWo0K1BqMHdPMk0rUGo0OU1EdG1QajQrUFRBN1ptOXlLSFpoY2lCblBUQXNhRDB3TzJnOFl6dG9LeXNwZTNaaGNpQnRQVTFiWWo0K01qNCtQakJkTEhFOVRWdGlLelErUGpJK1BqNHdYVHRpS3owNE8yWnZjaWgyWVhJZ2R6MHdPM2M4Y1R0M0t5c3BlM1poY2lCMFBVdGJiU3QzUGo0K01GMHNkVDFjYmtSaFcyRmRPekE5UFQxMGZId3hNRDA5UFhRL0tDZ3hQVDA5WVQ5allUcEZLU2gxWVNoMUxEQXBLU3gxTG14bGJtZDBhRDB3S1RwMUxuQjFjMmdvZENsOVp5czljWDFOVzJZK1BqSStQajR3WFQxbk8zSmxkSFZ5YmlBd2ZTeEJPa2hoTEdNNlpuVnVZM1JwYjI0b1lTeGlMR01zWmlsN2NtVjBkWEp1SUVoaEtHRStQajR3TEdJK1BqNHdMR00rUGo0d0xHWStQajR3S1gxOU8xeHVLR1oxYm1OMGFXOXVLQ2w3Wm5WdVkzUnBiMjRnWVNoaktYdGpQV011Wlhod2IzSjBjenRKUFdNOVMyRW9ZeWs3U0QxSkxrbzdaV0VvS1R0b1lTNTFibk5vYVdaMEtFa3VTeWs3VGkwdE8yUXViVzl1YVhSdmNsSjFia1JsY0dWdVpHVnVZMmxsY3lZbVpDNXRiMjVwZEc5eVVuVnVSR1Z3Wlc1a1pXNWphV1Z6S0U0cE8ybG1LREE5UFU0bUppaHVkV3hzSVQwOVR5WW1LR05zWldGeVNXNTBaWEoyWVd3b1R5a3NUejF1ZFd4c0tTeFFLU2w3ZG1GeUlHWTlVRHRRUFc1MWJHdzdaaWdwZlhKbGRIVnliaUJqZlhaaGNpQmlQWHRoT2twaGZUdE9LeXM3WkM1dGIyNXBkRzl5VW5WdVJHVndaVzVrWlc1amFXVnpKaVprTG0xdmJtbDBiM0pTZFc1RVpYQmxibVJsYm1OcFpYTW9UaWs3YVdZb1pDNXBibk4wWVc1MGFXRjBaVmRoYzIwcGRISjVlM0psZEhWeWJpQmtMbWx1YzNSaGJuUnBZWFJsVjJGemJTaGlMR0VwZldOaGRHTm9LR01wZTBVb1hDSk5iMlIxYkdVdWFXNXpkR0Z1ZEdsaGRHVlhZWE50SUdOaGJHeGlZV05ySUdaaGFXeGxaQ0IzYVhSb0lHVnljbTl5T2lCY0lpdGpLU3hzS0dNcGZYQmhLR0lzWm5WdVkzUnBiMjRvWXlsN1lTaGpMbWx1YzNSaGJtTmxLWDBwTG1OaGRHTm9LR3dwTzNKbGRIVnlibnQ5ZlNrb0tUdGNibVF1WDA5eWRFbHVhWFE5S0dFc1lpazlQaWhrTGw5UGNuUkpibWwwUFVrdVRDa29ZU3hpS1R0a0xsOVBjblJIWlhSTVlYTjBSWEp5YjNJOUtHRXNZaWs5UGloa0xsOVBjblJIWlhSTVlYTjBSWEp5YjNJOVNTNU5LU2hoTEdJcE8yUXVYMDl5ZEVOeVpXRjBaVk5sYzNOcGIyNVBjSFJwYjI1elBTaGhMR0lzWXl4bUxHY3NhQ3h0TEhFc2R5eDBLVDArS0dRdVgwOXlkRU55WldGMFpWTmxjM05wYjI1UGNIUnBiMjV6UFVrdVRpa29ZU3hpTEdNc1ppeG5MR2dzYlN4eExIY3NkQ2s3WkM1ZlQzSjBRWEJ3Wlc1a1JYaGxZM1YwYVc5dVVISnZkbWxrWlhJOUtHRXNZaWs5UGloa0xsOVBjblJCY0hCbGJtUkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNqMUpMazhwS0dFc1lpazdaQzVmVDNKMFFXUmtSbkpsWlVScGJXVnVjMmx2Yms5MlpYSnlhV1JsUFNoaExHSXNZeWs5UGloa0xsOVBjblJCWkdSR2NtVmxSR2x0Wlc1emFXOXVUM1psY25KcFpHVTlTUzVRS1NoaExHSXNZeWs3WkM1ZlQzSjBRV1JrVTJWemMybHZia052Ym1acFowVnVkSEo1UFNoaExHSXNZeWs5UGloa0xsOVBjblJCWkdSVFpYTnphVzl1UTI5dVptbG5SVzUwY25rOVNTNVJLU2hoTEdJc1l5azdaQzVmVDNKMFVtVnNaV0Z6WlZObGMzTnBiMjVQY0hScGIyNXpQV0U5UGloa0xsOVBjblJTWld4bFlYTmxVMlZ6YzJsdmJrOXdkR2x2Ym5NOVNTNVNLU2hoS1R0Y2JtUXVYMDl5ZEVOeVpXRjBaVk5sYzNOcGIyNDlLR0VzWWl4aktUMCtLR1F1WDA5eWRFTnlaV0YwWlZObGMzTnBiMjQ5U1M1VEtTaGhMR0lzWXlrN1pDNWZUM0owVW1Wc1pXRnpaVk5sYzNOcGIyNDlZVDArS0dRdVgwOXlkRkpsYkdWaGMyVlRaWE56YVc5dVBVa3VWQ2tvWVNrN1pDNWZUM0owUjJWMFNXNXdkWFJQZFhSd2RYUkRiM1Z1ZEQwb1lTeGlMR01wUFQ0b1pDNWZUM0owUjJWMFNXNXdkWFJQZFhSd2RYUkRiM1Z1ZEQxSkxsVXBLR0VzWWl4aktUdGtMbDlQY25SSFpYUkpibkIxZEU1aGJXVTlLR0VzWWlrOVBpaGtMbDlQY25SSFpYUkpibkIxZEU1aGJXVTlTUzVXS1NoaExHSXBPMlF1WDA5eWRFZGxkRTkxZEhCMWRFNWhiV1U5S0dFc1lpazlQaWhrTGw5UGNuUkhaWFJQZFhSd2RYUk9ZVzFsUFVrdVZ5a29ZU3hpS1R0a0xsOVBjblJHY21WbFBXRTlQaWhrTGw5UGNuUkdjbVZsUFVrdVdDa29ZU2s3WkM1ZlQzSjBRM0psWVhSbFZHVnVjMjl5UFNoaExHSXNZeXhtTEdjc2FDazlQaWhrTGw5UGNuUkRjbVZoZEdWVVpXNXpiM0k5U1M1WktTaGhMR0lzWXl4bUxHY3NhQ2s3WkM1ZlQzSjBSMlYwVkdWdWMyOXlSR0YwWVQwb1lTeGlMR01zWml4bktUMCtLR1F1WDA5eWRFZGxkRlJsYm5OdmNrUmhkR0U5U1M1YUtTaGhMR0lzWXl4bUxHY3BPMXh1WkM1ZlQzSjBVbVZzWldGelpWUmxibk52Y2oxaFBUNG9aQzVmVDNKMFVtVnNaV0Z6WlZSbGJuTnZjajFKTGw4cEtHRXBPMlF1WDA5eWRFTnlaV0YwWlZKMWJrOXdkR2x2Ym5NOUtHRXNZaXhqTEdZcFBUNG9aQzVmVDNKMFEzSmxZWFJsVW5WdVQzQjBhVzl1Y3oxSkxpUXBLR0VzWWl4akxHWXBPMlF1WDA5eWRFRmtaRkoxYmtOdmJtWnBaMFZ1ZEhKNVBTaGhMR0lzWXlrOVBpaGtMbDlQY25SQlpHUlNkVzVEYjI1bWFXZEZiblJ5ZVQxSkxtRmhLU2hoTEdJc1l5azdaQzVmVDNKMFVtVnNaV0Z6WlZKMWJrOXdkR2x2Ym5NOVlUMCtLR1F1WDA5eWRGSmxiR1ZoYzJWU2RXNVBjSFJwYjI1elBVa3VZbUVwS0dFcE8yUXVYMDl5ZEVOeVpXRjBaVUpwYm1ScGJtYzlZVDArS0dRdVgwOXlkRU55WldGMFpVSnBibVJwYm1jOVNTNWpZU2tvWVNrN1pDNWZUM0owUW1sdVpFbHVjSFYwUFNoaExHSXNZeWs5UGloa0xsOVBjblJDYVc1a1NXNXdkWFE5U1M1a1lTa29ZU3hpTEdNcE8yUXVYMDl5ZEVKcGJtUlBkWFJ3ZFhROUtHRXNZaXhqTEdZcFBUNG9aQzVmVDNKMFFtbHVaRTkxZEhCMWREMUpMbVZoS1NoaExHSXNZeXhtS1R0a0xsOVBjblJEYkdWaGNrSnZkVzVrVDNWMGNIVjBjejFoUFQ0b1pDNWZUM0owUTJ4bFlYSkNiM1Z1WkU5MWRIQjFkSE05U1M1bVlTa29ZU2s3WEc1a0xsOVBjblJTWld4bFlYTmxRbWx1WkdsdVp6MWhQVDRvWkM1ZlQzSjBVbVZzWldGelpVSnBibVJwYm1jOVNTNW5ZU2tvWVNrN1pDNWZUM0owVW5WdVYybDBhRUpwYm1ScGJtYzlLR0VzWWl4akxHWXNaeWs5UGloa0xsOVBjblJTZFc1WGFYUm9RbWx1WkdsdVp6MUpMbWhoS1NoaExHSXNZeXhtTEdjcE8yUXVYMDl5ZEZKMWJqMG9ZU3hpTEdNc1ppeG5MR2dzYlN4eEtUMCtLR1F1WDA5eWRGSjFiajFKTG1saEtTaGhMR0lzWXl4bUxHY3NhQ3h0TEhFcE8yUXVYMDl5ZEVWdVpGQnliMlpwYkdsdVp6MWhQVDRvWkM1ZlQzSjBSVzVrVUhKdlptbHNhVzVuUFVrdWFtRXBLR0VwTzJRdVgwOXlkRlJ5WVdsdWFXNW5URzloWkVOb1pXTnJjRzlwYm5ROUtHRXNZaWs5UGloa0xsOVBjblJVY21GcGJtbHVaMHh2WVdSRGFHVmphM0J2YVc1MFBVa3VhMkVwS0dFc1lpazdaQzVmVDNKMFZISmhhVzVwYm1kU1pXeGxZWE5sUTJobFkydHdiMmx1ZEQxaFBUNG9aQzVmVDNKMFZISmhhVzVwYm1kU1pXeGxZWE5sUTJobFkydHdiMmx1ZEQxSkxteGhLU2hoS1R0a0xsOVBjblJVY21GcGJtbHVaME55WldGMFpWTmxjM05wYjI0OUtHRXNZaXhqTEdZc1p5eG9MRzBzY1NrOVBpaGtMbDlQY25SVWNtRnBibWx1WjBOeVpXRjBaVk5sYzNOcGIyNDlTUzV0WVNrb1lTeGlMR01zWml4bkxHZ3NiU3h4S1R0Y2JtUXVYMDl5ZEZSeVlXbHVhVzVuVEdGNmVWSmxjMlYwUjNKaFpEMWhQVDRvWkM1ZlQzSjBWSEpoYVc1cGJtZE1ZWHA1VW1WelpYUkhjbUZrUFVrdWJtRXBLR0VwTzJRdVgwOXlkRlJ5WVdsdWFXNW5VblZ1VkhKaGFXNVRkR1Z3UFNoaExHSXNZeXhtTEdjc2FDazlQaWhrTGw5UGNuUlVjbUZwYm1sdVoxSjFibFJ5WVdsdVUzUmxjRDFKTG05aEtTaGhMR0lzWXl4bUxHY3NhQ2s3WkM1ZlQzSjBWSEpoYVc1cGJtZFBjSFJwYldsNlpYSlRkR1Z3UFNoaExHSXBQVDRvWkM1ZlQzSjBWSEpoYVc1cGJtZFBjSFJwYldsNlpYSlRkR1Z3UFVrdWNHRXBLR0VzWWlrN1pDNWZUM0owVkhKaGFXNXBibWRGZG1Gc1UzUmxjRDBvWVN4aUxHTXNaaXhuTEdncFBUNG9aQzVmVDNKMFZISmhhVzVwYm1kRmRtRnNVM1JsY0QxSkxuRmhLU2hoTEdJc1l5eG1MR2NzYUNrN1pDNWZUM0owVkhKaGFXNXBibWRIWlhSUVlYSmhiV1YwWlhKelUybDZaVDBvWVN4aUxHTXBQVDRvWkM1ZlQzSjBWSEpoYVc1cGJtZEhaWFJRWVhKaGJXVjBaWEp6VTJsNlpUMUpMbkpoS1NoaExHSXNZeWs3WkM1ZlQzSjBWSEpoYVc1cGJtZERiM0I1VUdGeVlXMWxkR1Z5YzFSdlFuVm1abVZ5UFNoaExHSXNZeXhtS1QwK0tHUXVYMDl5ZEZSeVlXbHVhVzVuUTI5d2VWQmhjbUZ0WlhSbGNuTlViMEoxWm1abGNqMUpMbk5oS1NoaExHSXNZeXhtS1R0Y2JtUXVYMDl5ZEZSeVlXbHVhVzVuUTI5d2VWQmhjbUZ0WlhSbGNuTkdjbTl0UW5WbVptVnlQU2hoTEdJc1l5eG1LVDArS0dRdVgwOXlkRlJ5WVdsdWFXNW5RMjl3ZVZCaGNtRnRaWFJsY25OR2NtOXRRblZtWm1WeVBVa3VkR0VwS0dFc1lpeGpMR1lwTzJRdVgwOXlkRlJ5WVdsdWFXNW5VbVZzWldGelpWTmxjM05wYjI0OVlUMCtLR1F1WDA5eWRGUnlZV2x1YVc1blVtVnNaV0Z6WlZObGMzTnBiMjQ5U1M1MVlTa29ZU2s3ZG1GeUlFRmhQV1F1WDIxaGJHeHZZejFoUFQ0b1FXRTlaQzVmYldGc2JHOWpQVWt1ZG1FcEtHRXBPMlF1WDJaeVpXVTlZVDArS0dRdVgyWnlaV1U5U1M1M1lTa29ZU2s3ZG1GeUlFbGhQV0U5UGloSllUMUpMbmxoS1NoaEtTeE1ZVDBvS1QwK0tFeGhQVWt1ZW1FcEtDa3NUV0U5WVQwK0tFMWhQVWt1UVdFcEtHRXBMRTVoUFdFOVBpaE9ZVDFKTGtKaEtTaGhLVHRjYm1aMWJtTjBhVzl1SUV0aEtHRXBlMkU5VDJKcVpXTjBMbUZ6YzJsbmJpaDdmU3hoS1R0MllYSWdZajFtUFQ0b0tUMCtaaWdwUGo0K01DeGpQV1k5UG1jOVBtWW9aeWsrUGo0d08yRXVYMTlsY25KdWIxOXNiMk5oZEdsdmJqMWlLR0V1WDE5bGNuSnViMTlzYjJOaGRHbHZiaWs3WVM1dFlXeHNiMk05WXloaExtMWhiR3h2WXlrN1lTNXpkR0ZqYTFOaGRtVTlZaWhoTG5OMFlXTnJVMkYyWlNrN1lTNXpkR0ZqYTBGc2JHOWpQV01vWVM1emRHRmphMEZzYkc5aktUdHlaWFIxY200Z1lYMWtMbk4wWVdOclFXeHNiMk05VG1FN1pDNXpkR0ZqYTFOaGRtVTlUR0U3WkM1emRHRmphMUpsYzNSdmNtVTlUV0U3WkM1VlZFWTRWRzlUZEhKcGJtYzlWRHRrTG5OMGNtbHVaMVJ2VlZSR09EMG9ZU3hpTEdNcFBUNVdLR0VzU3l4aUxHTXBPMlF1YkdWdVozUm9RbmwwWlhOVlZFWTRQVlU3ZG1GeUlGbzdVRDFtZFc1amRHbHZiaUJQWVNncGUxcDhmRkJoS0NrN1dueDhLRkE5VDJFcGZUdGNibVoxYm1OMGFXOXVJRkJoS0NsN1puVnVZM1JwYjI0Z1lTZ3BlMmxtS0NGYUppWW9XajBoTUN4a0xtTmhiR3hsWkZKMWJqMGhNQ3doWkdFcEtYdFRLR2hoS1R0cktHUXBPMmxtS0dRdWIyNVNkVzUwYVcxbFNXNXBkR2xoYkdsNlpXUXBaQzV2YmxKMWJuUnBiV1ZKYm1sMGFXRnNhWHBsWkNncE8ybG1LR1F1Y0c5emRGSjFiaWxtYjNJb1hDSm1kVzVqZEdsdmJsd2lQVDEwZVhCbGIyWWdaQzV3YjNOMFVuVnVKaVlvWkM1d2IzTjBVblZ1UFZ0a0xuQnZjM1JTZFc1ZEtUdGtMbkJ2YzNSU2RXNHViR1Z1WjNSb095bDdkbUZ5SUdJOVpDNXdiM04wVW5WdUxuTm9hV1owS0NrN2FXRXVkVzV6YUdsbWRDaGlLWDFUS0dsaEtYMTlhV1lvSVNnd1BFNHBLWHRwWmloa0xuQnlaVkoxYmlsbWIzSW9YQ0ptZFc1amRHbHZibHdpUFQxMGVYQmxiMllnWkM1d2NtVlNkVzRtSmloa0xuQnlaVkoxYmoxYlpDNXdjbVZTZFc1ZEtUdGtMbkJ5WlZKMWJpNXNaVzVuZEdnN0tXcGhLQ2s3VXlobVlTazdNRHhPZkh3b1pDNXpaWFJUZEdGMGRYTS9LR1F1YzJWMFUzUmhkSFZ6S0Z3aVVuVnVibWx1Wnk0dUxsd2lLU3h6WlhSVWFXMWxiM1YwS0daMWJtTjBhVzl1S0NsN2MyVjBWR2x0Wlc5MWRDaG1kVzVqZEdsdmJpZ3BlMlF1YzJWMFUzUmhkSFZ6S0Z3aVhDSXBmU3d4S1R0aEtDbDlMREVwS1RwaEtDa3BmWDFjYm1sbUtHUXVjSEpsU1c1cGRDbG1iM0lvWENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ1pDNXdjbVZKYm1sMEppWW9aQzV3Y21WSmJtbDBQVnRrTG5CeVpVbHVhWFJkS1Rzd1BHUXVjSEpsU1c1cGRDNXNaVzVuZEdnN0tXUXVjSEpsU1c1cGRDNXdiM0FvS1NncE8xQmhLQ2s3WEc1Y2JseHVJQ0J5WlhSMWNtNGdiVzlrZFd4bFFYSm5MbkpsWVdSNVhHNTlYRzVjYmlrN1hHNTlLU2dwTzF4dWFXWWdLSFI1Y0dWdlppQmxlSEJ2Y25SeklEMDlQU0FuYjJKcVpXTjBKeUFtSmlCMGVYQmxiMllnYlc5a2RXeGxJRDA5UFNBbmIySnFaV04wSnlsY2JpQWdiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnZjblJYWVhOdE8xeHVaV3h6WlNCcFppQW9kSGx3Wlc5bUlHUmxabWx1WlNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmlCa1pXWnBibVZiSjJGdFpDZGRLVnh1SUNCa1pXWnBibVVvVzEwc0lDZ3BJRDArSUc5eWRGZGhjMjBwTzF4dUlpd2dJaUlzSUNJaUxDQWlaWGh3YjNKMElHTnZibk4wSUdOd2RYTWdQU0IxYm1SbFptbHVaV1E3SWl3Z0lseHVkbUZ5SUc5eWRGZGhjMjFVYUhKbFlXUmxaQ0E5SUNnb0tTQTlQaUI3WEc0Z0lIWmhjaUJmYzJOeWFYQjBSR2x5SUQwZ2RIbHdaVzltSUdSdlkzVnRaVzUwSUNFOVBTQW5kVzVrWldacGJtVmtKeUFtSmlCa2IyTjFiV1Z1ZEM1amRYSnlaVzUwVTJOeWFYQjBJRDhnWkc5amRXMWxiblF1WTNWeWNtVnVkRk5qY21sd2RDNXpjbU1nT2lCMWJtUmxabWx1WldRN1hHNGdJR2xtSUNoMGVYQmxiMllnWDE5bWFXeGxibUZ0WlNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUY5elkzSnBjSFJFYVhJZ1BTQmZjMk55YVhCMFJHbHlJSHg4SUY5ZlptbHNaVzVoYldVN1hHNGdJSEpsZEhWeWJpQW9YRzVtZFc1amRHbHZiaWh0YjJSMWJHVkJjbWNnUFNCN2ZTa2dlMXh1WEc1bWRXNWpkR2x2YmlCaFlTZ3BlMlF1WW5WbVptVnlJVDFzTG1KMVptWmxjaVltYlNncE8zSmxkSFZ5YmlCc2ZXWjFibU4wYVc5dUlHNG9LWHRrTG1KMVptWmxjaUU5YkM1aWRXWm1aWEltSm0wb0tUdHlaWFIxY200Z1ltRjlablZ1WTNScGIyNGdjQ2dwZTJRdVluVm1abVZ5SVQxc0xtSjFabVpsY2lZbWJTZ3BPM0psZEhWeWJpQmpZWDFtZFc1amRHbHZiaUJ5S0NsN1pDNWlkV1ptWlhJaFBXd3VZblZtWm1WeUppWnRLQ2s3Y21WMGRYSnVJR1JoZldaMWJtTjBhVzl1SUdWaEtDbDdaQzVpZFdabVpYSWhQV3d1WW5WbVptVnlKaVp0S0NrN2NtVjBkWEp1SUdaaGZYWmhjaUIzUFcxdlpIVnNaVUZ5Wnl4b1lTeDRPM2N1Y21WaFpIazlibVYzSUZCeWIyMXBjMlVvS0dFc1lpazlQbnRvWVQxaE8zZzlZbjBwTzF4dWRtRnlJR2xoUFU5aWFtVmpkQzVoYzNOcFoyNG9lMzBzZHlrc2FtRTlYQ0l1TDNSb2FYTXVjSEp2WjNKaGJWd2lMSG85S0dFc1lpazlQbnQwYUhKdmR5QmlPMzBzYTJFOVhDSnZZbXBsWTNSY0lqMDlkSGx3Wlc5bUlIZHBibVJ2ZHl4QlBWd2lablZ1WTNScGIyNWNJajA5ZEhsd1pXOW1JR2x0Y0c5eWRGTmpjbWx3ZEhNc1FqMWNJbTlpYW1WamRGd2lQVDEwZVhCbGIyWWdjSEp2WTJWemN5WW1YQ0p2WW1wbFkzUmNJajA5ZEhsd1pXOW1JSEJ5YjJObGMzTXVkbVZ5YzJsdmJuTW1KbHdpYzNSeWFXNW5YQ0k5UFhSNWNHVnZaaUJ3Y205alpYTnpMblpsY25OcGIyNXpMbTV2WkdVc1JEMTNMa1ZPVmtsU1QwNU5SVTVVWDBsVFgxQlVTRkpGUVVSOGZDRXhMRVU5WENKY0lqdG1kVzVqZEdsdmJpQnNZU2hoS1h0eVpYUjFjbTRnZHk1c2IyTmhkR1ZHYVd4bFAzY3ViRzlqWVhSbFJtbHNaU2hoTEVVcE9rVXJZWDEyWVhJZ2JXRXNSaXhJTzF4dWFXWW9RaWw3ZG1GeUlHWnpQWEpsY1hWcGNtVW9YQ0ptYzF3aUtTeHVZVDF5WlhGMWFYSmxLRndpY0dGMGFGd2lLVHRGUFVFL2JtRXVaR2x5Ym1GdFpTaEZLU3RjSWk5Y0lqcGZYMlJwY201aGJXVXJYQ0l2WENJN2JXRTlLR0lzWXlrOVBudGlQV0l1YzNSaGNuUnpWMmwwYUNoY0ltWnBiR1U2THk5Y0lpay9ibVYzSUZWU1RDaGlLVHB1WVM1dWIzSnRZV3hwZW1Vb1lpazdjbVYwZFhKdUlHWnpMbkpsWVdSR2FXeGxVM2x1WXloaUxHTS9kbTlwWkNBd09sd2lkWFJtT0Z3aUtYMDdTRDFpUFQ1N1lqMXRZU2hpTENFd0tUdGlMbUoxWm1abGNueDhLR0k5Ym1WM0lGVnBiblE0UVhKeVlYa29ZaWtwTzNKbGRIVnliaUJpZlR0R1BTaGlMR01zWlN4b1BTRXdLVDArZTJJOVlpNXpkR0Z5ZEhOWGFYUm9LRndpWm1sc1pUb3ZMMXdpS1Q5dVpYY2dWVkpNS0dJcE9tNWhMbTV2Y20xaGJHbDZaU2hpS1R0bWN5NXlaV0ZrUm1sc1pTaGlMR2cvZG05cFpDQXdPbHdpZFhSbU9Gd2lMQ2huTEdzcFBUNTdaejlsS0djcE9tTW9hRDlyTG1KMVptWmxjanByS1gwcGZUc2hkeTUwYUdselVISnZaM0poYlNZbU1UeHdjbTlqWlhOekxtRnlaM1l1YkdWdVozUm9KaVlvYW1FOWNISnZZMlZ6Y3k1aGNtZDJXekZkTG5KbGNHeGhZMlVvTDF4Y1hGd3ZaeXhjSWk5Y0lpa3BPM0J5YjJObGMzTXVZWEpuZGk1emJHbGpaU2d5S1R0NlBTaGlMR01wUFQ1N2NISnZZMlZ6Y3k1bGVHbDBRMjlrWlQxY2JtSTdkR2h5YjNjZ1l6dDlPM2N1YVc1emNHVmpkRDBvS1QwK1hDSmJSVzF6WTNKcGNIUmxiaUJOYjJSMWJHVWdiMkpxWldOMFhWd2lPMnhsZENCaE8zUnllWHRoUFhKbGNYVnBjbVVvWENKM2IzSnJaWEpmZEdoeVpXRmtjMXdpS1gxallYUmphQ2hpS1h0MGFISnZkeUJqYjI1emIyeGxMbVZ5Y205eUtDZFVhR1VnWENKM2IzSnJaWEpmZEdoeVpXRmtjMXdpSUcxdlpIVnNaU0JwY3lCdWIzUWdjM1Z3Y0c5eWRHVmtJR2x1SUhSb2FYTWdibTlrWlM1cWN5QmlkV2xzWkNBdElIQmxjbWhoY0hNZ1lTQnVaWGRsY2lCMlpYSnphVzl1SUdseklHNWxaV1JsWkQ4bktTeGlPMzFuYkc5aVlXd3VWMjl5YTJWeVBXRXVWMjl5YTJWeWZXVnNjMlVnYVdZb2EyRjhmRUVwUVQ5RlBYTmxiR1l1Ykc5allYUnBiMjR1YUhKbFpqcGNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnWkc5amRXMWxiblFtSm1SdlkzVnRaVzUwTG1OMWNuSmxiblJUWTNKcGNIUW1KaWhGUFdSdlkzVnRaVzUwTG1OMWNuSmxiblJUWTNKcGNIUXVjM0pqS1N3b2RIbHdaVzltSUY5elkzSnBjSFJFYVhJZ0lUMDlJRndpZFc1a1pXWnBibVZrWENJZ0ppWWdYM05qY21sd2RFUnBjaWttSmloRlBWOXpZM0pwY0hSRWFYSXBMREFoUFQxRkxtbHVaR1Y0VDJZb1hDSmliRzlpT2x3aUtUOUZQVVV1YzNWaWMzUnlLREFzUlM1eVpYQnNZV05sS0M5YlB5TmRMaW92TEZ3aVhDSXBMbXhoYzNSSmJtUmxlRTltS0Z3aUwxd2lLU3N4S1RwRlBWd2lYQ0lzUW54OEtHMWhQV0U5UG50MllYSWdZajFjYm01bGR5QllUVXhJZEhSd1VtVnhkV1Z6ZER0aUxtOXdaVzRvWENKSFJWUmNJaXhoTENFeEtUdGlMbk5sYm1Rb2JuVnNiQ2s3Y21WMGRYSnVJR0l1Y21WemNHOXVjMlZVWlhoMGZTeEJKaVlvU0QxaFBUNTdkbUZ5SUdJOWJtVjNJRmhOVEVoMGRIQlNaWEYxWlhOME8ySXViM0JsYmloY0lrZEZWRndpTEdFc0lURXBPMkl1Y21WemNHOXVjMlZVZVhCbFBWd2lZWEp5WVhsaWRXWm1aWEpjSWp0aUxuTmxibVFvYm5Wc2JDazdjbVYwZFhKdUlHNWxkeUJWYVc1ME9FRnljbUY1S0dJdWNtVnpjRzl1YzJVcGZTa3NSajBvWVN4aUxHTXBQVDU3ZG1GeUlHVTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBPMlV1YjNCbGJpaGNJa2RGVkZ3aUxHRXNJVEFwTzJVdWNtVnpjRzl1YzJWVWVYQmxQVndpWVhKeVlYbGlkV1ptWlhKY0lqdGxMbTl1Ykc5aFpEMG9LVDArZXpJd01EMDlaUzV6ZEdGMGRYTjhmREE5UFdVdWMzUmhkSFZ6SmlabExuSmxjM0J2Ym5ObFAySW9aUzV5WlhOd2IyNXpaU2s2WXlncGZUdGxMbTl1WlhKeWIzSTlZenRsTG5ObGJtUW9iblZzYkNsOUtUdENKaVpjSW5WdVpHVm1hVzVsWkZ3aVBUMTBlWEJsYjJZZ2NHVnlabTl5YldGdVkyVW1KaWhuYkc5aVlXd3VjR1Z5Wm05eWJXRnVZMlU5Y21WeGRXbHlaU2hjSW5CbGNtWmZhRzl2YTNOY0lpa3VjR1Z5Wm05eWJXRnVZMlVwTzF4dWRtRnlJRzloUFdOdmJuTnZiR1V1Ykc5bkxtSnBibVFvWTI5dWMyOXNaU2tzY0dFOVkyOXVjMjlzWlM1bGNuSnZjaTVpYVc1a0tHTnZibk52YkdVcE8wSW1KaWh2WVQwb0xpNHVZU2s5UG1aekxuZHlhWFJsVTNsdVl5Z3hMR0V1YW05cGJpaGNJaUJjSWlrclhDSmNYRzVjSWlrc2NHRTlLQzR1TG1FcFBUNW1jeTUzY21sMFpWTjVibU1vTWl4aExtcHZhVzRvWENJZ1hDSXBLMXdpWEZ4dVhDSXBLVHQyWVhJZ2NXRTlkeTV3Y21sdWRIeDhiMkVzU1QxM0xuQnlhVzUwUlhKeWZIeHdZVHRQWW1wbFkzUXVZWE56YVdkdUtIY3NhV0VwTzJsaFBXNTFiR3c3ZHk1MGFHbHpVSEp2WjNKaGJTWW1LR3BoUFhjdWRHaHBjMUJ5YjJkeVlXMHBPM2N1Y1hWcGRDWW1LSG85ZHk1eGRXbDBLVHQyWVhJZ1NqdDNMbmRoYzIxQ2FXNWhjbmttSmloS1BYY3VkMkZ6YlVKcGJtRnllU2s3ZG1GeUlHNXZSWGhwZEZKMWJuUnBiV1U5ZHk1dWIwVjRhWFJTZFc1MGFXMWxmSHdoTUR0Y0ltOWlhbVZqZEZ3aUlUMTBlWEJsYjJZZ1YyVmlRWE56WlcxaWJIa21Ka3NvWENKdWJ5QnVZWFJwZG1VZ2QyRnpiU0J6ZFhCd2IzSjBJR1JsZEdWamRHVmtYQ0lwTzNaaGNpQmtMRXdzY21Fc1RUMGhNU3hPTEd3c1ltRXNZMkVzWkdFc1ptRTdYRzVtZFc1amRHbHZiaUJ0S0NsN2RtRnlJR0U5WkM1aWRXWm1aWEk3ZHk1SVJVRlFPRDFzUFc1bGR5QkpiblE0UVhKeVlYa29ZU2s3ZHk1SVJVRlFNVFk5Ym1WM0lFbHVkREUyUVhKeVlYa29ZU2s3ZHk1SVJVRlFNekk5WTJFOWJtVjNJRWx1ZERNeVFYSnlZWGtvWVNrN2R5NUlSVUZRVlRnOVltRTlibVYzSUZWcGJuUTRRWEp5WVhrb1lTazdkeTVJUlVGUVZURTJQVzVsZHlCVmFXNTBNVFpCY25KaGVTaGhLVHQzTGtoRlFWQlZNekk5WkdFOWJtVjNJRlZwYm5Rek1rRnljbUY1S0dFcE8zY3VTRVZCVUVZek1qMXVaWGNnUm14dllYUXpNa0Z5Y21GNUtHRXBPM2N1U0VWQlVFWTJORDFtWVQxdVpYY2dSbXh2WVhRMk5FRnljbUY1S0dFcGZYWmhjaUJQUFhjdVNVNUpWRWxCVEY5TlJVMVBVbGw4ZkRFMk56YzNNakUyT3pVeU5ESTRPREE4UFU5OGZFc29YQ0pKVGtsVVNVRk1YMDFGVFU5U1dTQnphRzkxYkdRZ1ltVWdiR0Z5WjJWeUlIUm9ZVzRnVTFSQlEwdGZVMGxhUlN3Z2QyRnpJRndpSzA4clhDSWhJQ2hUVkVGRFMxOVRTVnBGUFRVeU5ESTRPREFwWENJcE8xeHVhV1lvUkNsa1BYY3VkMkZ6YlUxbGJXOXllVHRsYkhObElHbG1LSGN1ZDJGemJVMWxiVzl5ZVNsa1BYY3VkMkZ6YlUxbGJXOXllVHRsYkhObElHbG1LR1E5Ym1WM0lGZGxZa0Z6YzJWdFlteDVMazFsYlc5eWVTaDdhVzVwZEdsaGJEcFBMelkxTlRNMkxHMWhlR2x0ZFcwNk5qVTFNellzYzJoaGNtVmtPaUV3ZlNrc0lTaGtMbUoxWm1abGNpQnBibk4wWVc1alpXOW1JRk5vWVhKbFpFRnljbUY1UW5WbVptVnlLU2wwYUhKdmR5QkpLRndpY21WeGRXVnpkR1ZrSUdFZ2MyaGhjbVZrSUZkbFlrRnpjMlZ0WW14NUxrMWxiVzl5ZVNCaWRYUWdkR2hsSUhKbGRIVnlibVZrSUdKMVptWmxjaUJwY3lCdWIzUWdZU0JUYUdGeVpXUkJjbkpoZVVKMVptWmxjaXdnYVc1a2FXTmhkR2x1WnlCMGFHRjBJSGRvYVd4bElIUm9aU0JpY205M2MyVnlJR2hoY3lCVGFHRnlaV1JCY25KaGVVSjFabVpsY2lCcGRDQmtiMlZ6SUc1dmRDQm9ZWFpsSUZkbFlrRnpjMlZ0WW14NUlIUm9jbVZoWkhNZ2MzVndjRzl5ZENBdElIbHZkU0J0WVhrZ2JtVmxaQ0IwYnlCelpYUWdZU0JtYkdGblhDSXBMRUltSmtrb1hDSW9iMjRnYm05a1pTQjViM1VnYldGNUlHNWxaV1E2SUMwdFpYaHdaWEpwYldWdWRHRnNMWGRoYzIwdGRHaHlaV0ZrY3lBdExXVjRjR1Z5YVcxbGJuUmhiQzEzWVhOdExXSjFiR3N0YldWdGIzSjVJR0Z1WkM5dmNpQnlaV05sYm5RZ2RtVnljMmx2YmlsY0lpa3NYRzVGY25KdmNpaGNJbUpoWkNCdFpXMXZjbmxjSWlrN2JTZ3BPMDg5WkM1aWRXWm1aWEl1WW5sMFpVeGxibWQwYUR0MllYSWdjMkVzZEdFOVcxMHNkV0U5VzEwc2RtRTlXMTBzZDJFOU1EdG1kVzVqZEdsdmJpQlFLQ2w3Y21WMGRYSnVJRzV2UlhocGRGSjFiblJwYldWOGZEQThkMkY5ZG1GeUlGRTlNQ3g0WVQxdWRXeHNMRkk5Ym5Wc2JEdG1kVzVqZEdsdmJpQjVZU2dwZTFFckt6dDNMbTF2Ym1sMGIzSlNkVzVFWlhCbGJtUmxibU5wWlhNbUpuY3ViVzl1YVhSdmNsSjFia1JsY0dWdVpHVnVZMmxsY3loUktYMW1kVzVqZEdsdmJpQjZZU2dwZTFFdExUdDNMbTF2Ym1sMGIzSlNkVzVFWlhCbGJtUmxibU5wWlhNbUpuY3ViVzl1YVhSdmNsSjFia1JsY0dWdVpHVnVZMmxsY3loUktUdHBaaWd3UFQxUkppWW9iblZzYkNFOVBYaGhKaVlvWTJ4bFlYSkpiblJsY25aaGJDaDRZU2tzZUdFOWJuVnNiQ2tzVWlrcGUzWmhjaUJoUFZJN1VqMXVkV3hzTzJFb0tYMTlYRzVtZFc1amRHbHZiaUJMS0dFcGUybG1LSGN1YjI1QlltOXlkQ2wzTG05dVFXSnZjblFvWVNrN1lUMWNJa0ZpYjNKMFpXUW9YQ0lyWVN0Y0lpbGNJanRKS0dFcE8wMDlJVEE3VGoweE8yRTlibVYzSUZkbFlrRnpjMlZ0WW14NUxsSjFiblJwYldWRmNuSnZjaWhoSzF3aUxpQkNkV2xzWkNCM2FYUm9JQzF6UVZOVFJWSlVTVTlPVXlCbWIzSWdiVzl5WlNCcGJtWnZMbHdpS1R0NEtHRXBPM1JvY205M0lHRTdmV1oxYm1OMGFXOXVJRUZoS0dFcGUzSmxkSFZ5YmlCaExuTjBZWEowYzFkcGRHZ29YQ0prWVhSaE9tRndjR3hwWTJGMGFXOXVMMjlqZEdWMExYTjBjbVZoYlR0aVlYTmxOalFzWENJcGZYWmhjaUJUTzFNOVhDSnZjblF0ZDJGemJTMTBhSEpsWVdSbFpDNTNZWE50WENJN1FXRW9VeWw4ZkNoVFBXeGhLRk1wS1R0bWRXNWpkR2x2YmlCQ1lTaGhLWHRwWmloaFBUMVRKaVpLS1hKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTaEtLVHRwWmloSUtYSmxkSFZ5YmlCSUtHRXBPM1JvY205M1hDSmliM1JvSUdGemVXNWpJR0Z1WkNCemVXNWpJR1psZEdOb2FXNW5JRzltSUhSb1pTQjNZWE50SUdaaGFXeGxaRndpTzMxY2JtWjFibU4wYVc5dUlFTmhLR0VwZTJsbUtDRktKaVlvYTJGOGZFRXBLWHRwWmloY0ltWjFibU4wYVc5dVhDSTlQWFI1Y0dWdlppQm1aWFJqYUNZbUlXRXVjM1JoY25SelYybDBhQ2hjSW1acGJHVTZMeTljSWlrcGNtVjBkWEp1SUdabGRHTm9LR0VzZTJOeVpXUmxiblJwWVd4ek9sd2ljMkZ0WlMxdmNtbG5hVzVjSW4wcExuUm9aVzRvWWowK2UybG1LQ0ZpTG05cktYUm9jbTkzWENKbVlXbHNaV1FnZEc4Z2JHOWhaQ0IzWVhOdElHSnBibUZ5ZVNCbWFXeGxJR0YwSUNkY0lpdGhLMXdpSjF3aU8zSmxkSFZ5YmlCaUxtRnljbUY1UW5WbVptVnlLQ2w5S1M1allYUmphQ2dvS1QwK1FtRW9ZU2twTzJsbUtFWXBjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2hpTEdNcFBUNTdSaWhoTEdVOVBtSW9ibVYzSUZWcGJuUTRRWEp5WVhrb1pTa3BMR01wZlNsOWNtVjBkWEp1SUZCeWIyMXBjMlV1Y21WemIyeDJaU2dwTG5Sb1pXNG9LQ2s5UGtKaEtHRXBLWDFtZFc1amRHbHZiaUJFWVNoaExHSXNZeWw3Y21WMGRYSnVJRU5oS0dFcExuUm9aVzRvWlQwK1YyVmlRWE56WlcxaWJIa3VhVzV6ZEdGdWRHbGhkR1VvWlN4aUtTa3VkR2hsYmlobFBUNWxLUzUwYUdWdUtHTXNaVDArZTBrb1hDSm1ZV2xzWldRZ2RHOGdZWE41Ym1Ob2NtOXViM1Z6YkhrZ2NISmxjR0Z5WlNCM1lYTnRPaUJjSWl0bEtUdExLR1VwZlNsOVhHNW1kVzVqZEdsdmJpQkZZU2hoTEdJcGUzWmhjaUJqUFZNN2NtVjBkWEp1SUVwOGZGd2lablZ1WTNScGIyNWNJaUU5ZEhsd1pXOW1JRmRsWWtGemMyVnRZbXg1TG1sdWMzUmhiblJwWVhSbFUzUnlaV0Z0YVc1bmZIeEJZU2hqS1h4OFl5NXpkR0Z5ZEhOWGFYUm9LRndpWm1sc1pUb3ZMMXdpS1h4OFFueDhYQ0ptZFc1amRHbHZibHdpSVQxMGVYQmxiMllnWm1WMFkyZy9SR0VvWXl4aExHSXBPbVpsZEdOb0tHTXNlMk55WldSbGJuUnBZV3h6T2x3aWMyRnRaUzF2Y21sbmFXNWNJbjBwTG5Sb1pXNG9aVDArVjJWaVFYTnpaVzFpYkhrdWFXNXpkR0Z1ZEdsaGRHVlRkSEpsWVcxcGJtY29aU3hoS1M1MGFHVnVLR0lzWm5WdVkzUnBiMjRvYUNsN1NTaGNJbmRoYzIwZ2MzUnlaV0Z0YVc1bklHTnZiWEJwYkdVZ1ptRnBiR1ZrT2lCY0lpdG9LVHRKS0Z3aVptRnNiR2x1WnlCaVlXTnJJSFJ2SUVGeWNtRjVRblZtWm1WeUlHbHVjM1JoYm5ScFlYUnBiMjVjSWlrN2NtVjBkWEp1SUVSaEtHTXNZU3hpS1gwcEtYMTJZWElnVkR0bWRXNWpkR2x2YmlCVktHRXBlM1JvYVhNdWJtRnRaVDFjSWtWNGFYUlRkR0YwZFhOY0lqdDBhR2x6TG0xbGMzTmhaMlU5WUZCeWIyZHlZVzBnZEdWeWJXbHVZWFJsWkNCM2FYUm9JR1Y0YVhRb0pIdGhmU2xnTzNSb2FYTXVjM1JoZEhWelBXRjlYRzVtZFc1amRHbHZiaUJHWVNoaEtYdGhMblJsY20xcGJtRjBaU2dwTzJFdWIyNXRaWE56WVdkbFBTZ3BQVDU3ZlgxbWRXNWpkR2x2YmlCSFlTaGhLWHNvWVQxV0xreGhXMkZkS1h4OFN5Z3BPMVl1YkdJb1lTbDlablZ1WTNScGIyNGdTR0VvWVNsN2RtRnlJR0k5Vmk1bVlpZ3BPMmxtS0NGaUtYSmxkSFZ5YmlBMk8xWXVUMkV1Y0hWemFDaGlLVHRXTGt4aFcyRXVUbUZkUFdJN1lpNU9ZVDFoTGs1aE8zWmhjaUJqUFh0amJXUTZYQ0p5ZFc1Y0lpeHpkR0Z5ZEY5eWIzVjBhVzVsT21FdWJXSXNZWEpuT21FdVpXSXNjSFJvY21WaFpGOXdkSEk2WVM1T1lYMDdRaVltWWk1MWJuSmxaaWdwTzJJdWNHOXpkRTFsYzNOaFoyVW9ZeXhoTG5OaUtUdHlaWFIxY200Z01IMWNiblpoY2lCSllUMWNJblZ1WkdWbWFXNWxaRndpSVQxMGVYQmxiMllnVkdWNGRFUmxZMjlrWlhJL2JtVjNJRlJsZUhSRVpXTnZaR1Z5S0Z3aWRYUm1PRndpS1RwMmIybGtJREFzU21FOUtHRXNZaXhqS1QwK2UySStQajQ5TUR0MllYSWdaVDFpSzJNN1ptOXlLR005WWp0aFcyTmRKaVloS0dNK1BXVXBPeWtySzJNN2FXWW9NVFk4WXkxaUppWmhMbUoxWm1abGNpWW1TV0VwY21WMGRYSnVJRWxoTG1SbFkyOWtaU2hoTG1KMVptWmxjaUJwYm5OMFlXNWpaVzltSUZOb1lYSmxaRUZ5Y21GNVFuVm1abVZ5UDJFdWMyeHBZMlVvWWl4aktUcGhMbk4xWW1GeWNtRjVLR0lzWXlrcE8yWnZjaWhsUFZ3aVhDSTdZanhqT3lsN2RtRnlJR2c5WVZ0aUt5dGRPMmxtS0dnbU1USTRLWHQyWVhJZ1p6MWhXMklySzEwbU5qTTdhV1lvTVRreVBUMG9hQ1l5TWpRcEtXVXJQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvS0dnbU16RXBQRHcyZkdjcE8yVnNjMlY3ZG1GeUlHczlZVnRpS3l0ZEpqWXpPMmc5TWpJMFBUMG9hQ1l5TkRBcFB5aG9KakUxS1R3OE1USjhaenc4Tm54ck9paG9KamNwUER3eE9IeG5QRHd4TW54clBEdzJmR0ZiWWlzclhTWTJNenMyTlRVek5qNW9QMlVyUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb2FDazZLR2d0UFRZMU5UTTJMR1VyUFZOMGNtbHVaeTVtY205dFEyaGhja052WkdVb05UVXlPVFo4YUQ0K1hHNHhNQ3cxTmpNeU1IeG9KakV3TWpNcEtYMTlaV3h6WlNCbEt6MVRkSEpwYm1jdVpuSnZiVU5vWVhKRGIyUmxLR2dwZlhKbGRIVnliaUJsZlN4TFlUMG9ZU3hpS1QwK0tHRStQajQ5TUNrL1NtRW9iaWdwTEdFc1lpazZYQ0pjSWp0bWRXNWpkR2x2YmlCTVlTaGhLWHRwWmloRUtYSmxkSFZ5YmlCWEtERXNNU3hoS1R0T1BXRTdhV1lvSVZBb0tTbDdWaTV1WWlncE8ybG1LSGN1YjI1RmVHbDBLWGN1YjI1RmVHbDBLR0VwTzAwOUlUQjllaWhoTEc1bGR5QlZLR0VwS1gxY2JuWmhjaUJPWVQxaFBUNTdUajFoTzJsbUtFUXBkR2h5YjNjZ1RXRW9ZU2tzWENKMWJuZHBibVJjSWp0TVlTaGhLWDBzVmoxN1VtRTZXMTBzVDJFNlcxMHNXbUU2VzEwc1RHRTZlMzBzVm1FNlpuVnVZM1JwYjI0b0tYdEVQMVl1YUdJb0tUcFdMbWRpS0NsOUxHZGlPbVoxYm1OMGFXOXVLQ2w3ZEdFdWRXNXphR2xtZENnb0tUMCtlM2xoS0NrN1ZpNXBZaWdvS1QwK2VtRW9LU2w5S1gwc2FHSTZablZ1WTNScGIyNG9LWHRXTG5KbFkyVnBkbVZQWW1wbFkzUlVjbUZ1YzJabGNqMVdMbXRpTzFZdWRHaHlaV0ZrU1c1cGRGUk1VejFXTGxsaE8xWXVjMlYwUlhocGRGTjBZWFIxY3oxV0xsaGhPMjV2UlhocGRGSjFiblJwYldVOUlURjlMRmhoT21aMWJtTjBhVzl1S0dFcGUwNDlZWDBzZUdJNlcxd2lKSFJsY20xcGJtRjBaVmR2Y210bGNsd2lYU3h1WWpwbWRXNWpkR2x2YmlncGUyWnZjaWgyWVhJZ1lTQnZaaUJXTGs5aEtVWmhLR0VwTzJadmNpaGhJRzltSUZZdVVtRXBSbUVvWVNrN1ZpNVNZVDFiWFR0V0xrOWhQVnRkTzFZdVRHRTlXMTE5TEd4aU9tWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXRXVUbUU3WkdWc1pYUmxJRll1VEdGYllsMDdWaTVTWVM1d2RYTm9LR0VwTzFZdVQyRXVjM0JzYVdObEtGWXVUMkV1YVc1a1pYaFBaaWhoS1N3eEtUdGhMazVoUFRBN1QyRW9ZaWw5TEd0aU9tWjFibU4wYVc5dUtDbDdmU3hjYmxsaE9tWjFibU4wYVc5dUtDbDdWaTVhWVM1bWIzSkZZV05vS0dFOVBtRW9LU2w5TEdwaU9tRTlQbTVsZHlCUWNtOXRhWE5sS0dJOVBudGhMbTl1YldWemMyRm5aVDFuUFQ1N1p6MW5MbVJoZEdFN2RtRnlJR3M5Wnk1amJXUTdhV1lvWnk1MFlYSm5aWFJVYUhKbFlXUW1KbWN1ZEdGeVoyVjBWR2h5WldGa0lUMVlLQ2twZTNaaGNpQjBQVll1VEdGYlp5NTNZbDA3ZEQ5MExuQnZjM1JOWlhOellXZGxLR2NzWnk1MGNtRnVjMlpsY2t4cGMzUXBPa2tvSjBsdWRHVnlibUZzSUdWeWNtOXlJU0JYYjNKclpYSWdjMlZ1ZENCaElHMWxjM05oWjJVZ1hDSW5LMnNySjF3aUlIUnZJSFJoY21kbGRDQndkR2h5WldGa0lDY3JaeTUwWVhKblpYUlVhSEpsWVdRclhDSXNJR0oxZENCMGFHRjBJSFJvY21WaFpDQnVieUJzYjI1blpYSWdaWGhwYzNSeklWd2lLWDFsYkhObElHbG1LRndpWTJobFkydE5ZV2xzWW05NFhDSTlQVDFyS1Zrb0tUdGxiSE5sSUdsbUtGd2ljM0JoZDI1VWFISmxZV1JjSWowOVBXc3BTR0VvWnlrN1pXeHpaU0JwWmloY0ltTnNaV0Z1ZFhCVWFISmxZV1JjSWowOVBXc3BSMkVvWnk1MGFISmxZV1FwTzJWc2MyVWdhV1lvWENKcmFXeHNWR2h5WldGa1hDSTlQVDFyS1djOVp5NTBhSEpsWVdRc2F6MVdMa3hoVzJkZExHUmxiR1YwWlNCV0xreGhXMmRkTEVaaEtHc3BMRTloS0djcExGWXVUMkV1YzNCc2FXTmxLRll1VDJFdWFXNWtaWGhQWmlocktTeGNiakVwTEdzdVRtRTlNRHRsYkhObElHbG1LRndpWTJGdVkyVnNWR2h5WldGa1hDSTlQVDFyS1ZZdVRHRmJaeTUwYUhKbFlXUmRMbkJ2YzNSTlpYTnpZV2RsS0h0amJXUTZYQ0pqWVc1alpXeGNJbjBwTzJWc2MyVWdhV1lvWENKc2IyRmtaV1JjSWowOVBXc3BZUzVzYjJGa1pXUTlJVEFzWWloaEtUdGxiSE5sSUdsbUtGd2lZV3hsY25SY0lqMDlQV3NwWVd4bGNuUW9YQ0pVYUhKbFlXUWdYQ0lyWnk1MGFISmxZV1JKWkN0Y0lqb2dYQ0lyWnk1MFpYaDBLVHRsYkhObElHbG1LRndpYzJWMGFXMXRaV1JwWVhSbFhDSTlQVDFuTG5SaGNtZGxkQ2xoTG5CdmMzUk5aWE56WVdkbEtHY3BPMlZzYzJVZ2FXWW9YQ0pqWVd4c1NHRnVaR3hsY2x3aVBUMDlheWwzVzJjdWFHRnVaR3hsY2wwb0xpNHVaeTVoY21kektUdGxiSE5sSUdzbUpra29YQ0ozYjNKclpYSWdjMlZ1ZENCaGJpQjFibXR1YjNkdUlHTnZiVzFoYm1RZ1hDSXJheWw5TzJFdWIyNWxjbkp2Y2oxblBUNTdTU2hjSW5kdmNtdGxjaUJ6Wlc1MElHRnVJR1Z5Y205eUlTQmNJaXRuTG1acGJHVnVZVzFsSzF3aU9sd2lLMmN1YkdsdVpXNXZLMXdpT2lCY0lpdG5MbTFsYzNOaFoyVXBPM1JvY205M0lHYzdmVHRDSmlZb1lTNXZiaWhjSW0xbGMzTmhaMlZjSWl4bWRXNWpkR2x2YmlobktYdGhMbTl1YldWemMyRm5aU2g3WkdGMFlUcG5mU2w5S1N4aExtOXVLRndpWlhKeWIzSmNJaXhtZFc1amRHbHZiaWhuS1h0aExtOXVaWEp5YjNJb1p5bDlLU2s3WEc1MllYSWdZejFiWFN4bFBWdGNJbTl1UlhocGRGd2lMRndpYjI1QlltOXlkRndpTEZ3aWNISnBiblJjSWl4Y0luQnlhVzUwUlhKeVhDSmRMR2c3Wm05eUtHZ2diMllnWlNsM0xtaGhjMDkzYmxCeWIzQmxjblI1S0dncEppWmpMbkIxYzJnb2FDazdZUzV3YjNOMFRXVnpjMkZuWlNoN1kyMWtPbHdpYkc5aFpGd2lMR2hoYm1Sc1pYSnpPbU1zZFhKc1QzSkNiRzlpT25jdWJXRnBibE5qY21sd2RGVnliRTl5UW14dllueDhYM05qY21sd2RFUnBjaXgzWVhOdFRXVnRiM0o1T21Rc2QyRnpiVTF2WkhWc1pUcHlZWDBwZlNrc2FXSTZablZ1WTNScGIyNG9ZU2w3WVNncGZTeGpZanBtZFc1amRHbHZiaWdwZTNaaGNpQmhQV3hoS0Z3aWIzSjBMWGRoYzIwdGRHaHlaV0ZrWldRdWQyOXlhMlZ5TG1welhDSXBPMkU5Ym1WM0lGZHZjbXRsY2loaEtUdFdMbEpoTG5CMWMyZ29ZU2w5TEdaaU9tWjFibU4wYVc5dUtDbDdNRDA5Vmk1U1lTNXNaVzVuZEdnbUppaFdMbU5pS0Nrc1ZpNXFZaWhXTGxKaFd6QmRLU2s3Y21WMGRYSnVJRll1VW1FdWNHOXdLQ2w5ZlR0M0xsQlVhSEpsWVdROVZqdDJZWElnVUdFOVlUMCtlMlp2Y2lnN01EeGhMbXhsYm1kMGFEc3BZUzV6YUdsbWRDZ3BLSGNwZlR0Y2JuY3VaWE4wWVdKc2FYTm9VM1JoWTJ0VGNHRmpaVDFtZFc1amRHbHZiaWdwZTNaaGNpQmhQVmdvS1N4aVBYQW9LVnRoS3pVeVBqNHlQajQrTUYwN1lUMXdLQ2xiWVNzMU5qNCtNajQrUGpCZE8xRmhLR0lzWWkxaEtUdFNZU2hpS1gwN1puVnVZM1JwYjI0Z1RXRW9ZU2w3YVdZb1JDbHlaWFIxY200Z1Z5Z3lMREFzWVNrN1RtRW9ZU2w5ZG1GeUlGTmhQVnRkTzNjdWFXNTJiMnRsUlc1MGNubFFiMmx1ZEQxbWRXNWpkR2x2YmloaExHSXBlM1poY2lCalBWTmhXMkZkTzJOOGZDaGhQajFUWVM1c1pXNW5kR2dtSmloVFlTNXNaVzVuZEdnOVlTc3hLU3hUWVZ0aFhUMWpQWE5oTG1kbGRDaGhLU2s3WVQxaktHSXBPMUFvS1Q5V0xsaGhLR0VwT2xSaEtHRXBmVHRtZFc1amRHbHZiaUJWWVNoaEtYdDBhR2x6TGxWaFBXRXRNalE3ZEdocGN5NWlZajFtZFc1amRHbHZiaWhpS1h0eUtDbGJkR2hwY3k1VllTczBQajR5UGo0K01GMDlZbjA3ZEdocGN5NWhZajFtZFc1amRHbHZiaWhpS1h0eUtDbGJkR2hwY3k1VllTczRQajR5UGo0K01GMDlZbjA3ZEdocGN5NVdZVDFtZFc1amRHbHZiaWhpTEdNcGUzUm9hWE11SkdFb0tUdDBhR2x6TG1KaUtHSXBPM1JvYVhNdVlXSW9ZeWw5TzNSb2FYTXVKR0U5Wm5WdVkzUnBiMjRvS1h0eUtDbGJkR2hwY3k1VllTc3hOajQrTWo0K1BqQmRQVEI5ZlZ4dWRtRnlJRlpoUFRBc1YyRTlNRHRtZFc1amRHbHZiaUJZWVNoaExHSXNZeXhsS1h0eVpYUjFjbTRnUkQ5WEtETXNNU3hoTEdJc1l5eGxLVHBaWVNoaExHSXNZeXhsS1gxbWRXNWpkR2x2YmlCWllTaGhMR0lzWXl4bEtYdGhQajQrUFRBN1lqNCtQajB3TzJNK1BqNDlNRHRsUGo0K1BUQTdhV1lvWENKMWJtUmxabWx1WldSY0lqMDlkSGx3Wlc5bUlGTm9ZWEpsWkVGeWNtRjVRblZtWm1WeUtYSmxkSFZ5YmlCSktGd2lRM1Z5Y21WdWRDQmxiblpwY205dWJXVnVkQ0JrYjJWeklHNXZkQ0J6ZFhCd2IzSjBJRk5vWVhKbFpFRnljbUY1UW5WbVptVnlMQ0J3ZEdoeVpXRmtjeUJoY21VZ2JtOTBJR0YyWVdsc1lXSnNaU0ZjSWlrc05qdDJZWElnYUQxYlhUdHBaaWhFSmlZd1BUMDlhQzVzWlc1bmRHZ3BjbVYwZFhKdUlGaGhLR0VzWWl4akxHVXBPMkU5ZTIxaU9tTXNUbUU2WVN4bFlqcGxMSE5pT21oOU8zSmxkSFZ5YmlCRVB5aGhMblZpUFZ3aWMzQmhkMjVVYUhKbFlXUmNJaXh3YjNOMFRXVnpjMkZuWlNoaExHZ3BMREFwT2toaEtHRXBmV1oxYm1OMGFXOXVJRnBoS0dFc1lpeGpLWHR5WlhSMWNtNGdSRDlYS0RRc01TeGhMR0lzWXlrNk1IMW1kVzVqZEdsdmJpQWtZU2hoTEdJcGUybG1LRVFwY21WMGRYSnVJRmNvTlN3eExHRXNZaWw5WEc1MllYSWdZV0k5WVQwK2UyWnZjaWgyWVhJZ1lqMHdMR005TUR0alBHRXViR1Z1WjNSb095c3JZeWw3ZG1GeUlHVTlZUzVqYUdGeVEyOWtaVUYwS0dNcE96RXlOejQ5WlQ5aUt5czZNakEwTno0OVpUOWlLejB5T2pVMU1qazJQRDFsSmlZMU56TTBNejQ5WlQ4b1lpczlOQ3dySzJNcE9tSXJQVE45Y21WMGRYSnVJR0o5TEdKaVBTaGhMR0lzWXl4bEtUMCtlMk0rUGo0OU1EdHBaaWdoS0RBOFpTa3BjbVYwZFhKdUlEQTdkbUZ5SUdnOVl6dGxQV01yWlMweE8yWnZjaWgyWVhJZ1p6MHdPMmM4WVM1c1pXNW5kR2c3S3l0bktYdDJZWElnYXoxaExtTm9ZWEpEYjJSbFFYUW9aeWs3YVdZb05UVXlPVFk4UFdzbUpqVTNNelF6UGoxcktYdDJZWElnZEQxaExtTm9ZWEpEYjJSbFFYUW9LeXRuS1R0clBUWTFOVE0yS3lnb2F5WXhNREl6S1R3OE1UQXBmSFFtTVRBeU0zMXBaaWd4TWpjK1BXc3BlMmxtS0dNK1BXVXBZbkpsWVdzN1lsdGpLeXMrUGo0d1hUMXJmV1ZzYzJWN2FXWW9NakEwTno0OWF5bDdhV1lvWXlzeFBqMWxLV0p5WldGck8ySmJZeXNyUGo0K01GMDlNVGt5ZkdzK1BqWjlaV3h6Wlh0cFppZzJOVFV6TlQ0OWF5bDdhV1lvWXlzeVBqMWxLV0p5WldGck8ySmJZeXNyUGo0K01GMDlNakkwZkdzK1BqRXlmV1ZzYzJWN2FXWW9ZeXN6UGoxbEtXSnlaV0ZyTzJKYll5c3JQajQrTUYwOU1qUXdmR3MrUGx4dU1UZzdZbHRqS3lzK1BqNHdYVDB4TWpoOGF6NCtNVEltTmpOOVlsdGpLeXMrUGo0d1hUMHhNamg4YXo0K05pWTJNMzFpVzJNckt6NCtQakJkUFRFeU9IeHJKall6ZlgxaVcyTStQajR3WFQwd08zSmxkSFZ5YmlCakxXaDlMR05pUFNoaExHSXNZeWs5UG1KaUtHRXNiaWdwTEdJc1l5azdablZ1WTNScGIyNGdaR0lvWVN4aUtYdHBaaWhFS1hKbGRIVnliaUJYS0RZc01TeGhMR0lwZldaMWJtTjBhVzl1SUdWaUtHRXNZaXhqS1h0cFppaEVLWEpsZEhWeWJpQlhLRGNzTVN4aExHSXNZeWw5Wm5WdVkzUnBiMjRnWm1Jb1lTeGlMR01wZTNKbGRIVnliaUJFUDFjb09Dd3hMR0VzWWl4aktUb3dmV1oxYm1OMGFXOXVJR2RpS0dFc1lpbDdhV1lvUkNseVpYUjFjbTRnVnlnNUxERXNZU3hpS1gxbWRXNWpkR2x2YmlCb1lpaGhMR0lzWXlsN2FXWW9SQ2x5WlhSMWNtNGdWeWd4TUN3eExHRXNZaXhqS1gxbWRXNWpkR2x2YmlCcFlpaGhMR0lzWXl4bEtYdHBaaWhFS1hKbGRIVnliaUJYS0RFeExERXNZU3hpTEdNc1pTbDlablZ1WTNScGIyNGdhbUlvWVN4aUxHTXNaU2w3YVdZb1JDbHlaWFIxY200Z1Z5Z3hNaXd4TEdFc1lpeGpMR1VwZldaMWJtTjBhVzl1SUd0aUtHRXNZaXhqTEdVcGUybG1LRVFwY21WMGRYSnVJRmNvTVRNc01TeGhMR0lzWXl4bEtYMWNibVoxYm1OMGFXOXVJR3hpS0dFcGUybG1LRVFwY21WMGRYSnVJRmNvTVRRc01TeGhLWDFtZFc1amRHbHZiaUJ0WWloaExHSXBlMmxtS0VRcGNtVjBkWEp1SUZjb01UVXNNU3hoTEdJcGZXWjFibU4wYVc5dUlHNWlLR0VzWWl4aktYdHBaaWhFS1hKbGRIVnliaUJYS0RFMkxERXNZU3hpTEdNcGZYWmhjaUJ2WWoxaFBUNTdhV1lvSVUwcGRISjVlMmxtS0dFb0tTd2hVQ2dwS1hSeWVYdEVQMVJoS0U0cE9rNWhLRTRwZldOaGRHTm9LR0lwZTJJZ2FXNXpkR0Z1WTJWdlppQlZmSHhjSW5WdWQybHVaRndpUFQxaWZIeDZLREVzWWlsOWZXTmhkR05vS0dJcGUySWdhVzV6ZEdGdVkyVnZaaUJWZkh4Y0luVnVkMmx1WkZ3aVBUMWlmSHg2S0RFc1lpbDlmVHRtZFc1amRHbHZiaUJ3WWloaEtYdGhQajQrUFRBN1hDSm1kVzVqZEdsdmJsd2lQVDA5ZEhsd1pXOW1JRUYwYjIxcFkzTXVkR0ltSmloQmRHOXRhV056TG5SaUtIQW9LU3hoUGo0eUxHRXBMblpoYkhWbExuUm9aVzRvV1Nrc1lTczlNVEk0TEVGMGIyMXBZM011YzNSdmNtVW9jQ2dwTEdFK1BqSXNNU2twZlhjdVgxOWxiWE5qY21sd2RHVnVYM1JvY21WaFpGOXRZV2xzWW05NFgyRjNZV2wwUFhCaU8yWjFibU4wYVc5dUlGa29LWHQyWVhJZ1lUMVlLQ2s3WVNZbUtIQmlLR0VwTEc5aUtDZ3BQVDV4WWlncEtTbDlkeTVqYUdWamEwMWhhV3hpYjNnOVdUdGNiblpoY2lCYVBXRTlQakE5UFQxaEpUUW1KaWd3SVQwOVlTVXhNREI4ZkRBOVBUMWhKVFF3TUNrc2NtSTlXekFzTXpFc05qQXNPVEVzTVRJeExERTFNaXd4T0RJc01qRXpMREkwTkN3eU56UXNNekExTERNek5WMHNjMkk5V3pBc016RXNOVGtzT1RBc01USXdMREUxTVN3eE9ERXNNakV5TERJME15d3lOek1zTXpBMExETXpORjA3Wm5WdVkzUnBiMjRnZEdJb1lTeGlMR01zWlN4b0xHY3NheXgwS1h0eVpYUjFjbTRnUkQ5WEtERTNMREVzWVN4aUxHTXNaU3hvTEdjc2F5eDBLVG90TlRKOVpuVnVZM1JwYjI0Z2RXSW9ZU3hpTEdNc1pTeG9MR2NzYXlsN2FXWW9SQ2x5WlhSMWNtNGdWeWd4T0N3eExHRXNZaXhqTEdVc2FDeG5MR3NwZlhaaGNpQjNZajFoUFQ1N2RtRnlJR0k5WVdJb1lTa3JNU3hqUFhaaUtHSXBPMk1tSm1OaUtHRXNZeXhpS1R0eVpYUjFjbTRnWTMwc2VXSTlZVDArZTNaaGNpQmlQWGhpS0NrN1lUMWhLQ2s3VW1Fb1lpazdjbVYwZFhKdUlHRjlPMXh1Wm5WdVkzUnBiMjRnVnloaExHSXBlM1poY2lCalBXRnlaM1Z0Wlc1MGN5NXNaVzVuZEdndE1peGxQV0Z5WjNWdFpXNTBjenR5WlhSMWNtNGdlV0lvS0NrOVBudG1iM0lvZG1GeUlHZzllbUlvT0NwaktTeG5QV2crUGpNc2F6MHdPMnM4WXp0ckt5c3BlM1poY2lCMFBXVmJNaXRyWFR0bFlTZ3BXMmNyYXo0K1BqQmRQWFI5Y21WMGRYSnVJRUZpS0dFc1l5eG9MR0lwZlNsOVhHNTJZWElnUW1JOVcxMHNRMkk5ZTMwc1JXSTlLQ2s5UG50cFppZ2hSR0lwZTNaaGNpQmhQWHRWVTBWU09sd2lkMlZpWDNWelpYSmNJaXhNVDBkT1FVMUZPbHdpZDJWaVgzVnpaWEpjSWl4UVFWUklPbHdpTDF3aUxGQlhSRHBjSWk5Y0lpeElUMDFGT2x3aUwyaHZiV1V2ZDJWaVgzVnpaWEpjSWl4TVFVNUhPaWhjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnYm1GMmFXZGhkRzl5SmladVlYWnBaMkYwYjNJdWJHRnVaM1ZoWjJWekppWnVZWFpwWjJGMGIzSXViR0Z1WjNWaFoyVnpXekJkZkh4Y0lrTmNJaWt1Y21Wd2JHRmpaU2hjSWkxY0lpeGNJbDljSWlrclhDSXVWVlJHTFRoY0lpeGZPbXBoZkh4Y0lpNHZkR2hwY3k1d2NtOW5jbUZ0WENKOUxHSTdabTl5S0dJZ2FXNGdRMklwZG05cFpDQXdQVDA5UTJKYllsMC9aR1ZzWlhSbElHRmJZbDA2WVZ0aVhUMURZbHRpWFR0MllYSWdZejFiWFR0bWIzSW9ZaUJwYmlCaEtXTXVjSFZ6YUNoZ0pIdGlmVDBrZTJGYllsMTlZQ2s3UkdJOVkzMXlaWFIxY200Z1JHSjlMRVJpTzF4dVpuVnVZM1JwYjI0Z1JtSW9ZU3hpS1h0cFppaEVLWEpsZEhWeWJpQlhLREU1TERFc1lTeGlLVHRoUGo0K1BUQTdZajQrUGowd08zWmhjaUJqUFRBN1JXSW9LUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR1VzYUNsN2RtRnlJR2M5WWl0ak8yZzljaWdwVzJFck5DcG9QajR5UGo0K01GMDlaenRtYjNJb1p6MHdPMmM4WlM1c1pXNW5kR2c3S3l0bktXRmhLQ2xiYUNzclBqNHdQajQrTUYwOVpTNWphR0Z5UTI5a1pVRjBLR2NwTzJGaEtDbGJhRDQrTUQ0K1BqQmRQVEE3WXlzOVpTNXNaVzVuZEdnck1YMHBPM0psZEhWeWJpQXdmV1oxYm1OMGFXOXVJRWRpS0dFc1lpbDdhV1lvUkNseVpYUjFjbTRnVnlneU1Dd3hMR0VzWWlrN1lUNCtQajB3TzJJK1BqNDlNRHQyWVhJZ1l6MUZZaWdwTzNJb0tWdGhQajR5UGo0K01GMDlZeTVzWlc1bmRHZzdkbUZ5SUdVOU1EdGpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9hQ2w3WlNzOWFDNXNaVzVuZEdnck1YMHBPM0lvS1Z0aVBqNHlQajQrTUYwOVpUdHlaWFIxY200Z01IMW1kVzVqZEdsdmJpQklZaWhoS1h0eVpYUjFjbTRnUkQ5WEtESXhMREVzWVNrNk5USjlablZ1WTNScGIyNGdUR0lvWVN4aUxHTXNaU2w3Y21WMGRYSnVJRVEvVnlneU1pd3hMR0VzWWl4akxHVXBPalV5ZlZ4dVpuVnVZM1JwYjI0Z1RXSW9ZU3hpTEdNc1pTeG9LWHR5WlhSMWNtNGdSRDlYS0RJekxERXNZU3hpTEdNc1pTeG9LVG8zTUgxMllYSWdUbUk5VzI1MWJHd3NXMTBzVzExZE8yWjFibU4wYVc5dUlFOWlLR0VzWWl4akxHVXBlMmxtS0VRcGNtVjBkWEp1SUZjb01qUXNNU3hoTEdJc1l5eGxLVHRpUGo0K1BUQTdZejQrUGowd08yVStQajQ5TUR0bWIzSW9kbUZ5SUdnOU1DeG5QVEE3Wnp4ak8yY3JLeWw3ZG1GeUlHczljaWdwVzJJK1BqSStQajR3WFN4MFBYSW9LVnRpS3pRK1BqSStQajR3WFR0aUt6MDRPMlp2Y2loMllYSWdRejB3TzBNOGREdERLeXNwZTNaaGNpQjJQVzRvS1Z0ckswTStQajR3WFN4NVBVNWlXMkZkT3pBOVBUMTJmSHd4TUQwOVBYWS9LQ2d4UFQwOVlUOXhZVHBKS1NoS1lTaDVMREFwS1N4NUxteGxibWQwYUQwd0tUcDVMbkIxYzJnb2RpbDlhQ3M5ZEgxeUtDbGJaVDQrTWo0K1BqQmRQV2c3Y21WMGRYSnVJREI5ZG1GeUlGQmlQVnN6TVN3eU9Td3pNU3d6TUN3ek1Td3pNQ3d6TVN3ek1Td3pNQ3d6TVN3ek1Dd3pNVjBzVVdJOVd6TXhMREk0TERNeExETXdMRE14TERNd0xETXhMRE14TERNd0xETXhMRE13TERNeFhUdG1kVzVqZEdsdmJpQlNZaWhoS1h0MllYSWdZajFCY25KaGVTaGhZaWhoS1NzeEtUdGlZaWhoTEdJc01DeGlMbXhsYm1kMGFDazdjbVYwZFhKdUlHSjlYRzUyWVhJZ1UySTlLR0VzWWlrOVBudGhZU2dwTG5ObGRDaGhMR0krUGo0d0tYMDdYRzVtZFc1amRHbHZiaUJVWWloaExHSXNZeXhsS1h0bWRXNWpkR2x2YmlCb0tHWXNjU3gxS1h0bWIzSW9aajFjSW01MWJXSmxjbHdpUFQxMGVYQmxiMllnWmo5bUxuUnZVM1J5YVc1bktDazZabng4WENKY0lqdG1MbXhsYm1kMGFEeHhPeWxtUFhWYk1GMHJaanR5WlhSMWNtNGdabjFtZFc1amRHbHZiaUJuS0dZc2NTbDdjbVYwZFhKdUlHZ29aaXh4TEZ3aU1Gd2lLWDFtZFc1amRHbHZiaUJyS0dZc2NTbDdablZ1WTNScGIyNGdkU2hKWWlsN2NtVjBkWEp1SURBK1NXSS9MVEU2TUR4SllqOHhPakI5ZG1GeUlFYzdNRDA5UFNoSFBYVW9aaTVuWlhSR2RXeHNXV1ZoY2lncExYRXVaMlYwUm5Wc2JGbGxZWElvS1NrcEppWXdQVDA5S0VjOWRTaG1MbWRsZEUxdmJuUm9LQ2t0Y1M1blpYUk5iMjUwYUNncEtTa21KaWhIUFhVb1ppNW5aWFJFWVhSbEtDa3RjUzVuWlhSRVlYUmxLQ2twS1R0eVpYUjFjbTRnUjMxbWRXNWpkR2x2YmlCMEtHWXBlM04zYVhSamFDaG1MbWRsZEVSaGVTZ3BLWHRqWVhObElEQTZjbVYwZFhKdUlHNWxkeUJFWVhSbEtHWXVaMlYwUm5Wc2JGbGxZWElvS1MweExERXhMREk1S1R0allYTmxJREU2Y21WMGRYSnVJR1k3WTJGelpTQXlPbkpsZEhWeWJpQnVaWGNnUkdGMFpTaG1MbWRsZEVaMWJHeFpaV0Z5S0Nrc01Dd3pLVHRqWVhObElETTZjbVYwZFhKdUlHNWxkeUJFWVhSbEtHWXVaMlYwUm5Wc2JGbGxZWElvS1N4Y2JqQXNNaWs3WTJGelpTQTBPbkpsZEhWeWJpQnVaWGNnUkdGMFpTaG1MbWRsZEVaMWJHeFpaV0Z5S0Nrc01Dd3hLVHRqWVhObElEVTZjbVYwZFhKdUlHNWxkeUJFWVhSbEtHWXVaMlYwUm5Wc2JGbGxZWElvS1MweExERXhMRE14S1R0allYTmxJRFk2Y21WMGRYSnVJRzVsZHlCRVlYUmxLR1l1WjJWMFJuVnNiRmxsWVhJb0tTMHhMREV4TERNd0tYMTlablZ1WTNScGIyNGdReWhtS1h0MllYSWdjVDFtTGxCaE8yWnZjaWhtUFc1bGR5QkVZWFJsS0NodVpYY2dSR0YwWlNobUxsRmhLekU1TURBc01Dd3hLU2t1WjJWMFZHbHRaU2dwS1Rzd1BIRTdLWHQyWVhJZ2RUMW1MbWRsZEUxdmJuUm9LQ2tzUnowb1dpaG1MbWRsZEVaMWJHeFpaV0Z5S0NrcFAxQmlPbEZpS1Z0MVhUdHBaaWh4UGtjdFppNW5aWFJFWVhSbEtDa3BjUzA5UnkxbUxtZGxkRVJoZEdVb0tTc3hMR1l1YzJWMFJHRjBaU2d4S1N3eE1UNTFQMll1YzJWMFRXOXVkR2dvZFNzeEtUb29aaTV6WlhSTmIyNTBhQ2d3S1N4bUxuTmxkRVoxYkd4WlpXRnlLR1l1WjJWMFJuVnNiRmxsWVhJb0tTc3hLU2s3Wld4elpYdG1Mbk5sZEVSaGRHVW9aaTVuWlhSRVlYUmxLQ2tyY1NrN1luSmxZV3Q5ZlhVOWJtVjNJRVJoZEdVb1ppNW5aWFJHZFd4c1dXVmhjaWdwS3pFc01DdzBLVHR4UFhRb2JtVjNJRVJoZEdVb1ppNW5aWFJHZFd4c1dXVmhjaWdwTEZ4dU1DdzBLU2s3ZFQxMEtIVXBPM0psZEhWeWJpQXdQajFyS0hFc1ppay9NRDQ5YXloMUxHWXBQMll1WjJWMFJuVnNiRmxsWVhJb0tTc3hPbVl1WjJWMFJuVnNiRmxsWVhJb0tUcG1MbWRsZEVaMWJHeFpaV0Z5S0NrdE1YMWhQajQrUFRBN1lqNCtQajB3TzJNK1BqNDlNRHRsUGo0K1BUQTdkbUZ5SUhZOWNDZ3BXMlVyTkRBK1BqSStQajR3WFR0bFBYdHhZanB3S0NsYlpUNCtNajQrUGpCZExIQmlPbkFvS1Z0bEt6UStQakkrUGo0d1hTeFRZVHB3S0NsYlpTczRQajR5UGo0K01GMHNWMkU2Y0NncFcyVXJNVEkrUGpJK1BqNHdYU3hVWVRwd0tDbGJaU3N4Tmo0K01qNCtQakJkTEZGaE9uQW9LVnRsS3pJd1BqNHlQajQrTUYwc1RXRTZjQ2dwVzJVck1qUStQakkrUGo0d1hTeFFZVHB3S0NsYlpTc3lPRDQrTWo0K1BqQmRMSGxpT25Bb0tWdGxLek15UGo0eVBqNCtNRjBzYjJJNmNDZ3BXMlVyTXpZK1BqSStQajR3WFN4eVlqcDJQMHRoS0hZcE9sd2lYQ0o5TzJNOVMyRW9ZeWs3ZGoxN1hDSWxZMXdpT2x3aUpXRWdKV0lnSldRZ0pVZzZKVTA2SlZNZ0pWbGNJaXhjSWlWRVhDSTZYQ0lsYlM4bFpDOGxlVndpTEZ3aUpVWmNJanBjSWlWWkxTVnRMU1ZrWENJc1hDSWxhRndpT2x3aUpXSmNJaXhjSWlWeVhDSTZYQ0lsU1RvbFRUb2xVeUFsY0Z3aUxGd2lKVkpjSWpwY0lpVklPaVZOWENJc1hDSWxWRndpT2x3aUpVZzZKVTA2SlZOY0lpeGNJaVY0WENJNlhDSWxiUzhsWkM4bGVWd2lMRnh1WENJbFdGd2lPbHdpSlVnNkpVMDZKVk5jSWl4Y0lpVkZZMXdpT2x3aUpXTmNJaXhjSWlWRlExd2lPbHdpSlVOY0lpeGNJaVZGZUZ3aU9sd2lKVzB2SldRdkpYbGNJaXhjSWlWRldGd2lPbHdpSlVnNkpVMDZKVk5jSWl4Y0lpVkZlVndpT2x3aUpYbGNJaXhjSWlWRldWd2lPbHdpSlZsY0lpeGNJaVZQWkZ3aU9sd2lKV1JjSWl4Y0lpVlBaVndpT2x3aUpXVmNJaXhjSWlWUFNGd2lPbHdpSlVoY0lpeGNJaVZQU1Z3aU9sd2lKVWxjSWl4Y0lpVlBiVndpT2x3aUpXMWNJaXhjSWlWUFRWd2lPbHdpSlUxY0lpeGNJaVZQVTF3aU9sd2lKVk5jSWl4Y0lpVlBkVndpT2x3aUpYVmNJaXhjSWlWUFZWd2lPbHdpSlZWY0lpeGNJaVZQVmx3aU9sd2lKVlpjSWl4Y0lpVlBkMXdpT2x3aUpYZGNJaXhjSWlWUFYxd2lPbHdpSlZkY0lpeGNJaVZQZVZ3aU9sd2lKWGxjSW4wN1ptOXlLSFpoY2lCNUlHbHVJSFlwWXoxakxuSmxjR3hoWTJVb2JtVjNJRkpsWjBWNGNDaDVMRndpWjF3aUtTeDJXM2xkS1R0MllYSWdTbUk5WENKVGRXNWtZWGtnVFc5dVpHRjVJRlIxWlhOa1lYa2dWMlZrYm1WelpHRjVJRlJvZFhKelpHRjVJRVp5YVdSaGVTQlRZWFIxY21SaGVWd2lMbk53YkdsMEtGd2lJRndpS1N4TFlqMWNJa3BoYm5WaGNua2dSbVZpY25WaGNua2dUV0Z5WTJnZ1FYQnlhV3dnVFdGNUlFcDFibVVnU25Wc2VTQkJkV2QxYzNRZ1UyVndkR1Z0WW1WeUlFOWpkRzlpWlhJZ1RtOTJaVzFpWlhJZ1JHVmpaVzFpWlhKY0lpNXpjR3hwZENoY0lpQmNJaWs3ZGoxN1hDSWxZVndpT21ZOVBrcGlXMll1VFdGZExuTjFZbk4wY21sdVp5Z3dMRE1wTEZ4dVhDSWxRVndpT21ZOVBrcGlXMll1VFdGZExGd2lKV0pjSWpwbVBUNUxZbHRtTGxSaFhTNXpkV0p6ZEhKcGJtY29NQ3d6S1N4Y0lpVkNYQ0k2WmowK1MySmJaaTVVWVYwc1hDSWxRMXdpT21ZOVBtY29LR1l1VVdFck1Ua3dNQ2t2TVRBd2ZEQXNNaWtzWENJbFpGd2lPbVk5UG1jb1ppNVhZU3d5S1N4Y0lpVmxYQ0k2WmowK2FDaG1MbGRoTERJc1hDSWdYQ0lwTEZ3aUpXZGNJanBtUFQ1REtHWXBMblJ2VTNSeWFXNW5LQ2t1YzNWaWMzUnlhVzVuS0RJcExGd2lKVWRjSWpwbVBUNURLR1lwTEZ3aUpVaGNJanBtUFQ1bktHWXVVMkVzTWlrc1hDSWxTVndpT21ZOVBudG1QV1l1VTJFN01EMDlaajltUFRFeU9qRXlQR1ltSmlobUxUMHhNaWs3Y21WMGRYSnVJR2NvWml3eUtYMHNYQ0lsYWx3aU9tWTlQbnRtYjNJb2RtRnlJSEU5TUN4MVBUQTdkVHc5Wmk1VVlTMHhPM0VyUFNoYUtHWXVVV0VyTVRrd01Day9VR0k2VVdJcFczVXJLMTBwTzNKbGRIVnliaUJuS0dZdVYyRXJjU3d6S1gwc1hDSWxiVndpT21ZOVBtY29aaTVVWVNzeExESXBMRndpSlUxY0lqcG1QVDVuS0dZdWNHSXNNaWtzWENJbGJsd2lPaWdwUFQ1Y0lseGNibHdpTEZ3aUpYQmNJanBtUFQ0d1BEMW1MbE5oSmlZeE1qNW1MbE5oUDF3aVFVMWNJanBjSWxCTlhDSXNYQ0lsVTF3aU9tWTlQbWNvWmk1eFlpd3lLU3hjSWlWMFhDSTZLQ2s5UGx3aVhGeDBYQ0lzWENJbGRWd2lPbVk5UG1ZdVRXRjhmRGNzWENJbFZWd2lPbVk5UG1jb1RXRjBhQzVtYkc5dmNpZ29aaTVRWVN0Y2JqY3RaaTVOWVNrdk55a3NNaWtzWENJbFZsd2lPbVk5UG50MllYSWdjVDFOWVhSb0xtWnNiMjl5S0NobUxsQmhLemN0S0dZdVRXRXJOaWtsTnlrdk55azdNajQ5S0dZdVRXRXJNemN4TFdZdVVHRXRNaWtsTnlZbWNTc3JPMmxtS0hFcE5UTTlQWEVtSmloMVBTaG1MazFoS3pNM01TMW1MbEJoS1NVM0xEUTlQWFY4ZkRNOVBYVW1KbG9vWmk1UllTbDhmQ2h4UFRFcEtUdGxiSE5sZTNFOU5USTdkbUZ5SUhVOUtHWXVUV0VyTnkxbUxsQmhMVEVwSlRjN0tEUTlQWFY4ZkRVOVBYVW1KbG9vWmk1UllTVTBNREF0TVNrcEppWnhLeXQ5Y21WMGRYSnVJR2NvY1N3eUtYMHNYQ0lsZDF3aU9tWTlQbVl1VFdFc1hDSWxWMXdpT21ZOVBtY29UV0YwYUM1bWJHOXZjaWdvWmk1UVlTczNMU2htTGsxaEt6WXBKVGNwTHpjcExESXBMRndpSlhsY0lqcG1QVDRvWmk1UllTc3hPVEF3S1M1MGIxTjBjbWx1WnlncExuTjFZbk4wY21sdVp5Z3lLU3hjSWlWWlhDSTZaajArWmk1UllTc3hPVEF3TEZ3aUpYcGNJanBtUFQ1N1pqMW1MbTlpTzNaaGNpQnhQVEE4UFdZN1pqMU5ZWFJvTG1GaWN5aG1LUzgyTUR0eVpYUjFjbTRvY1Q5Y0lpdGNJanBjSWkxY0lpa3JVM1J5YVc1bktGd2lNREF3TUZ3aUt5aG1Mell3S2pFd01DdG1KVFl3S1NrdWMyeHBZMlVvTFRRcGZTeGNJaVZhWENJNlpqMCtaaTV5WWl4Y0lpVWxYQ0k2S0NrOVBsd2lKVndpZlR0alBXTXVjbVZ3YkdGalpTZ3ZKU1V2Wnl4Y2Jsd2lYRng0TURCY1hIZ3dNRndpS1R0bWIzSW9lU0JwYmlCMktXTXVhVzVqYkhWa1pYTW9lU2ttSmloalBXTXVjbVZ3YkdGalpTaHVaWGNnVW1WblJYaHdLSGtzWENKblhDSXBMSFpiZVYwb1pTa3BLVHRqUFdNdWNtVndiR0ZqWlNndlhGd3dYRnd3TDJjc1hDSWxYQ0lwTzNrOVVtSW9ZeWs3YVdZb2VTNXNaVzVuZEdnK1lpbHlaWFIxY200Z01EdFRZaWg1TEdFcE8zSmxkSFZ5YmlCNUxteGxibWQwYUMweGZWWXVWbUVvS1R0Y2JuWmhjaUJWWWoxYmJuVnNiQ3hNWVN4TllTeFlZU3hhWVN3a1lTeGtZaXhsWWl4bVlpeG5ZaXhvWWl4cFlpeHFZaXhyWWl4c1lpeHRZaXh1WWl4MFlpeDFZaXhHWWl4SFlpeElZaXhNWWl4TllpeFBZbDBzV0dJOWUySTZablZ1WTNScGIyNG9ZU3hpTEdNcGUyRStQajQ5TURzb2JtVjNJRlZoS0dFcEtTNVdZU2hpUGo0K01DeGpQajQrTUNrN1ZtRTlZVHRYWVNzck8zUm9jbTkzSUZaaE8zMHNUanBtZFc1amRHbHZiaWhoS1h0V1lpaGhQajQrTUN3aFFTd3hMQ0ZyWVN3eE16RXdOeklzSVRFcE8xWXVXV0VvS1gwc2FqcG1kVzVqZEdsdmJpaGhLWHRoUGo0K1BUQTdSRDl3YjNOMFRXVnpjMkZuWlNoN1kyMWtPbHdpWTJ4bFlXNTFjRlJvY21WaFpGd2lMSFJvY21WaFpEcGhmU2s2UjJFb1lTbDlMRWs2V1dFc2FEcGFZU3hVT2lSaExFUTZaR0lzUmpwbFlpeFZPbVppTEZJNloySXNTanBvWWl4Uk9tbGlMRzQ2YW1Jc1JUcHJZaXhDT214aUxGTTZiV0lzUXpwdVlpeHhPaWdwUFQ0aE1DeDZPbVoxYm1OMGFXOXVLR0VzWWlsN1lUNCtQajB3TzJFOVBXSStQajR3UDNObGRGUnBiV1Z2ZFhRb0tDazlQbGtvS1NrNlJEOXdiM04wVFdWemMyRm5aU2g3ZEdGeVoyVjBWR2h5WldGa09tRXNZMjFrT2x3aVkyaGxZMnROWVdsc1ltOTRYQ0o5S1Rvb1lUMVdMa3hoVzJGZEtTWW1ZUzV3YjNOMFRXVnpjMkZuWlNoN1kyMWtPbHdpWTJobFkydE5ZV2xzWW05NFhDSjlLWDBzWEc1TU9tWjFibU4wYVc5dUtDbDdjbVYwZFhKdUxURjlMRTA2Y0dJc2NEcG1kVzVqZEdsdmJpaGhLWHRDSmlaV0xreGhXMkUrUGo0d1hTNXlaV1lvS1gwc2REcG1kVzVqZEdsdmJpaGhMR0lzWXlsN1lUMWlLekl3T1RjeE5USStQajR3UERReE9UUXpNRFV0SVNGaFB5aGhQajQrTUNrck5ESTVORGsyTnpJNU5pcGlPazVoVGp0alBqNCtQVEE3WVQxdVpYY2dSR0YwWlNneFJUTXFZU2s3Y0NncFcyTStQakkrUGo0d1hUMWhMbWRsZEZWVVExTmxZMjl1WkhNb0tUdHdLQ2xiWXlzMFBqNHlQajQrTUYwOVlTNW5aWFJWVkVOTmFXNTFkR1Z6S0NrN2NDZ3BXMk1yT0Q0K01qNCtQakJkUFdFdVoyVjBWVlJEU0c5MWNuTW9LVHR3S0NsYll5c3hNajQrTWo0K1BqQmRQV0V1WjJWMFZWUkRSR0YwWlNncE8zQW9LVnRqS3pFMlBqNHlQajQrTUYwOVlTNW5aWFJWVkVOTmIyNTBhQ2dwTzNBb0tWdGpLekl3UGo0eVBqNCtNRjA5WVM1blpYUlZWRU5HZFd4c1dXVmhjaWdwTFRFNU1EQTdjQ2dwVzJNck1qUStQakkrUGo0d1hUMWhMbWRsZEZWVVEwUmhlU2dwTzJFOUtHRXVaMlYwVkdsdFpTZ3BMVVJoZEdVdVZWUkRLR0V1WjJWMFZWUkRSblZzYkZsbFlYSW9LU3d3TERFc01Dd3dMREFzTUNrcEx6ZzJORVUxZkRBN2NDZ3BXMk1yTWpnK1BqSStQajR3WFQxaGZTeDFPbVoxYm1OMGFXOXVLR0VzWWl4aktYdGhQV0lyWEc0eU1EazNNVFV5UGo0K01EdzBNVGswTXpBMUxTRWhZVDhvWVQ0K1BqQXBLelF5T1RRNU5qY3lPVFlxWWpwT1lVNDdZejQrUGowd08yRTlibVYzSUVSaGRHVW9NVVV6S21FcE8zQW9LVnRqUGo0eVBqNCtNRjA5WVM1blpYUlRaV052Ym1SektDazdjQ2dwVzJNck5ENCtNajQrUGpCZFBXRXVaMlYwVFdsdWRYUmxjeWdwTzNBb0tWdGpLemcrUGpJK1BqNHdYVDFoTG1kbGRFaHZkWEp6S0NrN2NDZ3BXMk1yTVRJK1BqSStQajR3WFQxaExtZGxkRVJoZEdVb0tUdHdLQ2xiWXlzeE5qNCtNajQrUGpCZFBXRXVaMlYwVFc5dWRHZ29LVHR3S0NsYll5c3lNRDQrTWo0K1BqQmRQV0V1WjJWMFJuVnNiRmxsWVhJb0tTMHhPVEF3TzNBb0tWdGpLekkwUGo0eVBqNCtNRjA5WVM1blpYUkVZWGtvS1R0aVBTaGFLR0V1WjJWMFJuVnNiRmxsWVhJb0tTay9jbUk2YzJJcFcyRXVaMlYwVFc5dWRHZ29LVjByWVM1blpYUkVZWFJsS0NrdE1Yd3dPM0FvS1Z0akt6STRQajR5UGo0K01GMDlZanR3S0NsYll5c3pOajQrTWo0K1BqQmRQUzBvTmpBcVlTNW5aWFJVYVcxbGVtOXVaVTltWm5ObGRDZ3BLVHRpUFNodVpYY2dSR0YwWlNoaExtZGxkRVoxYkd4WlpXRnlLQ2tzTml3eEtTa3VaMlYwVkdsdFpYcHZibVZQWm1aelpYUW9LVHQyWVhJZ1pUMG9ibVYzSUVSaGRHVW9ZUzVuWlhSR2RXeHNXV1ZoY2lncExEQXNNU2twTG1kbGRGUnBiV1Y2YjI1bFQyWm1jMlYwS0NrN1hHNWhQU2hpSVQxbEppWmhMbWRsZEZScGJXVjZiMjVsVDJabWMyVjBLQ2s5UFUxaGRHZ3ViV2x1S0dVc1lpa3BmREE3Y0NncFcyTXJNekkrUGpJK1BqNHdYVDFoZlN4Mk9tWjFibU4wYVc5dUtHRXBlMkUrUGo0OU1EdDJZWElnWWoxdVpYY2dSR0YwWlNod0tDbGJZU3N5TUQ0K01qNCtQakJkS3pFNU1EQXNjQ2dwVzJFck1UWStQakkrUGo0d1hTeHdLQ2xiWVNzeE1qNCtNajQrUGpCZExIQW9LVnRoS3pnK1BqSStQajR3WFN4d0tDbGJZU3MwUGo0eVBqNCtNRjBzY0NncFcyRStQakkrUGo0d1hTd3dLU3hqUFhBb0tWdGhLek15UGo0eVBqNCtNRjBzWlQxaUxtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDa3NhRDBvYm1WM0lFUmhkR1VvWWk1blpYUkdkV3hzV1dWaGNpZ3BMRFlzTVNrcExtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDa3NaejBvYm1WM0lFUmhkR1VvWWk1blpYUkdkV3hzV1dWaGNpZ3BMREFzTVNrcExtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDa3NhejFOWVhSb0xtMXBiaWhuTEdncE96QStZejl3S0NsYllTc3pNajQrTWo0K1BqQmRQVTUxYldKbGNpaG9JVDFuSmlaclBUMWxLVG93UEdNaFBTaHJQVDFsS1NZbUtHZzlUV0YwYUM1dFlYZ29aeXhvS1N4aUxuTmxkRlJwYldVb1lpNW5aWFJVYVcxbEtDa3JOa1UwS2lnb01EeGpQMnM2YUNrdFpTa3BLVHR3S0NsYllTc3lORDQrTWo0K1BseHVNRjA5WWk1blpYUkVZWGtvS1R0alBTaGFLR0l1WjJWMFJuVnNiRmxsWVhJb0tTay9jbUk2YzJJcFcySXVaMlYwVFc5dWRHZ29LVjByWWk1blpYUkVZWFJsS0NrdE1Yd3dPM0FvS1Z0aEt6STRQajR5UGo0K01GMDlZenR3S0NsYllUNCtNajQrUGpCZFBXSXVaMlYwVTJWamIyNWtjeWdwTzNBb0tWdGhLelErUGpJK1BqNHdYVDFpTG1kbGRFMXBiblYwWlhNb0tUdHdLQ2xiWVNzNFBqNHlQajQrTUYwOVlpNW5aWFJJYjNWeWN5Z3BPM0FvS1Z0aEt6RXlQajR5UGo0K01GMDlZaTVuWlhSRVlYUmxLQ2s3Y0NncFcyRXJNVFkrUGpJK1BqNHdYVDFpTG1kbGRFMXZiblJvS0NrN2NDZ3BXMkVyTWpBK1BqSStQajR3WFQxaUxtZGxkRmxsWVhJb0tUdGhQV0l1WjJWMFZHbHRaU2dwTHpGRk16dHlaWFIxY200Z1YySW9LRlE5WVN3eFBEMHJUV0YwYUM1aFluTW9WQ2svTUR4VVB5dE5ZWFJvTG1ac2IyOXlLRlF2TkRJNU5EazJOekk1TmlrK1BqNHdPbjUrSzAxaGRHZ3VZMlZwYkNnb1ZDMHJLSDUrVkQ0K1BqQXBLUzgwTWprME9UWTNNamsyS1Q0K1BqQTZNQ2twTEdFK1BqNHdmU3h5T25SaUxITTZkV0lzZVRwbWRXNWpkR2x2YmloaExHSXNZeWw3Wm5WdVkzUnBiMjRnWlNoMktYdHlaWFIxY200b2RqMTJMblJ2VkdsdFpWTjBjbWx1WnlncExtMWhkR05vS0M5Y1hDZ29XMEV0V21FdGVpQmRLeWxjWENra0x5a3BQMXh1ZGxzeFhUcGNJa2ROVkZ3aWZXRStQajQ5TUR0aVBqNCtQVEE3WXo0K1BqMHdPM1poY2lCb1BTaHVaWGNnUkdGMFpTa3VaMlYwUm5Wc2JGbGxZWElvS1N4blBXNWxkeUJFWVhSbEtHZ3NNQ3d4S1N4clBXNWxkeUJFWVhSbEtHZ3NOaXd4S1R0b1BXY3VaMlYwVkdsdFpYcHZibVZQWm1aelpYUW9LVHQyWVhJZ2REMXJMbWRsZEZScGJXVjZiMjVsVDJabWMyVjBLQ2tzUXoxTllYUm9MbTFoZUNob0xIUXBPM0lvS1Z0aFBqNHlQajQrTUYwOU5qQXFRenR3S0NsYllqNCtNajQrUGpCZFBVNTFiV0psY2lob0lUMTBLVHRoUFdVb1p5azdZajFsS0dzcE8yRTlkMklvWVNrN1lqMTNZaWhpS1R0MFBHZy9LSElvS1Z0alBqNHlQajQrTUYwOVlTeHlLQ2xiWXlzMFBqNHlQajQrTUYwOVlpazZLSElvS1Z0alBqNHlQajQrTUYwOVlpeHlLQ2xiWXlzMFBqNHlQajQrTUYwOVlTbDlMR002S0NrOVBudExLRndpWENJcGZTeHJPbVoxYm1OMGFXOXVLQ2w3ZlN4cE9tWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlFUmhkR1V1Ym05M0tDbDlMRzg2S0NrOVBudDNZU3M5TVR0MGFISnZkMXdpZFc1M2FXNWtYQ0k3ZlN4Qk9tWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlEUXlPVFE1TURFM05qQjlMR1U2S0NrOVBuQmxjbVp2Y20xaGJtTmxMblJwYldWUGNtbG5hVzRyY0dWeVptOXliV0Z1WTJVdWJtOTNLQ2tzWmpwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCQ1AxeHVjbVZ4ZFdseVpTaGNJbTl6WENJcExtTndkWE1vS1M1c1pXNW5kR2c2Ym1GMmFXZGhkRzl5TG1oaGNtUjNZWEpsUTI5dVkzVnljbVZ1WTNsOUxFczZablZ1WTNScGIyNG9ZU3hpTEdNc1pTbDdWaTUyWWoxaVBqNCtNRHRDWWk1c1pXNW5kR2c5WXp0aVBXVStQajR3UGo0ek8yWnZjaWhsUFRBN1pUeGpPMlVyS3lsQ1lsdGxYVDFsWVNncFcySXJaVDQrUGpCZE8zSmxkSFZ5YmlCVllsdGhYUzVoY0hCc2VTaHVkV3hzTEVKaUtYMHNlRHBtZFc1amRHbHZiaWhoS1h0aFBqNCtQVEE3ZG1GeUlHSTliaWdwTG14bGJtZDBhRHRwWmloaFBEMWlmSHcwTWprME9UQXhOell3UEdFcGNtVjBkWEp1SVRFN1ptOXlLSFpoY2lCalBURTdORDQ5WXp0aktqMHlLWHQyWVhJZ1pUMWlLaWd4S3k0eUwyTXBPMlU5VFdGMGFDNXRhVzRvWlN4aEt6RXdNRFkyTXpJNU5pazdkbUZ5SUdnOVRXRjBhRHRsUFUxaGRHZ3ViV0Y0S0dFc1pTazdZVHA3YUQxb0xtMXBiaTVqWVd4c0tHZ3NOREk1TkRrd01UYzJNQ3hsS3lnMk5UVXpOaTFsSlRZMU5UTTJLU1UyTlRVek5pa3RaQzVpZFdabVpYSXVZbmwwWlV4bGJtZDBhQ3MyTlRVek5UNCtQakUyTzNSeWVYdGtMbWR5YjNjb2FDazdiU2dwTzNaaGNpQm5QVEU3WW5KbFlXc2dZWDFqWVhSamFDaHJLWHQ5WnoxMmIybGtJREI5YVdZb1p5bHlaWFIxY200aE1IMXlaWFIxY200aE1YMHNYRzVQT2taaUxGQTZSMklzU0RwT1lTeG5Pa2hpTEcwNlRHSXNkenBOWWl4c09rOWlMR0U2Wkh4OGR5NTNZWE50VFdWdGIzSjVMRWM2VkdJc1pEcG1kVzVqZEdsdmJpaGhMR0lzWXl4bEtYdHlaWFIxY200Z1ZHSW9ZVDQrUGpBc1lqNCtQakFzWXo0K1BqQXNaVDQrUGpBcGZYMDdLR1oxYm1OMGFXOXVLQ2w3Wm5WdVkzUnBiMjRnWVNoakxHVXBlMk05WXk1bGVIQnZjblJ6TzB3OVl6MVpZaWhqS1R0V0xscGhMbkIxYzJnb1RDNTVZU2s3YzJFOVRDNTZZVHQxWVM1MWJuTm9hV1owS0V3dVZpazdjbUU5WlR0NllTZ3BPM0psZEhWeWJpQmpmWFpoY2lCaVBYdGhPbGhpZlR0NVlTZ3BPMmxtS0hjdWFXNXpkR0Z1ZEdsaGRHVlhZWE50S1hSeWVYdHlaWFIxY200Z2R5NXBibk4wWVc1MGFXRjBaVmRoYzIwb1lpeGhLWDFqWVhSamFDaGpLWHRKS0Z3aVRXOWtkV3hsTG1sdWMzUmhiblJwWVhSbFYyRnpiU0JqWVd4c1ltRmpheUJtWVdsc1pXUWdkMmwwYUNCbGNuSnZjam9nWENJcll5a3NlQ2hqS1gxRllTaGlMR1oxYm1OMGFXOXVLR01wZTJFb1l5NXBibk4wWVc1alpTeGpMbTF2WkhWc1pTbDlLUzVqWVhSamFDaDRLVHR5WlhSMWNtNTdmWDBwS0NrN2R5NWZUM0owU1c1cGREMG9ZU3hpS1QwK0tIY3VYMDl5ZEVsdWFYUTlUQzVYS1NoaExHSXBPMXh1ZHk1ZlQzSjBSMlYwVEdGemRFVnljbTl5UFNoaExHSXBQVDRvZHk1ZlQzSjBSMlYwVEdGemRFVnljbTl5UFV3dVdDa29ZU3hpS1R0M0xsOVBjblJEY21WaGRHVlRaWE56YVc5dVQzQjBhVzl1Y3owb1lTeGlMR01zWlN4b0xHY3NheXgwTEVNc2RpazlQaWgzTGw5UGNuUkRjbVZoZEdWVFpYTnphVzl1VDNCMGFXOXVjejFNTGxrcEtHRXNZaXhqTEdVc2FDeG5MR3NzZEN4RExIWXBPM2N1WDA5eWRFRndjR1Z1WkVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5UFNoaExHSXBQVDRvZHk1ZlQzSjBRWEJ3Wlc1a1JYaGxZM1YwYVc5dVVISnZkbWxrWlhJOVRDNWFLU2hoTEdJcE8zY3VYMDl5ZEVGa1pFWnlaV1ZFYVcxbGJuTnBiMjVQZG1WeWNtbGtaVDBvWVN4aUxHTXBQVDRvZHk1ZlQzSjBRV1JrUm5KbFpVUnBiV1Z1YzJsdmJrOTJaWEp5YVdSbFBVd3VYeWtvWVN4aUxHTXBPM2N1WDA5eWRFRmtaRk5sYzNOcGIyNURiMjVtYVdkRmJuUnllVDBvWVN4aUxHTXBQVDRvZHk1ZlQzSjBRV1JrVTJWemMybHZia052Ym1acFowVnVkSEo1UFV3dUpDa29ZU3hpTEdNcE8zY3VYMDl5ZEZKbGJHVmhjMlZUWlhOemFXOXVUM0IwYVc5dWN6MWhQVDRvZHk1ZlQzSjBVbVZzWldGelpWTmxjM05wYjI1UGNIUnBiMjV6UFV3dVlXRXBLR0VwTzF4dWR5NWZUM0owUTNKbFlYUmxVMlZ6YzJsdmJqMG9ZU3hpTEdNcFBUNG9keTVmVDNKMFEzSmxZWFJsVTJWemMybHZiajFNTG1KaEtTaGhMR0lzWXlrN2R5NWZUM0owVW1Wc1pXRnpaVk5sYzNOcGIyNDlZVDArS0hjdVgwOXlkRkpsYkdWaGMyVlRaWE56YVc5dVBVd3VZMkVwS0dFcE8zY3VYMDl5ZEVkbGRFbHVjSFYwVDNWMGNIVjBRMjkxYm5ROUtHRXNZaXhqS1QwK0tIY3VYMDl5ZEVkbGRFbHVjSFYwVDNWMGNIVjBRMjkxYm5ROVRDNWtZU2tvWVN4aUxHTXBPM2N1WDA5eWRFZGxkRWx1Y0hWMFRtRnRaVDBvWVN4aUtUMCtLSGN1WDA5eWRFZGxkRWx1Y0hWMFRtRnRaVDFNTG1WaEtTaGhMR0lwTzNjdVgwOXlkRWRsZEU5MWRIQjFkRTVoYldVOUtHRXNZaWs5UGloM0xsOVBjblJIWlhSUGRYUndkWFJPWVcxbFBVd3VabUVwS0dFc1lpazdkeTVmVDNKMFJuSmxaVDFoUFQ0b2R5NWZUM0owUm5KbFpUMU1MbWRoS1NoaEtUdDNMbDlQY25SRGNtVmhkR1ZVWlc1emIzSTlLR0VzWWl4akxHVXNhQ3huS1QwK0tIY3VYMDl5ZEVOeVpXRjBaVlJsYm5OdmNqMU1MbWhoS1NoaExHSXNZeXhsTEdnc1p5azdkeTVmVDNKMFIyVjBWR1Z1YzI5eVJHRjBZVDBvWVN4aUxHTXNaU3hvS1QwK0tIY3VYMDl5ZEVkbGRGUmxibk52Y2tSaGRHRTlUQzVwWVNrb1lTeGlMR01zWlN4b0tUdGNibmN1WDA5eWRGSmxiR1ZoYzJWVVpXNXpiM0k5WVQwK0tIY3VYMDl5ZEZKbGJHVmhjMlZVWlc1emIzSTlUQzVxWVNrb1lTazdkeTVmVDNKMFEzSmxZWFJsVW5WdVQzQjBhVzl1Y3owb1lTeGlMR01zWlNrOVBpaDNMbDlQY25SRGNtVmhkR1ZTZFc1UGNIUnBiMjV6UFV3dWEyRXBLR0VzWWl4akxHVXBPM2N1WDA5eWRFRmtaRkoxYmtOdmJtWnBaMFZ1ZEhKNVBTaGhMR0lzWXlrOVBpaDNMbDlQY25SQlpHUlNkVzVEYjI1bWFXZEZiblJ5ZVQxTUxteGhLU2hoTEdJc1l5azdkeTVmVDNKMFVtVnNaV0Z6WlZKMWJrOXdkR2x2Ym5NOVlUMCtLSGN1WDA5eWRGSmxiR1ZoYzJWU2RXNVBjSFJwYjI1elBVd3ViV0VwS0dFcE8zY3VYMDl5ZEVOeVpXRjBaVUpwYm1ScGJtYzlZVDArS0hjdVgwOXlkRU55WldGMFpVSnBibVJwYm1jOVRDNXVZU2tvWVNrN2R5NWZUM0owUW1sdVpFbHVjSFYwUFNoaExHSXNZeWs5UGloM0xsOVBjblJDYVc1a1NXNXdkWFE5VEM1dllTa29ZU3hpTEdNcE8zY3VYMDl5ZEVKcGJtUlBkWFJ3ZFhROUtHRXNZaXhqTEdVcFBUNG9keTVmVDNKMFFtbHVaRTkxZEhCMWREMU1MbkJoS1NoaExHSXNZeXhsS1R0M0xsOVBjblJEYkdWaGNrSnZkVzVrVDNWMGNIVjBjejFoUFQ0b2R5NWZUM0owUTJ4bFlYSkNiM1Z1WkU5MWRIQjFkSE05VEM1eFlTa29ZU2s3WEc1M0xsOVBjblJTWld4bFlYTmxRbWx1WkdsdVp6MWhQVDRvZHk1ZlQzSjBVbVZzWldGelpVSnBibVJwYm1jOVRDNXlZU2tvWVNrN2R5NWZUM0owVW5WdVYybDBhRUpwYm1ScGJtYzlLR0VzWWl4akxHVXNhQ2s5UGloM0xsOVBjblJTZFc1WGFYUm9RbWx1WkdsdVp6MU1Mbk5oS1NoaExHSXNZeXhsTEdncE8zY3VYMDl5ZEZKMWJqMG9ZU3hpTEdNc1pTeG9MR2NzYXl4MEtUMCtLSGN1WDA5eWRGSjFiajFNTG5SaEtTaGhMR0lzWXl4bExHZ3NaeXhyTEhRcE8zY3VYMDl5ZEVWdVpGQnliMlpwYkdsdVp6MWhQVDRvZHk1ZlQzSjBSVzVrVUhKdlptbHNhVzVuUFV3dWRXRXBLR0VwTzNaaGNpQllQWGN1WDNCMGFISmxZV1JmYzJWc1pqMG9LVDArS0ZnOWR5NWZjSFJvY21WaFpGOXpaV3htUFV3dWRtRXBLQ2tzZG1JOWR5NWZiV0ZzYkc5alBXRTlQaWgyWWoxM0xsOXRZV3hzYjJNOVRDNTNZU2tvWVNrN2R5NWZabkpsWlQxaFBUNG9keTVmWm5KbFpUMU1MbmhoS1NoaEtUdDNMbDlmWlcxelkzSnBjSFJsYmw5MGJITmZhVzVwZEQwb0tUMCtLSGN1WDE5bGJYTmpjbWx3ZEdWdVgzUnNjMTlwYm1sMFBVd3VlV0VwS0NrN1hHNTJZWElnVm1JOWR5NWZYMlZ0YzJOeWFYQjBaVzVmZEdoeVpXRmtYMmx1YVhROUtHRXNZaXhqTEdVc2FDeG5LVDArS0ZaaVBYY3VYMTlsYlhOamNtbHdkR1Z1WDNSb2NtVmhaRjlwYm1sMFBVd3VRV0VwS0dFc1lpeGpMR1VzYUN4bktUdDNMbDlmWlcxelkzSnBjSFJsYmw5MGFISmxZV1JmWTNKaGMyaGxaRDBvS1QwK0tIY3VYMTlsYlhOamNtbHdkR1Z1WDNSb2NtVmhaRjlqY21GemFHVmtQVXd1UW1FcEtDazdkbUZ5SUVGaVBTaGhMR0lzWXl4bEtUMCtLRUZpUFV3dVEyRXBLR0VzWWl4akxHVXBMRTloUFdFOVBpaFBZVDFNTGtSaEtTaGhLU3hVWVQxM0xsOWZaVzF6WTNKcGNIUmxibDkwYUhKbFlXUmZaWGhwZEQxaFBUNG9WR0U5ZHk1ZlgyVnRjMk55YVhCMFpXNWZkR2h5WldGa1gyVjRhWFE5VEM1RllTa29ZU2tzY1dJOWR5NWZYMlZ0YzJOeWFYQjBaVzVmWTJobFkydGZiV0ZwYkdKdmVEMG9LVDArS0hGaVBYY3VYMTlsYlhOamNtbHdkR1Z1WDJOb1pXTnJYMjFoYVd4aWIzZzlUQzVHWVNrb0tTeFhZajFoUFQ0b1YySTlUQzVIWVNrb1lTa3NVV0U5S0dFc1lpazlQaWhSWVQxTUxraGhLU2hoTEdJcExIaGlQU2dwUFQ0b2VHSTlUQzVKWVNrb0tTeFNZVDFoUFQ0b1VtRTlUQzVLWVNrb1lTa3NlbUk5WVQwK0tIcGlQVXd1UzJFcEtHRXBPMXh1Wm5WdVkzUnBiMjRnV1dJb1lTbDdZVDFQWW1wbFkzUXVZWE56YVdkdUtIdDlMR0VwTzNaaGNpQmlQV1U5UGlncFBUNWxLQ2srUGo0d0xHTTlaVDArYUQwK1pTaG9LVDQrUGpBN1lTNWZYMlZ5Y201dlgyeHZZMkYwYVc5dVBXSW9ZUzVmWDJWeWNtNXZYMnh2WTJGMGFXOXVLVHRoTG5CMGFISmxZV1JmYzJWc1pqMWlLR0V1Y0hSb2NtVmhaRjl6Wld4bUtUdGhMbTFoYkd4dll6MWpLR0V1YldGc2JHOWpLVHRoTG5OMFlXTnJVMkYyWlQxaUtHRXVjM1JoWTJ0VFlYWmxLVHRoTG5OMFlXTnJRV3hzYjJNOVl5aGhMbk4wWVdOclFXeHNiMk1wTzNKbGRIVnliaUJoZlhjdWEyVmxjRkoxYm5ScGJXVkJiR2wyWlQxUU8zY3VkMkZ6YlUxbGJXOXllVDFrTzNjdWMzUmhZMnRCYkd4dll6MTZZanQzTG5OMFlXTnJVMkYyWlQxNFlqdDNMbk4wWVdOclVtVnpkRzl5WlQxU1lUdDNMbFZVUmpoVWIxTjBjbWx1WnoxTFlUdDNMbk4wY21sdVoxUnZWVlJHT0QxallqdDNMbXhsYm1kMGFFSjVkR1Z6VlZSR09EMWhZanQzTGtWNGFYUlRkR0YwZFhNOVZUdDNMbEJVYUhKbFlXUTlWanQyWVhJZ1dtSTdVajFtZFc1amRHbHZiaUFrWWlncGUxcGlmSHhoWXlncE8xcGlmSHdvVWowa1lpbDlPMXh1Wm5WdVkzUnBiMjRnWVdNb0tYdG1kVzVqZEdsdmJpQmhLQ2w3YVdZb0lWcGlKaVlvV21JOUlUQXNkeTVqWVd4c1pXUlNkVzQ5SVRBc0lVMHBLWHRFZkh4UVlTaDFZU2s3YUdFb2R5azdhV1lvZHk1dmJsSjFiblJwYldWSmJtbDBhV0ZzYVhwbFpDbDNMbTl1VW5WdWRHbHRaVWx1YVhScFlXeHBlbVZrS0NrN2FXWW9JVVFwZTJsbUtIY3VjRzl6ZEZKMWJpbG1iM0lvWENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ2R5NXdiM04wVW5WdUppWW9keTV3YjNOMFVuVnVQVnQzTG5CdmMzUlNkVzVkS1R0M0xuQnZjM1JTZFc0dWJHVnVaM1JvT3lsN2RtRnlJR0k5ZHk1d2IzTjBVblZ1TG5Ob2FXWjBLQ2s3ZG1FdWRXNXphR2xtZENoaUtYMVFZU2gyWVNsOWZYMXBaaWdoS0RBOFVTa3BhV1lvUkNsb1lTaDNLU3hFZkh4UVlTaDFZU2tzYzNSaGNuUlhiM0pyWlhJb2R5azdaV3h6Wlh0cFppaDNMbkJ5WlZKMWJpbG1iM0lvWENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ2R5NXdjbVZTZFc0bUppaDNMbkJ5WlZKMWJqMWJkeTV3Y21WU2RXNWRLVHQzTG5CeVpWSjFiaTVzWlc1bmRHZzdLWFJoTG5WdWMyaHBablFvZHk1d2NtVlNkVzR1YzJocFpuUW9LU2s3VUdFb2RHRXBPekE4VVh4OEtIY3VjMlYwVTNSaGRIVnpQeWgzTG5ObGRGTjBZWFIxY3loY0lsSjFibTVwYm1jdUxpNWNJaWtzYzJWMFZHbHRaVzkxZENobWRXNWpkR2x2YmlncGUzTmxkRlJwYldWdmRYUW9ablZ1WTNScGIyNG9LWHQzTG5ObGRGTjBZWFIxY3loY0lsd2lLWDBzWEc0eEtUdGhLQ2w5TERFcEtUcGhLQ2twZlgxcFppaDNMbkJ5WlVsdWFYUXBabTl5S0Z3aVpuVnVZM1JwYjI1Y0lqMDlkSGx3Wlc5bUlIY3VjSEpsU1c1cGRDWW1LSGN1Y0hKbFNXNXBkRDFiZHk1d2NtVkpibWwwWFNrN01EeDNMbkJ5WlVsdWFYUXViR1Z1WjNSb095bDNMbkJ5WlVsdWFYUXVjRzl3S0Nrb0tUdGhZeWdwTzF4dVhHNWNiaUFnY21WMGRYSnVJRzF2WkhWc1pVRnlaeTV5WldGa2VWeHVmVnh1WEc0cE8xeHVmU2tvS1R0Y2JtbG1JQ2gwZVhCbGIyWWdaWGh3YjNKMGN5QTlQVDBnSjI5aWFtVmpkQ2NnSmlZZ2RIbHdaVzltSUcxdlpIVnNaU0E5UFQwZ0oyOWlhbVZqZENjcFhHNGdJRzF2WkhWc1pTNWxlSEJ2Y25SeklEMGdiM0owVjJGemJWUm9jbVZoWkdWa08xeHVaV3h6WlNCcFppQW9kSGx3Wlc5bUlHUmxabWx1WlNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmlCa1pXWnBibVZiSjJGdFpDZGRLVnh1SUNCa1pXWnBibVVvVzEwc0lDZ3BJRDArSUc5eWRGZGhjMjFVYUhKbFlXUmxaQ2s3WEc0aUxDQWlYQ0oxYzJVZ2MzUnlhV04wWENJN2RtRnlJRTF2WkhWc1pUMTdmVHQyWVhJZ1JVNVdTVkpQVGsxRlRsUmZTVk5mVGs5RVJUMTBlWEJsYjJZZ2NISnZZMlZ6Y3owOVhDSnZZbXBsWTNSY0lpWW1kSGx3Wlc5bUlIQnliMk5sYzNNdWRtVnljMmx2Ym5NOVBWd2liMkpxWldOMFhDSW1KblI1Y0dWdlppQndjbTlqWlhOekxuWmxjbk5wYjI1ekxtNXZaR1U5UFZ3aWMzUnlhVzVuWENJN2FXWW9SVTVXU1ZKUFRrMUZUbFJmU1ZOZlRrOUVSU2w3ZG1GeUlHNXZaR1ZYYjNKclpYSlVhSEpsWVdSelBYSmxjWFZwY21Vb1hDSjNiM0pyWlhKZmRHaHlaV0ZrYzF3aUtUdDJZWElnY0dGeVpXNTBVRzl5ZEQxdWIyUmxWMjl5YTJWeVZHaHlaV0ZrY3k1d1lYSmxiblJRYjNKME8zQmhjbVZ1ZEZCdmNuUXViMjRvWENKdFpYTnpZV2RsWENJc1pHRjBZVDArYjI1dFpYTnpZV2RsS0h0a1lYUmhPbVJoZEdGOUtTazdkbUZ5SUdaelBYSmxjWFZwY21Vb1hDSm1jMXdpS1R0UFltcGxZM1F1WVhOemFXZHVLR2RzYjJKaGJDeDdjMlZzWmpwbmJHOWlZV3dzY21WeGRXbHlaVHB5WlhGMWFYSmxMRTF2WkhWc1pUcE5iMlIxYkdVc2JHOWpZWFJwYjI0NmUyaHlaV1k2WDE5bWFXeGxibUZ0Wlgwc1YyOXlhMlZ5T201dlpHVlhiM0pyWlhKVWFISmxZV1J6TGxkdmNtdGxjaXhwYlhCdmNuUlRZM0pwY0hSek9tWTlQaWd3TEdWMllXd3BLR1p6TG5KbFlXUkdhV3hsVTNsdVl5aG1MRndpZFhSbU9Gd2lLU3RjSWk4dkl5QnpiM1Z5WTJWVlVrdzlYQ0lyWmlrc2NHOXpkRTFsYzNOaFoyVTZiWE5uUFQ1d1lYSmxiblJRYjNKMExuQnZjM1JOWlhOellXZGxLRzF6Wnlrc2NHVnlabTl5YldGdVkyVTZaMnh2WW1Gc0xuQmxjbVp2Y20xaGJtTmxmSHg3Ym05M09rUmhkR1V1Ym05M2ZYMHBmWFpoY2lCcGJtbDBhV0ZzYVhwbFpFcFRQV1poYkhObE8yWjFibU4wYVc5dUlIUm9jbVZoWkZCeWFXNTBSWEp5S0NsN2RtRnlJSFJsZUhROVFYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SektTNXFiMmx1S0Z3aUlGd2lLVHRwWmloRlRsWkpVazlPVFVWT1ZGOUpVMTlPVDBSRktYdG1jeTUzY21sMFpWTjVibU1vTWl4MFpYaDBLMXdpWEZ4dVhDSXBPM0psZEhWeWJuMWpiMjV6YjJ4bExtVnljbTl5S0hSbGVIUXBmV1oxYm1OMGFXOXVJSFJvY21WaFpFRnNaWEowS0NsN2RtRnlJSFJsZUhROVFYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SektTNXFiMmx1S0Z3aUlGd2lLVHR3YjNOMFRXVnpjMkZuWlNoN1kyMWtPbHdpWVd4bGNuUmNJaXgwWlhoME9uUmxlSFFzZEdoeVpXRmtTV1E2VFc5a2RXeGxXMXdpWDNCMGFISmxZV1JmYzJWc1psd2lYU2dwZlNsOWRtRnlJR1Z5Y2oxMGFISmxZV1JRY21sdWRFVnljanR6Wld4bUxtRnNaWEowUFhSb2NtVmhaRUZzWlhKME8wMXZaSFZzWlZ0Y0ltbHVjM1JoYm5ScFlYUmxWMkZ6YlZ3aVhUMG9hVzVtYnl4eVpXTmxhWFpsU1c1emRHRnVZMlVwUFQ1N2RtRnlJRzF2WkhWc1pUMU5iMlIxYkdWYlhDSjNZWE50VFc5a2RXeGxYQ0pkTzAxdlpIVnNaVnRjSW5kaGMyMU5iMlIxYkdWY0lsMDliblZzYkR0MllYSWdhVzV6ZEdGdVkyVTlibVYzSUZkbFlrRnpjMlZ0WW14NUxrbHVjM1JoYm1ObEtHMXZaSFZzWlN4cGJtWnZLVHR5WlhSMWNtNGdjbVZqWldsMlpVbHVjM1JoYm1ObEtHbHVjM1JoYm1ObEtYMDdjMlZzWmk1dmJuVnVhR0Z1Wkd4bFpISmxhbVZqZEdsdmJqMWxQVDU3ZEdoeWIzY2daUzV5WldGemIyNC9QMlY5TzJaMWJtTjBhVzl1SUdoaGJtUnNaVTFsYzNOaFoyVW9aU2w3ZEhKNWUybG1LR1V1WkdGMFlTNWpiV1E5UFQxY0lteHZZV1JjSWlsN2JHVjBJRzFsYzNOaFoyVlJkV1YxWlQxYlhUdHpaV3htTG05dWJXVnpjMkZuWlQxbFBUNXRaWE56WVdkbFVYVmxkV1V1Y0hWemFDaGxLVHR6Wld4bUxuTjBZWEowVjI5eWEyVnlQV2x1YzNSaGJtTmxQVDU3VFc5a2RXeGxQV2x1YzNSaGJtTmxPM0J2YzNSTlpYTnpZV2RsS0h0Y0ltTnRaRndpT2x3aWJHOWhaR1ZrWENKOUtUdG1iM0lvYkdWMElHMXpaeUJ2WmlCdFpYTnpZV2RsVVhWbGRXVXBlMmhoYm1Sc1pVMWxjM05oWjJVb2JYTm5LWDF6Wld4bUxtOXViV1Z6YzJGblpUMW9ZVzVrYkdWTlpYTnpZV2RsZlR0TmIyUjFiR1ZiWENKM1lYTnRUVzlrZFd4bFhDSmRQV1V1WkdGMFlTNTNZWE50VFc5a2RXeGxPMlp2Y2loamIyNXpkQ0JvWVc1a2JHVnlJRzltSUdVdVpHRjBZUzVvWVc1a2JHVnljeWw3VFc5a2RXeGxXMmhoYm1Sc1pYSmRQU2d1TGk1aGNtZHpLVDArZTNCdmMzUk5aWE56WVdkbEtIdGpiV1E2WENKallXeHNTR0Z1Wkd4bGNsd2lMR2hoYm1Sc1pYSTZhR0Z1Wkd4bGNpeGhjbWR6T21GeVozTjlLWDE5VFc5a2RXeGxXMXdpZDJGemJVMWxiVzl5ZVZ3aVhUMWxMbVJoZEdFdWQyRnpiVTFsYlc5eWVUdE5iMlIxYkdWYlhDSmlkV1ptWlhKY0lsMDlUVzlrZFd4bFcxd2lkMkZ6YlUxbGJXOXllVndpWFM1aWRXWm1aWEk3VFc5a2RXeGxXMXdpUlU1V1NWSlBUazFGVGxSZlNWTmZVRlJJVWtWQlJGd2lYVDEwY25WbE8ybG1LSFI1Y0dWdlppQmxMbVJoZEdFdWRYSnNUM0pDYkc5aVBUMWNJbk4wY21sdVoxd2lLWHRwYlhCdmNuUlRZM0pwY0hSektHVXVaR0YwWVM1MWNteFBja0pzYjJJcGZXVnNjMlY3ZG1GeUlHOWlhbVZqZEZWeWJEMVZVa3d1WTNKbFlYUmxUMkpxWldOMFZWSk1LR1V1WkdGMFlTNTFjbXhQY2tKc2IySXBPMmx0Y0c5eWRGTmpjbWx3ZEhNb2IySnFaV04wVlhKc0tUdFZVa3d1Y21WMmIydGxUMkpxWldOMFZWSk1LRzlpYW1WamRGVnliQ2w5YjNKMFYyRnpiVlJvY21WaFpHVmtLRTF2WkhWc1pTbDlaV3h6WlNCcFppaGxMbVJoZEdFdVkyMWtQVDA5WENKeWRXNWNJaWw3VFc5a2RXeGxXMXdpWDE5bGJYTmpjbWx3ZEdWdVgzUm9jbVZoWkY5cGJtbDBYQ0pkS0dVdVpHRjBZUzV3ZEdoeVpXRmtYM0IwY2l3dkttbHpUV0ZwYmtKeWIzZHpaWEpVYUhKbFlXUTlLaTh3TEM4cWFYTk5ZV2x1VW5WdWRHbHRaVlJvY21WaFpEMHFMekFzTHlwallXNUNiRzlqYXowcUx6RXBPMDF2WkhWc1pWdGNJbDlmWlcxelkzSnBjSFJsYmw5MGFISmxZV1JmYldGcGJHSnZlRjloZDJGcGRGd2lYU2hsTG1SaGRHRXVjSFJvY21WaFpGOXdkSElwTzAxdlpIVnNaVnRjSW1WemRHRmliR2x6YUZOMFlXTnJVM0JoWTJWY0lsMG9LVHROYjJSMWJHVmJYQ0pRVkdoeVpXRmtYQ0pkTG5KbFkyVnBkbVZQWW1wbFkzUlVjbUZ1YzJabGNpaGxMbVJoZEdFcE8wMXZaSFZzWlZ0Y0lsQlVhSEpsWVdSY0lsMHVkR2h5WldGa1NXNXBkRlJNVXlncE8ybG1LQ0ZwYm1sMGFXRnNhWHBsWkVwVEtYdHBibWwwYVdGc2FYcGxaRXBUUFhSeWRXVjlkSEo1ZTAxdlpIVnNaVnRjSW1sdWRtOXJaVVZ1ZEhKNVVHOXBiblJjSWwwb1pTNWtZWFJoTG5OMFlYSjBYM0p2ZFhScGJtVXNaUzVrWVhSaExtRnlaeWw5WTJGMFkyZ29aWGdwZTJsbUtHVjRJVDFjSW5WdWQybHVaRndpS1h0MGFISnZkeUJsZUgxOWZXVnNjMlVnYVdZb1pTNWtZWFJoTG1OdFpEMDlQVndpWTJGdVkyVnNYQ0lwZTJsbUtFMXZaSFZzWlZ0Y0lsOXdkR2h5WldGa1gzTmxiR1pjSWwwb0tTbDdUVzlrZFd4bFcxd2lYMTlsYlhOamNtbHdkR1Z1WDNSb2NtVmhaRjlsZUdsMFhDSmRLQzB4S1gxOVpXeHpaU0JwWmlobExtUmhkR0V1ZEdGeVoyVjBQVDA5WENKelpYUnBiVzFsWkdsaGRHVmNJaWw3ZldWc2MyVWdhV1lvWlM1a1lYUmhMbU50WkQwOVBWd2lZMmhsWTJ0TllXbHNZbTk0WENJcGUybG1LR2x1YVhScFlXeHBlbVZrU2xNcGUwMXZaSFZzWlZ0Y0ltTm9aV05yVFdGcGJHSnZlRndpWFNncGZYMWxiSE5sSUdsbUtHVXVaR0YwWVM1amJXUXBlMlZ5Y2loY0luZHZjbXRsY2k1cWN5QnlaV05sYVhabFpDQjFibXR1YjNkdUlHTnZiVzFoYm1RZ1hDSXJaUzVrWVhSaExtTnRaQ2s3WlhKeUtHVXVaR0YwWVNsOWZXTmhkR05vS0dWNEtYdHBaaWhOYjJSMWJHVmJYQ0pmWDJWdGMyTnlhWEIwWlc1ZmRHaHlaV0ZrWDJOeVlYTm9aV1JjSWwwcGUwMXZaSFZzWlZ0Y0lsOWZaVzF6WTNKcGNIUmxibDkwYUhKbFlXUmZZM0poYzJobFpGd2lYU2dwZlhSb2NtOTNJR1Y0ZlgxelpXeG1MbTl1YldWemMyRm5aVDFvWVc1a2JHVk5aWE56WVdkbE8xeHVJaXdnSW1WNGNHOXlkQ0JqYjI1emRDQnFiMmx1SUQwZ2RXNWtaV1pwYm1Wa095SXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJQ29nWVhNZ2NHRjBhQ0JtY205dElDZHViMlJsT25CaGRHZ25PMXh1YVcxd2IzSjBJSHRGYm5aOUlHWnliMjBnSjI5dWJuaHlkVzUwYVcxbExXTnZiVzF2YmljN1hHNWNibWx0Y0c5eWRDQjdUM0owVjJGemJVMXZaSFZzWlgwZ1puSnZiU0FuTGk5aWFXNWthVzVuTDI5eWRDMTNZWE50Snp0Y2JtbHRjRzl5ZENCN1QzSjBWMkZ6YlZSb2NtVmhaR1ZrVFc5a2RXeGxmU0JtY205dElDY3VMMkpwYm1ScGJtY3ZiM0owTFhkaGMyMHRkR2h5WldGa1pXUW5PMXh1WEc0dktpQmxjMnhwYm5RdFpHbHpZV0pzWlNCQWRIbHdaWE5qY21sd2RDMWxjMnhwYm5RdmJtOHRjbVZ4ZFdseVpTMXBiWEJ2Y25SeklDb3ZYRzVzWlhRZ2IzSjBWMkZ6YlVaaFkzUnZjbms2SUVWdGMyTnlhWEIwWlc1TmIyUjFiR1ZHWVdOMGIzSjVQRTl5ZEZkaGMyMU5iMlIxYkdVK08xeHVYRzVwWmlBb0lVSlZTVXhFWDBSRlJsTXVSRWxUUVVKTVJWOVVVa0ZKVGtsT1J5a2dlMXh1SUNCdmNuUlhZWE50Um1GamRHOXllU0E5SUhKbGNYVnBjbVVvSnk0dlltbHVaR2x1Wnk5dmNuUXRkSEpoYVc1cGJtY3RkMkZ6YlMxemFXMWtMbXB6SnlrN1hHNTlJR1ZzYzJVZ2UxeHVJQ0J2Y25SWFlYTnRSbUZqZEc5eWVTQTlYRzRnSUNBZ0lDQkNWVWxNUkY5RVJVWlRMa1JKVTBGQ1RFVmZWMFZDUjFCVklEOGdjbVZ4ZFdseVpTZ25MaTlpYVc1a2FXNW5MMjl5ZEMxM1lYTnRMbXB6SnlrZ09pQnlaWEYxYVhKbEtDY3VMMkpwYm1ScGJtY3ZiM0owTFhkaGMyMHRjMmx0WkM1cWMyVndMbXB6SnlrN1hHNTlYRzVjYm1OdmJuTjBJRzl5ZEZkaGMyMUdZV04wYjNKNVZHaHlaV0ZrWldRNklFVnRjMk55YVhCMFpXNU5iMlIxYkdWR1lXTjBiM0o1UEU5eWRGZGhjMjFOYjJSMWJHVStJRDBnSVVKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5WFFWTk5YMVJJVWtWQlJDQS9YRzRnSUNBZ0tFSlZTVXhFWDBSRlJsTXVSRWxUUVVKTVJWOVhSVUpIVUZVZ1B5QnlaWEYxYVhKbEtDY3VMMkpwYm1ScGJtY3ZiM0owTFhkaGMyMHRkR2h5WldGa1pXUXVhbk1uS1NBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRjFhWEpsS0NjdUwySnBibVJwYm1jdmIzSjBMWGRoYzIwdGMybHRaQzEwYUhKbFlXUmxaQzVxYzJWd0xtcHpKeWtwSURwY2JpQWdJQ0J2Y25SWFlYTnRSbUZqZEc5eWVUdGNiaThxSUdWemJHbHVkQzFsYm1GaWJHVWdRSFI1Y0dWelkzSnBjSFF0WlhOc2FXNTBMMjV2TFhKbGNYVnBjbVV0YVcxd2IzSjBjeUFxTDF4dVhHNXNaWFFnZDJGemJUb2dUM0owVjJGemJVMXZaSFZzWlh4MWJtUmxabWx1WldRN1hHNXNaWFFnYVc1cGRHbGhiR2w2WldRZ1BTQm1ZV3h6WlR0Y2JteGxkQ0JwYm1sMGFXRnNhWHBwYm1jZ1BTQm1ZV3h6WlR0Y2JteGxkQ0JoWW05eWRHVmtJRDBnWm1Gc2MyVTdYRzVjYm1OdmJuTjBJR2x6VFhWc2RHbFVhSEpsWVdSVGRYQndiM0owWldRZ1BTQW9iblZ0VkdoeVpXRmtjem9nYm5WdFltVnlLVG9nWW05dmJHVmhiaUE5UGlCN1hHNGdJQzh2SUZkbFlrRnpjMlZ0WW14NUlIUm9jbVZoWkhNZ1lYSmxJSE5sZENCMGJ5QXhJQ2h6YVc1bmJHVWdkR2h5WldGa0tTNWNiaUFnYVdZZ0tHNTFiVlJvY21WaFpITWdQVDA5SURFcElIdGNiaUFnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUgxY2JseHVJQ0F2THlCSlppQW5VMmhoY21Wa1FYSnlZWGxDZFdabVpYSW5JR2x6SUc1dmRDQmhkbUZwYkdGaWJHVXNJRmRsWWtGemMyVnRZbXg1SUhSb2NtVmhaSE1nZDJsc2JDQnViM1FnZDI5eWF5NWNiaUFnYVdZZ0tIUjVjR1Z2WmlCVGFHRnlaV1JCY25KaGVVSjFabVpsY2lBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUhObGJHWWdJVDA5SUNkMWJtUmxabWx1WldRbklDWW1JQ0Z6Wld4bUxtTnliM056VDNKcFoybHVTWE52YkdGMFpXUXBJSHRjYmlBZ0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxamIyNXpiMnhsWEc0Z0lDQWdJQ0JqYjI1emIyeGxMbmRoY200b1hHNGdJQ0FnSUNBZ0lDQWdKMlZ1ZGk1M1lYTnRMbTUxYlZSb2NtVmhaSE1nYVhNZ2MyVjBJSFJ2SUNjZ0t5QnVkVzFVYUhKbFlXUnpJQ3RjYmlBZ0lDQWdJQ0FnSUNBbkxDQmlkWFFnZEdocGN5QjNhV3hzSUc1dmRDQjNiM0pySUhWdWJHVnpjeUI1YjNVZ1pXNWhZbXhsSUdOeWIzTnpUM0pwWjJsdVNYTnZiR0YwWldRZ2JXOWtaUzRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMU5sWlNCb2RIUndjem92TDNkbFlpNWtaWFl2WTNKdmMzTXRiM0pwWjJsdUxXbHpiMnhoZEdsdmJpMW5kV2xrWlM4Z1ptOXlJRzF2Y21VZ2FXNW1ieTRuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzVjYmlBZ0x5OGdiMjV1ZUhKMWJuUnBiV1V0ZDJWaUlHUnZaWE1nYm05MElITjFjSEJ2Y25RZ2JYVnNkR2t0ZEdoeVpXRmtjeUJwYmlCT2IyUmxMbXB6TGx4dUlDQnBaaUFvZEhsd1pXOW1JSEJ5YjJObGMzTWdJVDA5SUNkMWJtUmxabWx1WldRbklDWW1JSEJ5YjJObGMzTXVkbVZ5YzJsdmJuTWdKaVlnY0hKdlkyVnpjeTUyWlhKemFXOXVjeTV1YjJSbEtTQjdYRzRnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHNXZMV052Ym5OdmJHVmNiaUFnSUNCamIyNXpiMnhsTG5kaGNtNG9YRzRnSUNBZ0lDQWdJQ2RsYm5ZdWQyRnpiUzV1ZFcxVWFISmxZV1J6SUdseklITmxkQ0IwYnlBbklDc2diblZ0VkdoeVpXRmtjeUFyWEc0Z0lDQWdJQ0FnSUNjc0lHaHZkMlYyWlhJc0lHTjFjbkpsYm5Sc2VTQnZibTU0Y25WdWRHbHRaUzEzWldJZ1pHOWxjeUJ1YjNRZ2MzVndjRzl5ZENCdGRXeDBhUzEwYUhKbFlXUnpJR2x1SUU1dlpHVXVhbk11SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5VR3hsWVhObElHTnZibk5wWkdWeUlIVnphVzVuSUc5dWJuaHlkVzUwYVcxbExXNXZaR1VnWm05eUlIQmxjbVp2Y20xaGJtTmxJR055YVhScFkyRnNJSE5qWlc1aGNtbHZjeTRuS1R0Y2JpQWdmVnh1WEc0Z0lIUnllU0I3WEc0Z0lDQWdMeThnVkdWemRDQm1iM0lnZEhKaGJuTm1aWEpoWW1sc2FYUjVJRzltSUZOQlFuTWdLR1p2Y2lCaWNtOTNjMlZ5Y3k0Z2JtVmxaR1ZrSUdadmNpQkdhWEpsWm05NEtWeHVJQ0FnSUM4dklHaDBkSEJ6T2k4dlozSnZkWEJ6TG1kdmIyZHNaUzVqYjIwdlptOXlkVzB2SXlGdGMyY3ZiVzk2YVd4c1lTNWtaWFl1Y0d4aGRHWnZjbTB2U1VoclFscHNTRVZVY0VFdlpIZHpUVTVqYUZkRlVVRktYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQk5aWE56WVdkbFEyaGhibTVsYkNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUc1bGR5Qk5aWE56WVdkbFEyaGhibTVsYkNncExuQnZjblF4TG5CdmMzUk5aWE56WVdkbEtHNWxkeUJUYUdGeVpXUkJjbkpoZVVKMVptWmxjaWd4S1NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1ZHVnpkQ0JtYjNJZ1YyVmlRWE56WlcxaWJIa2dkR2h5WldGa2N5QmpZWEJoWW1sc2FYUjVJQ2htYjNJZ1ltOTBhQ0JpY205M2MyVnljeUJoYm1RZ1RtOWtaUzVxY3lsY2JpQWdJQ0F2THlCVWFHbHpJSFI1Y0dWa0lHRnljbUY1SUdseklHRWdWMlZpUVhOelpXMWliSGtnY0hKdlozSmhiU0JqYjI1MFlXbHVhVzVuSUhSb2NtVmhaR1ZrSUdsdWMzUnlkV04wYVc5dWN5NWNiaUFnSUNCeVpYUjFjbTRnVjJWaVFYTnpaVzFpYkhrdWRtRnNhV1JoZEdVb2JtVjNJRlZwYm5RNFFYSnlZWGtvVzF4dUlDQWdJQ0FnTUN3Z09UY3NJREV4TlN3Z01UQTVMQ0F4TENBd0xDQWdNQ3dnSURBc0lERXNJRFFzSURFc0lDQTVOaXdnTUN3Z0lDQXdMQ0FnTXl3Z01pd2dNU3dnSURBc0lEVXNYRzRnSUNBZ0lDQTBMQ0F4TENBZ015d2dJQ0F4TENBZ0lERXNJREV3TENBeE1Td2dNU3dnT1N3Z01Dd2dOalVzSURBc0lDQXlOVFFzSURFMkxDQXlMQ0F3TENBeU5pd2dNVEZjYmlBZ0lDQmRLU2s3WEc0Z0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUdselUybHRaRk4xY0hCdmNuUmxaQ0E5SUNncE9pQmliMjlzWldGdUlEMCtJSHRjYmlBZ2RISjVJSHRjYmlBZ0lDQXZMeUJVWlhOMElHWnZjaUJYWldKQmMzTmxiV0pzZVNCVFNVMUVJR05oY0dGaWFXeHBkSGtnS0dadmNpQmliM1JvSUdKeWIzZHpaWEp6SUdGdVpDQk9iMlJsTG1wektWeHVJQ0FnSUM4dklGUm9hWE1nZEhsd1pXUWdZWEp5WVhrZ2FYTWdZU0JYWldKQmMzTmxiV0pzZVNCd2NtOW5jbUZ0SUdOdmJuUmhhVzVwYm1jZ1UwbE5SQ0JwYm5OMGNuVmpkR2x2Ym5NdVhHNWNiaUFnSUNBdkx5QlVhR1VnWW1sdVlYSjVJR1JoZEdFZ2FYTWdaMlZ1WlhKaGRHVmtJR1p5YjIwZ2RHaGxJR1p2Ykd4dmQybHVaeUJqYjJSbElHSjVJSGRoZERKM1lYTnRPbHh1SUNBZ0lDOHZYRzRnSUNBZ0x5OGdLRzF2WkhWc1pWeHVJQ0FnSUM4dklDQWdLSFI1Y0dVZ0pIUXdJQ2htZFc1aktTbGNiaUFnSUNBdkx5QWdJQ2htZFc1aklDUm1NQ0FvZEhsd1pTQWtkREFwWEc0Z0lDQWdMeThnSUNBZ0lDaGtjbTl3WEc0Z0lDQWdMeThnSUNBZ0lDQWdLR2t6TW5nMExtUnZkRjlwTVRaNE9GOXpYRzRnSUNBZ0x5OGdJQ0FnSUNBZ0lDQW9hVGg0TVRZdWMzQnNZWFJjYmlBZ0lDQXZMeUFnSUNBZ0lDQWdJQ0FnS0drek1pNWpiMjV6ZENBd0tTbGNiaUFnSUNBdkx5QWdJQ0FnSUNBZ0lDaDJNVEk0TG1OdmJuTjBJR2t6TW5nMElEQjRNREF3TURBd01EQWdNSGd3TURBd01EQXdNQ0F3ZURBd01EQXdNREF3SURCNE1EQXdNREF3TURBcEtTa3BLVnh1WEc0Z0lDQWdjbVYwZFhKdUlGZGxZa0Z6YzJWdFlteDVMblpoYkdsa1lYUmxLRzVsZHlCVmFXNTBPRUZ5Y21GNUtGdGNiaUFnSUNBZ0lEQXNJQ0FnT1Rjc0lERXhOU3dnTVRBNUxDQXhMQ0F3TENBd0xDQXdMQ0F4TENBMExDQXhMQ0E1Tml3Z01Dd2dNQ3dnTXl3Z01pd2dNU3dnTUN3Z01UQXNJRE13TENBeExDQWdJREk0TENBZ01Dd2dOalVzSURBc1hHNGdJQ0FnSUNBeU5UTXNJREUxTENBeU5UTXNJREV5TENBZ01Dd2dNQ3dnTUN3Z01Dd2dNQ3dnTUN3Z01Dd2dNQ3dnSURBc0lEQXNJREFzSURBc0lEQXNJREFzSURBc0lDQXdMQ0FnTWpVekxDQXhPRFlzSURFc0lESTJMQ0F4TVZ4dUlDQWdJRjBwS1R0Y2JpQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1ZlR0Y2JseHVZMjl1YzNRZ1oyVjBWMkZ6YlVacGJHVk9ZVzFsSUQwZ0tIVnpaVk5wYldRNklHSnZiMnhsWVc0c0lIVnpaVlJvY21WaFpITTZJR0p2YjJ4bFlXNHBJRDArSUh0Y2JpQWdhV1lnS0hWelpWTnBiV1FwSUh0Y2JpQWdJQ0JwWmlBb0lVSlZTVXhFWDBSRlJsTXVSRWxUUVVKTVJWOVVVa0ZKVGtsT1J5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlDZHZjblF0ZEhKaGFXNXBibWN0ZDJGemJTMXphVzFrTG5kaGMyMG5PMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZFhObFZHaHlaV0ZrY3lBL0lDZHZjblF0ZDJGemJTMXphVzFrTFhSb2NtVmhaR1ZrTG5kaGMyMG5JRG9nSjI5eWRDMTNZWE50TFhOcGJXUXVkMkZ6YlNjN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUhWelpWUm9jbVZoWkhNZ1B5QW5iM0owTFhkaGMyMHRkR2h5WldGa1pXUXVkMkZ6YlNjZ09pQW5iM0owTFhkaGMyMHVkMkZ6YlNjN1hHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCcGJtbDBhV0ZzYVhwbFYyVmlRWE56WlcxaWJIa2dQU0JoYzNsdVl5aG1iR0ZuY3pvZ1JXNTJMbGRsWWtGemMyVnRZbXg1Um14aFozTXBPaUJRY205dGFYTmxQSFp2YVdRK0lEMCtJSHRjYmlBZ2FXWWdLR2x1YVhScFlXeHBlbVZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJRkJ5YjIxcGMyVXVjbVZ6YjJ4MlpTZ3BPMXh1SUNCOVhHNGdJR2xtSUNocGJtbDBhV0ZzYVhwcGJtY3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oyMTFiSFJwY0d4bElHTmhiR3h6SUhSdklGeGNKMmx1YVhScFlXeHBlbVZYWldKQmMzTmxiV0pzZVNncFhGd25JR1JsZEdWamRHVmtMaWNwTzF4dUlDQjlYRzRnSUdsbUlDaGhZbTl5ZEdWa0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Nkd2NtVjJhVzkxY3lCallXeHNJSFJ2SUZ4Y0oybHVhWFJwWVd4cGVtVlhaV0pCYzNObGJXSnNlU2dwWEZ3bklHWmhhV3hsWkM0bktUdGNiaUFnZlZ4dVhHNGdJR2x1YVhScFlXeHBlbWx1WnlBOUlIUnlkV1U3WEc1Y2JpQWdMeThnZDJGemJTQm1iR0ZuY3lCaGNtVWdZV3h5WldGa2VTQnBibWwwYVdGc2FYcGxaRnh1SUNCamIyNXpkQ0IwYVcxbGIzVjBJRDBnWm14aFozTXVhVzVwZEZScGJXVnZkWFFoTzF4dUlDQmpiMjV6ZENCdWRXMVVhSEpsWVdSeklEMGdabXhoWjNNdWJuVnRWR2h5WldGa2N5RTdYRzRnSUdOdmJuTjBJSE5wYldRZ1BTQm1iR0ZuY3k1emFXMWtJVHRjYmx4dUlDQmpiMjV6ZENCMWMyVlVhSEpsWVdSeklEMGdhWE5OZFd4MGFWUm9jbVZoWkZOMWNIQnZjblJsWkNodWRXMVVhSEpsWVdSektUdGNiaUFnWTI5dWMzUWdkWE5sVTJsdFpDQTlJSE5wYldRZ0ppWWdhWE5UYVcxa1UzVndjRzl5ZEdWa0tDazdYRzVjYmlBZ1kyOXVjM1FnZDJGemJWQmhkR2h6SUQwZ1pteGhaM011ZDJGemJWQmhkR2h6TzF4dUlDQmpiMjV6ZENCM1lYTnRVSEpsWm1sNFQzWmxjbkpwWkdVZ1BTQjBlWEJsYjJZZ2QyRnpiVkJoZEdoeklEMDlQU0FuYzNSeWFXNW5KeUEvSUhkaGMyMVFZWFJvY3lBNklIVnVaR1ZtYVc1bFpEdGNiaUFnWTI5dWMzUWdkMkZ6YlVacGJHVk9ZVzFsSUQwZ1oyVjBWMkZ6YlVacGJHVk9ZVzFsS0hWelpWTnBiV1FzSUhWelpWUm9jbVZoWkhNcE8xeHVJQ0JqYjI1emRDQjNZWE50VUdGMGFFOTJaWEp5YVdSbElEMGdkSGx3Wlc5bUlIZGhjMjFRWVhSb2N5QTlQVDBnSjI5aWFtVmpkQ2NnUHlCM1lYTnRVR0YwYUhOYmQyRnpiVVpwYkdWT1lXMWxYU0E2SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0JzWlhRZ2FYTlVhVzFsYjNWMElEMGdabUZzYzJVN1hHNWNiaUFnWTI5dWMzUWdkR0Z6YTNNNklFRnljbUY1UEZCeWIyMXBjMlU4ZG05cFpENCtJRDBnVzEwN1hHNWNiaUFnTHk4Z2NISnZiV2x6WlNCbWIzSWdkR2x0Wlc5MWRGeHVJQ0JwWmlBb2RHbHRaVzkxZENBK0lEQXBJSHRjYmlBZ0lDQjBZWE5yY3k1d2RYTm9LRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsS1NBOVBpQjdYRzRnSUNBZ0lDQnpaWFJVYVcxbGIzVjBLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhWE5VYVcxbGIzVjBJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdmU3dnZEdsdFpXOTFkQ2s3WEc0Z0lDQWdmU2twTzF4dUlDQjlYRzVjYmlBZ0x5OGdjSEp2YldselpTQm1iM0lnYlc5a2RXeGxJR2x1YVhScFlXeHBlbUYwYVc5dVhHNGdJSFJoYzJ0ekxuQjFjMmdvYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUdaaFkzUnZjbmtnUFNCMWMyVlVhSEpsWVdSeklEOGdiM0owVjJGemJVWmhZM1J2Y25sVWFISmxZV1JsWkNBNklHOXlkRmRoYzIxR1lXTjBiM0o1TzF4dUlDQWdJR052Ym5OMElHTnZibVpwWnpvZ1VHRnlkR2xoYkR4UGNuUlhZWE50VFc5a2RXeGxQaUE5SUh0Y2JpQWdJQ0FnSUd4dlkyRjBaVVpwYkdVNklDaG1hV3hsVG1GdFpUb2djM1J5YVc1bkxDQnpZM0pwY0hSRWFYSmxZM1J2Y25rNklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lVSlZTVXhFWDBSRlJsTXVSRWxUUVVKTVJWOVhRVk5OWDFSSVVrVkJSQ0FtSmlCMWMyVlVhSEpsWVdSeklDWW1JR1pwYkdWT1lXMWxMbVZ1WkhOWGFYUm9LQ2N1ZDI5eWEyVnlMbXB6SnlrZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJDYkc5aUlDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQlZVa3d1WTNKbFlYUmxUMkpxWldOMFZWSk1LRzVsZHlCQ2JHOWlLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVkdocGN5QnlaWEYxYVhKbEtDa2dablZ1WTNScGIyNGdhWE1nYUdGdVpHeGxaQ0JpZVNCbGMySjFhV3hrSUhCc2RXZHBiaUIwYnlCc2IyRmtJR1pwYkdVZ1kyOXVkR1Z1ZENCaGN5QnpkSEpwYm1jdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElFQjBlWEJsYzJOeWFYQjBMV1Z6YkdsdWRDOXVieTF5WlhGMWFYSmxMV2x0Y0c5eWRITmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWEYxYVhKbEtDY3VMMkpwYm1ScGJtY3ZiM0owTFhkaGMyMHRkR2h5WldGa1pXUXVkMjl5YTJWeUxtcHpKeWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdYU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdlM1I1Y0dVNklDZDBaWGgwTDJwaGRtRnpZM0pwY0hRbmZTa3BPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR1pwYkdWT1lXMWxMbVZ1WkhOWGFYUm9LQ2N1ZDJGemJTY3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSGRoYzIxUVlYUm9UM1psY25KcFpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCM1lYTnRVR0YwYUU5MlpYSnlhV1JsTzF4dUlDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSEJ5WldacGVDQTlJSGRoYzIxUWNtVm1hWGhQZG1WeWNtbGtaU0EvUHlCelkzSnBjSFJFYVhKbFkzUnZjbms3WEc1Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVVKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5WFJVSkhVRlVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoM1lYTnRSbWxzWlU1aGJXVWdQVDA5SUNkdmNuUXRkMkZ6YlMxemFXMWtMbmRoYzIwbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd2NtVm1hWGdnS3lBbmIzSjBMWGRoYzIwdGMybHRaQzVxYzJWd0xuZGhjMjBuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2gzWVhOdFJtbHNaVTVoYldVZ1BUMDlJQ2R2Y25RdGQyRnpiUzF6YVcxa0xYUm9jbVZoWkdWa0xuZGhjMjBuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y21WbWFYZ2dLeUFuYjNKMExYZGhjMjB0YzJsdFpDMTBhSEpsWVdSbFpDNXFjMlZ3TG5kaGMyMG5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd2NtVm1hWGdnS3lCM1lYTnRSbWxzWlU1aGJXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOeWFYQjBSR2x5WldOMGIzSjVJQ3NnWm1sc1pVNWhiV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVHRjYmx4dUlDQWdJR2xtSUNnaFFsVkpURVJmUkVWR1V5NUVTVk5CUWt4RlgxZEJVMDFmVkVoU1JVRkVJQ1ltSUhWelpWUm9jbVZoWkhNcElIdGNiaUFnSUNBZ0lHTnZibVpwWnk1dWRXMVVhSEpsWVdSeklEMGdiblZ0VkdoeVpXRmtjenRjYmlBZ0lDQWdJR2xtSUNoMGVYQmxiMllnUW14dllpQTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdZMjl1Wm1sbkxtMWhhVzVUWTNKcGNIUlZjbXhQY2tKc2IySWdQU0J3WVhSb0xtcHZhVzRvWDE5a2FYSnVZVzFsTENBbmIzSjBMWGRoYzIwdGRHaHlaV0ZrWldRdWFuTW5LVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElITmpjbWx3ZEZOdmRYSmpaVU52WkdVZ1BTQmdkbUZ5SUc5eWRGZGhjMjFVYUhKbFlXUmxaRDBrZTJaaFkzUnZjbmt1ZEc5VGRISnBibWNvS1gwN1lEdGNiaUFnSUNBZ0lDQWdZMjl1Wm1sbkxtMWhhVzVUWTNKcGNIUlZjbXhQY2tKc2IySWdQU0J1WlhjZ1FteHZZaWhiYzJOeWFYQjBVMjkxY21ObFEyOWtaVjBzSUh0MGVYQmxPaUFuZEdWNGRDOXFZWFpoYzJOeWFYQjBKMzBwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR1poWTNSdmNua29ZMjl1Wm1sbktTNTBhR1Z1S0Z4dUlDQWdJQ0FnSUNBdkx5QjNZWE50SUcxdlpIVnNaU0JwYm1sMGFXRnNhWHBsWkNCemRXTmpaWE56Wm5Wc2JIbGNiaUFnSUNBZ0lDQWdiVzlrZFd4bElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCcGJtbDBhV0ZzYVhwcGJtY2dQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0JwYm1sMGFXRnNhWHBsWkNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2QyRnpiU0E5SUcxdlpIVnNaVHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQzh2SUhkaGMyMGdiVzlrZFd4bElHWmhhV3hsWkNCMGJ5QnBibWwwYVdGc2FYcGxYRzRnSUNBZ0lDQWdJQ2gzYUdGMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2FXNXBkR2xoYkdsNmFXNW5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJQ0FnWVdKdmNuUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnY21WcVpXTjBLSGRvWVhRcE8xeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ2ZTa3BPMXh1WEc0Z0lHRjNZV2wwSUZCeWIyMXBjMlV1Y21GalpTaDBZWE5yY3lrN1hHNWNiaUFnYVdZZ0tHbHpWR2x0Wlc5MWRDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1YyVmlRWE56WlcxaWJIa2dZbUZqYTJWdVpDQnBibWwwYVdGc2FYcHBibWNnWm1GcGJHVmtJR1IxWlNCMGJ5QjBhVzFsYjNWME9pQWtlM1JwYldWdmRYUjliWE5nS1R0Y2JpQWdmVnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdkbGRFbHVjM1JoYm1ObElEMGdLQ2s2SUU5eWRGZGhjMjFOYjJSMWJHVWdQVDRnZTF4dUlDQnBaaUFvYVc1cGRHbGhiR2w2WldRZ0ppWWdkMkZ6YlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIzWVhOdE8xeHVJQ0I5WEc1Y2JpQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFhaV0pCYzNObGJXSnNlU0JwY3lCdWIzUWdhVzVwZEdsaGJHbDZaV1FnZVdWMExpY3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdScGMzQnZjMlVnUFNBb0tUb2dkbTlwWkNBOVBpQjdYRzRnSUdsbUlDaHBibWwwYVdGc2FYcGxaQ0FtSmlBaGFXNXBkR2xoYkdsNmFXNW5JQ1ltSUNGaFltOXlkR1ZrS1NCN1hHNGdJQ0FnYVc1cGRHbGhiR2w2YVc1bklEMGdkSEoxWlR0Y2JseHVJQ0FnSUNoM1lYTnRJR0Z6SUU5eWRGZGhjMjFVYUhKbFlXUmxaRTF2WkhWc1pTa3VVRlJvY21WaFpEOHVkR1Z5YldsdVlYUmxRV3hzVkdoeVpXRmtjeWdwTzF4dUlDQWdJSGRoYzIwZ1BTQjFibVJsWm1sdVpXUTdYRzVjYmlBZ0lDQnBibWwwYVdGc2FYcHBibWNnUFNCbVlXeHpaVHRjYmlBZ0lDQnBibWwwYVdGc2FYcGxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lHRmliM0owWldRZ1BTQjBjblZsTzF4dUlDQjlYRzU5TzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMmRsZEVsdWMzUmhibU5sZlNCbWNtOXRJQ2N1TDNkaGMyMHRabUZqZEc5eWVTYzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmhiR3h2WTFkaGMyMVRkSEpwYm1jZ1BTQW9aR0YwWVRvZ2MzUnlhVzVuTENCaGJHeHZZM002SUc1MWJXSmxjbHRkS1RvZ2JuVnRZbVZ5SUQwK0lIdGNiaUFnWTI5dWMzUWdkMkZ6YlNBOUlHZGxkRWx1YzNSaGJtTmxLQ2s3WEc1Y2JpQWdZMjl1YzNRZ1pHRjBZVXhsYm1kMGFDQTlJSGRoYzIwdWJHVnVaM1JvUW5sMFpYTlZWRVk0S0dSaGRHRXBJQ3NnTVR0Y2JpQWdZMjl1YzNRZ1pHRjBZVTltWm5ObGRDQTlJSGRoYzIwdVgyMWhiR3h2WXloa1lYUmhUR1Z1WjNSb0tUdGNiaUFnZDJGemJTNXpkSEpwYm1kVWIxVlVSamdvWkdGMFlTd2daR0YwWVU5bVpuTmxkQ3dnWkdGMFlVeGxibWQwYUNrN1hHNGdJR0ZzYkc5amN5NXdkWE5vS0dSaGRHRlBabVp6WlhRcE8xeHVYRzRnSUhKbGRIVnliaUJrWVhSaFQyWm1jMlYwTzF4dWZUdGNibHh1YVc1MFpYSm1ZV05sSUVWNGRISmhUM0IwYVc5dWMwaGhibVJzWlhJZ2UxeHVJQ0FvYm1GdFpUb2djM1J5YVc1bkxDQjJZV3gxWlRvZ2MzUnlhVzVuS1RvZ2RtOXBaRHRjYm4xY2JseHVaWGh3YjNKMElHTnZibk4wSUdsMFpYSmhkR1ZGZUhSeVlVOXdkR2x2Ym5NZ1BWeHVJQ0FnSUNodmNIUnBiMjV6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaXdnY0hKbFptbDRPaUJ6ZEhKcGJtY3NJSE5sWlc0NklGZGxZV3RUWlhROFVtVmpiM0prUEhOMGNtbHVaeXdnZFc1cmJtOTNiajQrTEZ4dUlDQWdJQ0JvWVc1a2JHVnlPaUJGZUhSeVlVOXdkR2x2Ym5OSVlXNWtiR1Z5S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOXdkR2x2Ym5NZ1BUMGdKMjlpYW1WamRDY2dKaVlnYjNCMGFXOXVjeUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9jMlZsYmk1b1lYTW9iM0IwYVc5dWN5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBOcGNtTjFiR0Z5SUhKbFptVnlaVzVqWlNCcGJpQnZjSFJwYjI1ekp5azdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYzJWbGJpNWhaR1FvYjNCMGFXOXVjeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1QySnFaV04wTG1WdWRISnBaWE1vYjNCMGFXOXVjeWt1Wm05eVJXRmphQ2dvVzJ0bGVTd2dkbUZzZFdWZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzVoYldVZ1BTQW9jSEpsWm1sNEtTQS9JSEJ5WldacGVDQXJJR3RsZVNBNklHdGxlVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ0oyOWlhbVZqZENjcElIdGNiaUFnSUNBZ0lDQWdJQ0JwZEdWeVlYUmxSWGgwY21GUGNIUnBiMjV6S0haaGJIVmxJR0Z6SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtMQ0J1WVcxbElDc2dKeTRuTENCelpXVnVMQ0JvWVc1a2JHVnlLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnZG1Gc2RXVWdQVDA5SUNkemRISnBibWNuSUh4OElIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ0oyNTFiV0psY2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0JvWVc1a2JHVnlLRzVoYldVc0lIWmhiSFZsTG5SdlUzUnlhVzVuS0NrcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKMkp2YjJ4bFlXNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FHRnVaR3hsY2lodVlXMWxMQ0FvZG1Gc2RXVXBJRDhnSnpFbklEb2dKekFuS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFTmhiaWQwSUdoaGJtUnNaU0JsZUhSeVlTQmpiMjVtYVdjZ2RIbHdaVG9nSkh0MGVYQmxiMllnZG1Gc2RXVjlZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgwN1hHNWNiaThxS2x4dUlDb2dZMmhsWTJzZ2QyVmlJR0Z6YzJWdFlteDVJRUZRU1NkeklHeGhjM1FnWlhKeWIzSWdZVzVrSUhSb2NtOTNJR1Z5Y205eUlHbG1JR0Z1ZVNCbGNuSnZjaUJ2WTJOMWNuSmxaQzVjYmlBcUlFQndZWEpoYlNCdFpYTnpZV2RsSUdFZ2JXVnpjMkZuWlNCMWMyVmtJSGRvWlc0Z1lXNGdaWEp5YjNJZ2IyTmpkWEp5WldRdVhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQmphR1ZqYTB4aGMzUkZjbkp2Y2lBOUlDaHRaWE56WVdkbE9pQnpkSEpwYm1jcE9pQjJiMmxrSUQwK0lIdGNiaUFnWTI5dWMzUWdkMkZ6YlNBOUlHZGxkRWx1YzNSaGJtTmxLQ2s3WEc1Y2JpQWdZMjl1YzNRZ2MzUmhZMnNnUFNCM1lYTnRMbk4wWVdOclUyRjJaU2dwTzF4dUlDQjBjbmtnZTF4dUlDQWdJR052Ym5OMElIQmhjbUZ0YzA5bVpuTmxkQ0E5SUhkaGMyMHVjM1JoWTJ0QmJHeHZZeWc0S1R0Y2JpQWdJQ0IzWVhOdExsOVBjblJIWlhSTVlYTjBSWEp5YjNJb2NHRnlZVzF6VDJabWMyVjBMQ0J3WVhKaGJYTlBabVp6WlhRZ0t5QTBLVHRjYmlBZ0lDQmpiMjV6ZENCbGNuSnZja052WkdVZ1BTQjNZWE50TGtoRlFWQXpNbHR3WVhKaGJYTlBabVp6WlhRZ0x5QTBYVHRjYmlBZ0lDQmpiMjV6ZENCbGNuSnZjazFsYzNOaFoyVlFiMmx1ZEdWeUlEMGdkMkZ6YlM1SVJVRlFWVE15VzNCaGNtRnRjMDltWm5ObGRDQXZJRFFnS3lBeFhUdGNiaUFnSUNCamIyNXpkQ0JsY25KdmNrMWxjM05oWjJVZ1BTQmxjbkp2Y2sxbGMzTmhaMlZRYjJsdWRHVnlJRDhnZDJGemJTNVZWRVk0Vkc5VGRISnBibWNvWlhKeWIzSk5aWE56WVdkbFVHOXBiblJsY2lrZ09pQW5KenRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lDUjdiV1Z6YzJGblpYMGdSVkpTVDFKZlEwOUVSVG9nSkh0bGNuSnZja052WkdWOUxDQkZVbEpQVWw5TlJWTlRRVWRGT2lBa2UyVnljbTl5VFdWemMyRm5aWDFnS1R0Y2JpQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQjNZWE50TG5OMFlXTnJVbVZ6ZEc5eVpTaHpkR0ZqYXlrN1hHNGdJSDFjYm4wN1hHNGlMQ0FpTHk4Z1EyOXdlWEpwWjJoMElDaGpLU0JOYVdOeWIzTnZablFnUTI5eWNHOXlZWFJwYjI0dUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzR2THlCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1RVbFVJRXhwWTJWdWMyVXVYRzVjYm1sdGNHOXlkQ0I3U1c1bVpYSmxibU5sVTJWemMybHZibjBnWm5KdmJTQW5iMjV1ZUhKMWJuUnBiV1V0WTI5dGJXOXVKenRjYmx4dWFXMXdiM0owSUh0blpYUkpibk4wWVc1alpYMGdabkp2YlNBbkxpOTNZWE50TFdaaFkzUnZjbmtuTzF4dWFXMXdiM0owSUh0aGJHeHZZMWRoYzIxVGRISnBibWNzSUdOb1pXTnJUR0Z6ZEVWeWNtOXlMQ0JwZEdWeVlYUmxSWGgwY21GUGNIUnBiMjV6ZlNCbWNtOXRJQ2N1TDNkaGMyMHRkWFJwYkhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2MyVjBVblZ1VDNCMGFXOXVjeUE5SUNodmNIUnBiMjV6T2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGxKMWJrOXdkR2x2Ym5NcE9pQmJiblZ0WW1WeUxDQnVkVzFpWlhKYlhWMGdQVDRnZTF4dUlDQmpiMjV6ZENCM1lYTnRJRDBnWjJWMFNXNXpkR0Z1WTJVb0tUdGNiaUFnYkdWMElISjFiazl3ZEdsdmJuTklZVzVrYkdVZ1BTQXdPMXh1SUNCamIyNXpkQ0JoYkd4dlkzTTZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNWNiaUFnWTI5dWMzUWdjblZ1VDNCMGFXOXVjem9nU1c1bVpYSmxibU5sVTJWemMybHZiaTVTZFc1UGNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3lCOGZDQjdmVHRjYmx4dUlDQjBjbmtnZTF4dUlDQWdJR2xtSUNodmNIUnBiMjV6UHk1c2IyZFRaWFpsY21sMGVVeGxkbVZzSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJSEoxYms5d2RHbHZibk11Ykc5blUyVjJaWEpwZEhsTVpYWmxiQ0E5SURJN0lDQXZMeUJFWldaaGRXeDBJSFJ2SUhkaGNtNXBibWRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRnh1SUNBZ0lDQWdJQ0IwZVhCbGIyWWdiM0IwYVc5dWN5NXNiMmRUWlhabGNtbDBlVXhsZG1Wc0lDRTlQU0FuYm5WdFltVnlKeUI4ZkNBaFRuVnRZbVZ5TG1selNXNTBaV2RsY2lodmNIUnBiMjV6TG14dloxTmxkbVZ5YVhSNVRHVjJaV3dwSUh4OFhHNGdJQ0FnSUNBZ0lHOXdkR2x2Ym5NdWJHOW5VMlYyWlhKcGRIbE1aWFpsYkNBOElEQWdmSHdnYjNCMGFXOXVjeTVzYjJkVFpYWmxjbWwwZVV4bGRtVnNJRDRnTkNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCc2IyY2djMlZ5ZG1WeWFYUjVJR3hsZG1Wc0lHbHpJRzV2ZENCMllXeHBaRG9nSkh0dmNIUnBiMjV6TG14dloxTmxkbVZ5YVhSNVRHVjJaV3g5WUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NL0xteHZaMVpsY21KdmMybDBlVXhsZG1Wc0lEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhKMWJrOXdkR2x2Ym5NdWJHOW5WbVZ5WW05emFYUjVUR1YyWld3Z1BTQXdPeUFnTHk4Z1JHVm1ZWFZzZENCMGJ5QXdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ2IzQjBhVzl1Y3k1c2IyZFdaWEppYjNOcGRIbE1aWFpsYkNBaFBUMGdKMjUxYldKbGNpY2dmSHdnSVU1MWJXSmxjaTVwYzBsdWRHVm5aWElvYjNCMGFXOXVjeTVzYjJkV1pYSmliM05wZEhsTVpYWmxiQ2twSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnYkc5bklIWmxjbUp2YzJsMGVTQnNaWFpsYkNCcGN5QnViM1FnZG1Gc2FXUTZJQ1I3YjNCMGFXOXVjeTVzYjJkV1pYSmliM05wZEhsTVpYWmxiSDFnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3o4dWRHVnliV2x1WVhSbElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhKMWJrOXdkR2x2Ym5NdWRHVnliV2x1WVhSbElEMGdabUZzYzJVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElIUmhaMFJoZEdGUFptWnpaWFFnUFNBd08xeHVJQ0FnSUdsbUlDaHZjSFJwYjI1elB5NTBZV2NnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdkR0ZuUkdGMFlVOW1abk5sZENBOUlHRnNiRzlqVjJGemJWTjBjbWx1WnlodmNIUnBiMjV6TG5SaFp5d2dZV3hzYjJOektUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeWRXNVBjSFJwYjI1elNHRnVaR3hsSUQwZ2QyRnpiUzVmVDNKMFEzSmxZWFJsVW5WdVQzQjBhVzl1Y3loY2JpQWdJQ0FnSUNBZ2NuVnVUM0IwYVc5dWN5NXNiMmRUWlhabGNtbDBlVXhsZG1Wc0lTd2djblZ1VDNCMGFXOXVjeTVzYjJkV1pYSmliM05wZEhsTVpYWmxiQ0VzSUNFaGNuVnVUM0IwYVc5dWN5NTBaWEp0YVc1aGRHVWhMQ0IwWVdkRVlYUmhUMlptYzJWMEtUdGNiaUFnSUNCcFppQW9jblZ1VDNCMGFXOXVjMGhoYm1Sc1pTQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ1kyaGxZMnRNWVhOMFJYSnliM0lvSjBOaGJseGNKM1FnWTNKbFlYUmxJSEoxYmlCdmNIUnBiMjV6TGljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZjSFJwYjI1elB5NWxlSFJ5WVNBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JwZEdWeVlYUmxSWGgwY21GUGNIUnBiMjV6S0c5d2RHbHZibk11WlhoMGNtRXNJQ2NuTENCdVpYY2dWMlZoYTFObGREeFNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGo0b0tTd2dLR3RsZVN3Z2RtRnNkV1VwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2EyVjVSR0YwWVU5bVpuTmxkQ0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWhyWlhrc0lHRnNiRzlqY3lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhaaGJIVmxSR0YwWVU5bVpuTmxkQ0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWgyWVd4MVpTd2dZV3hzYjJOektUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2QyRnpiUzVmVDNKMFFXUmtVblZ1UTI5dVptbG5SVzUwY25rb2NuVnVUM0IwYVc5dWMwaGhibVJzWlN3Z2EyVjVSR0YwWVU5bVpuTmxkQ3dnZG1Gc2RXVkVZWFJoVDJabWMyVjBLU0FoUFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLR0JEWVc0bmRDQnpaWFFnWVNCeWRXNGdZMjl1Wm1sbklHVnVkSEo1T2lBa2UydGxlWDBnTFNBa2UzWmhiSFZsZlM1Z0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlGdHlkVzVQY0hScGIyNXpTR0Z1Wkd4bExDQmhiR3h2WTNOZE8xeHVJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnYVdZZ0tISjFiazl3ZEdsdmJuTklZVzVrYkdVZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUhkaGMyMHVYMDl5ZEZKbGJHVmhjMlZTZFc1UGNIUnBiMjV6S0hKMWJrOXdkR2x2Ym5OSVlXNWtiR1VwTzF4dUlDQWdJSDFjYmlBZ0lDQmhiR3h2WTNNdVptOXlSV0ZqYUNoaGJHeHZZeUE5UGlCM1lYTnRMbDltY21WbEtHRnNiRzlqS1NrN1hHNGdJQ0FnZEdoeWIzY2daVHRjYmlBZ2ZWeHVmVHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElIdEpibVpsY21WdVkyVlRaWE56YVc5dWZTQm1jbTl0SUNkdmJtNTRjblZ1ZEdsdFpTMWpiMjF0YjI0bk8xeHVYRzVwYlhCdmNuUWdlMmRsZEVsdWMzUmhibU5sZlNCbWNtOXRJQ2N1TDNkaGMyMHRabUZqZEc5eWVTYzdYRzVwYlhCdmNuUWdlMkZzYkc5alYyRnpiVk4wY21sdVp5d2dZMmhsWTJ0TVlYTjBSWEp5YjNJc0lHbDBaWEpoZEdWRmVIUnlZVTl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHZkMkZ6YlMxMWRHbHNjeWM3WEc1Y2JtTnZibk4wSUdkbGRFZHlZWEJvVDNCMGFXMTZZWFJwYjI1TVpYWmxiQ0E5SUNobmNtRndhRTl3ZEdsdGFYcGhkR2x2Ymt4bGRtVnNPaUJ6ZEhKcGJtZDhkVzVyYm05M2JpazZJRzUxYldKbGNpQTlQaUI3WEc0Z0lITjNhWFJqYUNBb1ozSmhjR2hQY0hScGJXbDZZWFJwYjI1TVpYWmxiQ2tnZTF4dUlDQWdJR05oYzJVZ0oyUnBjMkZpYkdWa0p6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0FnSUdOaGMyVWdKMkpoYzJsakp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUdOaGMyVWdKMlY0ZEdWdVpHVmtKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQXlPMXh1SUNBZ0lHTmhjMlVnSjJGc2JDYzZYRzRnSUNBZ0lDQnlaWFIxY200Z09UazdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnZFc1emRYQndiM0owWldRZ1ozSmhjR2dnYjNCMGFXMXBlbUYwYVc5dUlHeGxkbVZzT2lBa2UyZHlZWEJvVDNCMGFXMXBlbUYwYVc5dVRHVjJaV3g5WUNrN1hHNGdJSDFjYm4wN1hHNWNibU52Ym5OMElHZGxkRVY0WldOMWRHbHZiazF2WkdVZ1BTQW9aWGhsWTNWMGFXOXVUVzlrWlRvZ0ozTmxjWFZsYm5ScFlXd25mQ2R3WVhKaGJHeGxiQ2NwT2lCdWRXMWlaWElnUFQ0Z2UxeHVJQ0J6ZDJsMFkyZ2dLR1Y0WldOMWRHbHZiazF2WkdVcElIdGNiaUFnSUNCallYTmxJQ2R6WlhGMVpXNTBhV0ZzSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF3TzF4dUlDQWdJR05oYzJVZ0ozQmhjbUZzYkdWc0p6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZSFZ1YzNWd2NHOXlkR1ZrSUdWNFpXTjFkR2x2YmlCdGIyUmxPaUFrZTJWNFpXTjFkR2x2YmsxdlpHVjlZQ2s3WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUdGd2NHVnVaRVJsWm1GMWJIUlBjSFJwYjI1eklEMGdLRzl3ZEdsdmJuTTZJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVVMlZ6YzJsdmJrOXdkR2x2Ym5NcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tDRnZjSFJwYjI1ekxtVjRkSEpoS1NCN1hHNGdJQ0FnYjNCMGFXOXVjeTVsZUhSeVlTQTlJSHQ5TzF4dUlDQjlYRzRnSUdsbUlDZ2hiM0IwYVc5dWN5NWxlSFJ5WVM1elpYTnphVzl1S1NCN1hHNGdJQ0FnYjNCMGFXOXVjeTVsZUhSeVlTNXpaWE56YVc5dUlEMGdlMzA3WEc0Z0lIMWNiaUFnWTI5dWMzUWdjMlZ6YzJsdmJpQTlJRzl3ZEdsdmJuTXVaWGgwY21FdWMyVnpjMmx2YmlCaGN5QlNaV052Y21ROGMzUnlhVzVuTENCemRISnBibWMrTzF4dUlDQnBaaUFvSVhObGMzTnBiMjR1ZFhObFgyOXlkRjl0YjJSbGJGOWllWFJsYzE5a2FYSmxZM1JzZVNrZ2UxeHVJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCallXMWxiR05oYzJWY2JpQWdJQ0J6WlhOemFXOXVMblZ6WlY5dmNuUmZiVzlrWld4ZllubDBaWE5mWkdseVpXTjBiSGtnUFNBbk1TYzdYRzRnSUgxY2JseHVJQ0F2THlCcFppQjFjMmx1WnlCS1UwVlFJSGRwZEdnZ1YyVmlSMUJWTENCaGJIZGhlWE1nWkdsellXSnNaU0J0WlcxdmNua2djR0YwZEdWeWJseHVJQ0JwWmlBb2IzQjBhVzl1Y3k1bGVHVmpkWFJwYjI1UWNtOTJhV1JsY25NZ0ppWmNiaUFnSUNBZ0lHOXdkR2x2Ym5NdVpYaGxZM1YwYVc5dVVISnZkbWxrWlhKekxuTnZiV1VvWlhBZ1BUNGdLSFI1Y0dWdlppQmxjQ0E5UFQwZ0ozTjBjbWx1WnljZ1B5QmxjQ0E2SUdWd0xtNWhiV1VwSUQwOVBTQW5kMlZpWjNCMUp5a3BJSHRjYmlBZ0lDQnZjSFJwYjI1ekxtVnVZV0pzWlUxbGJWQmhkSFJsY200Z1BTQm1ZV3h6WlR0Y2JpQWdmVnh1ZlR0Y2JseHVZMjl1YzNRZ2MyVjBSWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSnpJRDFjYmlBZ0lDQW9jMlZ6YzJsdmJrOXdkR2x2Ym5OSVlXNWtiR1U2SUc1MWJXSmxjaXdnWlhobFkzVjBhVzl1VUhKdmRtbGtaWEp6T2lCeVpXRmtiMjVzZVNCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGtWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5UTI5dVptbG5XMTBzWEc0Z0lDQWdJR0ZzYkc5amN6b2diblZ0WW1WeVcxMHBPaUIyYjJsa0lEMCtJSHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnWlhBZ2IyWWdaWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSnpLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQmxjRTVoYldVZ1BTQjBlWEJsYjJZZ1pYQWdQVDA5SUNkemRISnBibWNuSUQ4Z1pYQWdPaUJsY0M1dVlXMWxPMXh1WEc0Z0lDQWdJQ0FnSUM4dklHTm9aV05ySUVWUUlHNWhiV1ZjYmlBZ0lDQWdJQ0FnYzNkcGRHTm9JQ2hsY0U1aGJXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCallYTmxJQ2QzWldKdWJpYzZYRzRnSUNBZ0lDQWdJQ0FnSUNCbGNFNWhiV1VnUFNBblYwVkNUazRuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJsY0NBaFBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2QyVmlibTVQY0hScGIyNXpJRDBnWlhBZ1lYTWdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVhaV0pPVGtWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5VDNCMGFXOXVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZDJWaWJtNVBjSFJwYjI1elB5NWtaWFpwWTJWVWVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdhMlY1UkdGMFlVOW1abk5sZENBOUlHRnNiRzlqVjJGemJWTjBjbWx1WnlnblpHVjJhV05sVkhsd1pTY3NJR0ZzYkc5amN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZFWVhSaFQyWm1jMlYwSUQwZ1lXeHNiMk5YWVhOdFUzUnlhVzVuS0hkbFltNXVUM0IwYVc5dWN5NWtaWFpwWTJWVWVYQmxMQ0JoYkd4dlkzTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoblpYUkpibk4wWVc1alpTZ3BMbDlQY25SQlpHUlRaWE56YVc5dVEyOXVabWxuUlc1MGNua29jMlZ6YzJsdmJrOXdkR2x2Ym5OSVlXNWtiR1VzSUd0bGVVUmhkR0ZQWm1aelpYUXNJSFpoYkhWbFJHRjBZVTltWm5ObGRDa2dJVDA5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLR0JEWVc0bmRDQnpaWFFnWVNCelpYTnphVzl1SUdOdmJtWnBaeUJsYm5SeWVUb2dKMlJsZG1salpWUjVjR1VuSUMwZ0pIdDNaV0p1Yms5d2RHbHZibk11WkdWMmFXTmxWSGx3WlgwdVlDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gzWldKdWJrOXdkR2x2Ym5NL0xtNTFiVlJvY21WaFpITXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2JuVnRWR2h5WldGa2N5QTlJSGRsWW01dVQzQjBhVzl1Y3k1dWRXMVVhSEpsWVdSek8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRXAxYzNRZ2FXZHViM0psSUdsdWRtRnNhV1FnZDJWaWJtNVBjSFJwYjI1ekxtNTFiVlJvY21WaFpITXVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ1ZFcxVWFISmxZV1J6SUNFOUlDZHVkVzFpWlhJbklIeDhJQ0ZPZFcxaVpYSXVhWE5KYm5SbFoyVnlLRzUxYlZSb2NtVmhaSE1wSUh4OElHNTFiVlJvY21WaFpITWdQQ0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVkVzFVYUhKbFlXUnpJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYTJWNVJHRjBZVTltWm5ObGRDQTlJR0ZzYkc5alYyRnpiVk4wY21sdVp5Z25iblZ0VkdoeVpXRmtjeWNzSUdGc2JHOWpjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkbUZzZFdWRVlYUmhUMlptYzJWMElEMGdZV3hzYjJOWFlYTnRVM1J5YVc1bktHNTFiVlJvY21WaFpITXVkRzlUZEhKcGJtY29LU3dnWVd4c2IyTnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1oyVjBTVzV6ZEdGdVkyVW9LUzVmVDNKMFFXUmtVMlZ6YzJsdmJrTnZibVpwWjBWdWRISjVLSE5sYzNOcGIyNVBjSFJwYjI1elNHRnVaR3hsTENCclpYbEVZWFJoVDJabWMyVjBMQ0IyWVd4MVpVUmhkR0ZQWm1aelpYUXBJQ0U5UFZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamFHVmphMHhoYzNSRmNuSnZjaWhnUTJGdUozUWdjMlYwSUdFZ2MyVnpjMmx2YmlCamIyNW1hV2NnWlc1MGNuazZJQ2R1ZFcxVWFISmxZV1J6SnlBdElDUjdkMlZpYm01UGNIUnBiMjV6TG01MWJWUm9jbVZoWkhOOUxtQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZDJWaWJtNVBjSFJwYjI1elB5NXdiM2RsY2xCeVpXWmxjbVZ1WTJVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCclpYbEVZWFJoVDJabWMyVjBJRDBnWVd4c2IyTlhZWE50VTNSeWFXNW5LQ2R3YjNkbGNsQnlaV1psY21WdVkyVW5MQ0JoYkd4dlkzTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIWmhiSFZsUkdGMFlVOW1abk5sZENBOUlHRnNiRzlqVjJGemJWTjBjbWx1WnloM1pXSnViazl3ZEdsdmJuTXVjRzkzWlhKUWNtVm1aWEpsYm1ObExDQmhiR3h2WTNNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2huWlhSSmJuTjBZVzVqWlNncExsOVBjblJCWkdSVFpYTnphVzl1UTI5dVptbG5SVzUwY25rb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXNJR3RsZVVSaGRHRlBabVp6WlhRc0lIWmhiSFZsUkdGMFlVOW1abk5sZENrZ0lUMDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdCRFlXNG5kQ0J6WlhRZ1lTQnpaWE56YVc5dUlHTnZibVpwWnlCbGJuUnllVG9nSjNCdmQyVnlVSEpsWm1WeVpXNWpaU2NnTFNBa2UzZGxZbTV1VDNCMGFXOXVjeTV3YjNkbGNsQnlaV1psY21WdVkyVjlMbUFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0FuZDJWaVozQjFKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lHVndUbUZ0WlNBOUlDZEtVeWM3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR1Z3SUNFOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCM1pXSm5jSFZQY0hScGIyNXpJRDBnWlhBZ1lYTWdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVhaV0pIY0hWRmVHVmpkWFJwYjI1UWNtOTJhV1JsY2s5d2RHbHZianRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hkbFltZHdkVTl3ZEdsdmJuTS9MbkJ5WldabGNuSmxaRXhoZVc5MWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoM1pXSm5jSFZQY0hScGIyNXpMbkJ5WldabGNuSmxaRXhoZVc5MWRDQWhQVDBnSjA1RFNGY25JQ1ltSUhkbFltZHdkVTl3ZEdsdmJuTXVjSEpsWm1WeWNtVmtUR0Y1YjNWMElDRTlQU0FuVGtoWFF5Y3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnY0hKbFptVnljbVZrVEdGNWIzVjBJRzExYzNRZ1ltVWdaV2wwYUdWeUlDZE9RMGhYSnlCdmNpQW5Ua2hYUXljNklDUjdkMlZpWjNCMVQzQjBhVzl1Y3k1d2NtVm1aWEp5WldSTVlYbHZkWFI5WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUd0bGVVUmhkR0ZQWm1aelpYUWdQU0JoYkd4dlkxZGhjMjFUZEhKcGJtY29KM0J5WldabGNuSmxaRXhoZVc5MWRDY3NJR0ZzYkc5amN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZFWVhSaFQyWm1jMlYwSUQwZ1lXeHNiMk5YWVhOdFUzUnlhVzVuS0hkbFltZHdkVTl3ZEdsdmJuTXVjSEpsWm1WeWNtVmtUR0Y1YjNWMExDQmhiR3h2WTNNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2huWlhSSmJuTjBZVzVqWlNncExsOVBjblJCWkdSVFpYTnphVzl1UTI5dVptbG5SVzUwY25rb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXNJR3RsZVVSaGRHRlBabVp6WlhRc0lIWmhiSFZsUkdGMFlVOW1abk5sZENrZ0lUMDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdCRFlXNG5kQ0J6WlhRZ1lTQnpaWE56YVc5dUlHTnZibVpwWnlCbGJuUnllVG9nSjNCeVpXWmxjbkpsWkV4aGVXOTFkQ2NnTFNBa2UzZGxZbWR3ZFU5d2RHbHZibk11Y0hKbFptVnljbVZrVEdGNWIzVjBmUzVnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNkaGMyMG5PbHh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMk53ZFNjNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQnViM1FnYzNWd2NHOXlkR1ZrSUdWNFpXTjFkR2x2YmlCd2NtOTJhV1JsY2pvZ0pIdGxjRTVoYldWOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0JsY0U1aGJXVkVZWFJoVDJabWMyVjBJRDBnWVd4c2IyTlhZWE50VTNSeWFXNW5LR1Z3VG1GdFpTd2dZV3hzYjJOektUdGNiaUFnSUNBZ0lDQWdhV1lnS0dkbGRFbHVjM1JoYm1ObEtDa3VYMDl5ZEVGd2NHVnVaRVY0WldOMWRHbHZibEJ5YjNacFpHVnlLSE5sYzNOcGIyNVBjSFJwYjI1elNHRnVaR3hsTENCbGNFNWhiV1ZFWVhSaFQyWm1jMlYwS1NBaFBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTm9aV05yVEdGemRFVnljbTl5S0dCRFlXNG5kQ0JoY0hCbGJtUWdaWGhsWTNWMGFXOXVJSEJ5YjNacFpHVnlPaUFrZTJWd1RtRnRaWDB1WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2MyVjBVMlZ6YzJsdmJrOXdkR2x2Ym5NZ1BTQW9iM0IwYVc5dWN6ODZJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVVMlZ6YzJsdmJrOXdkR2x2Ym5NcE9pQmJiblZ0WW1WeUxDQnVkVzFpWlhKYlhWMGdQVDRnZTF4dUlDQmpiMjV6ZENCM1lYTnRJRDBnWjJWMFNXNXpkR0Z1WTJVb0tUdGNiaUFnYkdWMElITmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxJRDBnTUR0Y2JpQWdZMjl1YzNRZ1lXeHNiMk56T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1WEc0Z0lHTnZibk4wSUhObGMzTnBiMjVQY0hScGIyNXpPaUJKYm1abGNtVnVZMlZUWlhOemFXOXVMbE5sYzNOcGIyNVBjSFJwYjI1eklEMGdiM0IwYVc5dWN5QjhmQ0I3ZlR0Y2JpQWdZWEJ3Wlc1a1JHVm1ZWFZzZEU5d2RHbHZibk1vYzJWemMybHZiazl3ZEdsdmJuTXBPMXh1WEc0Z0lIUnllU0I3WEc0Z0lDQWdZMjl1YzNRZ1ozSmhjR2hQY0hScGJXbDZZWFJwYjI1TVpYWmxiQ0E5SUdkbGRFZHlZWEJvVDNCMGFXMTZZWFJwYjI1TVpYWmxiQ2h6WlhOemFXOXVUM0IwYVc5dWN5NW5jbUZ3YUU5d2RHbHRhWHBoZEdsdmJreGxkbVZzSUQ4L0lDZGhiR3duS1R0Y2JpQWdJQ0JqYjI1emRDQmxlR1ZqZFhScGIyNU5iMlJsSUQwZ1oyVjBSWGhsWTNWMGFXOXVUVzlrWlNoelpYTnphVzl1VDNCMGFXOXVjeTVsZUdWamRYUnBiMjVOYjJSbElEOC9JQ2R6WlhGMVpXNTBhV0ZzSnlrN1hHNGdJQ0FnWTI5dWMzUWdiRzluU1dSRVlYUmhUMlptYzJWMElEMWNiaUFnSUNBZ0lDQWdkSGx3Wlc5bUlITmxjM05wYjI1UGNIUnBiMjV6TG14dlowbGtJRDA5UFNBbmMzUnlhVzVuSnlBL0lHRnNiRzlqVjJGemJWTjBjbWx1WnloelpYTnphVzl1VDNCMGFXOXVjeTVzYjJkSlpDd2dZV3hzYjJOektTQTZJREE3WEc1Y2JpQWdJQ0JqYjI1emRDQnNiMmRUWlhabGNtbDBlVXhsZG1Wc0lEMGdjMlZ6YzJsdmJrOXdkR2x2Ym5NdWJHOW5VMlYyWlhKcGRIbE1aWFpsYkNBL1B5QXlPeUFnTHk4Z1JHVm1ZWFZzZENCMGJ5QXlJQzBnZDJGeWJtbHVaMXh1SUNBZ0lHbG1JQ2doVG5WdFltVnlMbWx6U1c1MFpXZGxjaWhzYjJkVFpYWmxjbWwwZVV4bGRtVnNLU0I4ZkNCc2IyZFRaWFpsY21sMGVVeGxkbVZzSUR3Z01DQjhmQ0JzYjJkVFpYWmxjbWwwZVV4bGRtVnNJRDRnTkNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCc2IyY2djMlZ5ZG1WeWFYUjVJR3hsZG1Wc0lHbHpJRzV2ZENCMllXeHBaRG9nSkh0c2IyZFRaWFpsY21sMGVVeGxkbVZzZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJR3h2WjFabGNtSnZjMmwwZVV4bGRtVnNJRDBnYzJWemMybHZiazl3ZEdsdmJuTXViRzluVm1WeVltOXphWFI1VEdWMlpXd2dQejhnTURzZ0lDOHZJRVJsWm1GMWJIUWdkRzhnTUNBdElIWmxjbUp2YzJWY2JpQWdJQ0JwWmlBb0lVNTFiV0psY2k1cGMwbHVkR1ZuWlhJb2JHOW5WbVZ5WW05emFYUjVUR1YyWld3cElIeDhJR3h2WjFabGNtSnZjMmwwZVV4bGRtVnNJRHdnTUNCOGZDQnNiMmRXWlhKaWIzTnBkSGxNWlhabGJDQStJRFFwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnYkc5bklIWmxjbUp2YzJsMGVTQnNaWFpsYkNCcGN5QnViM1FnZG1Gc2FXUTZJQ1I3Ykc5blZtVnlZbTl6YVhSNVRHVjJaV3g5WUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdiM0IwYVcxcGVtVmtUVzlrWld4R2FXeGxVR0YwYUU5bVpuTmxkQ0E5SUhSNWNHVnZaaUJ6WlhOemFXOXVUM0IwYVc5dWN5NXZjSFJwYldsNlpXUk5iMlJsYkVacGJHVlFZWFJvSUQwOVBTQW5jM1J5YVc1bkp5QS9YRzRnSUNBZ0lDQWdJR0ZzYkc5alYyRnpiVk4wY21sdVp5aHpaWE56YVc5dVQzQjBhVzl1Y3k1dmNIUnBiV2w2WldSTmIyUmxiRVpwYkdWUVlYUm9MQ0JoYkd4dlkzTXBJRHBjYmlBZ0lDQWdJQ0FnTUR0Y2JseHVJQ0FnSUhObGMzTnBiMjVQY0hScGIyNXpTR0Z1Wkd4bElEMGdkMkZ6YlM1ZlQzSjBRM0psWVhSbFUyVnpjMmx2Yms5d2RHbHZibk1vWEc0Z0lDQWdJQ0FnSUdkeVlYQm9UM0IwYVcxcGVtRjBhVzl1VEdWMlpXd3NJQ0VoYzJWemMybHZiazl3ZEdsdmJuTXVaVzVoWW14bFEzQjFUV1Z0UVhKbGJtRXNJQ0VoYzJWemMybHZiazl3ZEdsdmJuTXVaVzVoWW14bFRXVnRVR0YwZEdWeWJpd2daWGhsWTNWMGFXOXVUVzlrWlN4Y2JpQWdJQ0FnSUNBZ0lTRnpaWE56YVc5dVQzQjBhVzl1Y3k1bGJtRmliR1ZRY205bWFXeHBibWNzSURBc0lHeHZaMGxrUkdGMFlVOW1abk5sZEN3Z2JHOW5VMlYyWlhKcGRIbE1aWFpsYkN3Z2JHOW5WbVZ5WW05emFYUjVUR1YyWld3c1hHNGdJQ0FnSUNBZ0lHOXdkR2x0YVhwbFpFMXZaR1ZzUm1sc1pWQmhkR2hQWm1aelpYUXBPMXh1SUNBZ0lHbG1JQ2h6WlhOemFXOXVUM0IwYVc5dWMwaGhibVJzWlNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnWTJobFkydE1ZWE4wUlhKeWIzSW9KME5oYmx4Y0ozUWdZM0psWVhSbElITmxjM05wYjI0Z2IzQjBhVzl1Y3k0bktUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jMlZ6YzJsdmJrOXdkR2x2Ym5NdVpYaGxZM1YwYVc5dVVISnZkbWxrWlhKektTQjdYRzRnSUNBZ0lDQnpaWFJGZUdWamRYUnBiMjVRY205MmFXUmxjbk1vYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVc0lITmxjM05wYjI1UGNIUnBiMjV6TG1WNFpXTjFkR2x2YmxCeWIzWnBaR1Z5Y3l3Z1lXeHNiMk56S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2MyVnpjMmx2Yms5d2RHbHZibk11Wlc1aFlteGxSM0poY0doRFlYQjBkWEpsSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYzJWemMybHZiazl3ZEdsdmJuTXVaVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxJQ0U5UFNBblltOXZiR1ZoYmljcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQmxibUZpYkdWSGNtRndhRU5oY0hSMWNtVWdiWFZ6ZENCaVpTQmhJR0p2YjJ4bFlXNGdkbUZzZFdVNklDUjdjMlZ6YzJsdmJrOXdkR2x2Ym5NdVpXNWhZbXhsUjNKaGNHaERZWEIwZFhKbGZXQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl1YzNRZ2EyVjVSR0YwWVU5bVpuTmxkQ0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWduWlc1aFlteGxSM0poY0doRFlYQjBkWEpsSnl3Z1lXeHNiMk56S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSFpoYkhWbFJHRjBZVTltWm5ObGRDQTlJR0ZzYkc5alYyRnpiVk4wY21sdVp5aHpaWE56YVc5dVQzQjBhVzl1Y3k1bGJtRmliR1ZIY21Gd2FFTmhjSFIxY21VdWRHOVRkSEpwYm1jb0tTd2dZV3hzYjJOektUdGNiaUFnSUNBZ0lHbG1JQ2gzWVhOdExsOVBjblJCWkdSVFpYTnphVzl1UTI5dVptbG5SVzUwY25rb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXNJR3RsZVVSaGRHRlBabVp6WlhRc0lIWmhiSFZsUkdGMFlVOW1abk5sZENrZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ1kyaGxZMnRNWVhOMFJYSnliM0lvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmdRMkZ1SjNRZ2MyVjBJR0VnYzJWemMybHZiaUJqYjI1bWFXY2daVzUwY25rNklDZGxibUZpYkdWSGNtRndhRU5oY0hSMWNtVW5JQzBnSkh0elpYTnphVzl1VDNCMGFXOXVjeTVsYm1GaWJHVkhjbUZ3YUVOaGNIUjFjbVY5TG1BcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHpaWE56YVc5dVQzQjBhVzl1Y3k1bWNtVmxSR2x0Wlc1emFXOXVUM1psY25KcFpHVnpLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUZ0dVlXMWxMQ0IyWVd4MVpWMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9jMlZ6YzJsdmJrOXdkR2x2Ym5NdVpuSmxaVVJwYldWdWMybHZiazkyWlhKeWFXUmxjeWtwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnVZVzFsSUNFOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnWm5KbFpTQmthVzFsYm5OcGIyNGdiM1psY25KcFpHVWdibUZ0WlNCdGRYTjBJR0psSUdFZ2MzUnlhVzVuT2lBa2UyNWhiV1Y5WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIyWVd4MVpTQWhQVDBnSjI1MWJXSmxjaWNnZkh3Z0lVNTFiV0psY2k1cGMwbHVkR1ZuWlhJb2RtRnNkV1VwSUh4OElIWmhiSFZsSUR3Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnWm5KbFpTQmthVzFsYm5OcGIyNGdiM1psY25KcFpHVWdkbUZzZFdVZ2JYVnpkQ0JpWlNCaElHNXZiaTF1WldkaGRHbDJaU0JwYm5SbFoyVnlPaUFrZTNaaGJIVmxmV0FwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUc1aGJXVlBabVp6WlhRZ1BTQmhiR3h2WTFkaGMyMVRkSEpwYm1jb2JtRnRaU3dnWVd4c2IyTnpLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIZGhjMjB1WDA5eWRFRmtaRVp5WldWRWFXMWxibk5wYjI1UGRtVnljbWxrWlNoelpYTnphVzl1VDNCMGFXOXVjMGhoYm1Sc1pTd2dibUZ0WlU5bVpuTmxkQ3dnZG1Gc2RXVXBJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWTJobFkydE1ZWE4wUlhKeWIzSW9ZRU5oYmlkMElITmxkQ0JoSUdaeVpXVWdaR2x0Wlc1emFXOXVJRzkyWlhKeWFXUmxPaUFrZTI1aGJXVjlJQzBnSkh0MllXeDFaWDB1WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jMlZ6YzJsdmJrOXdkR2x2Ym5NdVpYaDBjbUVnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdhWFJsY21GMFpVVjRkSEpoVDNCMGFXOXVjeWh6WlhOemFXOXVUM0IwYVc5dWN5NWxlSFJ5WVN3Z0p5Y3NJRzVsZHlCWFpXRnJVMlYwUEZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtQaWdwTENBb2EyVjVMQ0IyWVd4MVpTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JyWlhsRVlYUmhUMlptYzJWMElEMGdZV3hzYjJOWFlYTnRVM1J5YVc1bktHdGxlU3dnWVd4c2IyTnpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkbUZzZFdWRVlYUmhUMlptYzJWMElEMGdZV3hzYjJOWFlYTnRVM1J5YVc1bktIWmhiSFZsTENCaGJHeHZZM01wTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2gzWVhOdExsOVBjblJCWkdSVFpYTnphVzl1UTI5dVptbG5SVzUwY25rb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXNJR3RsZVVSaGRHRlBabVp6WlhRc0lIWmhiSFZsUkdGMFlVOW1abk5sZENrZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmphR1ZqYTB4aGMzUkZjbkp2Y2loZ1EyRnVKM1FnYzJWMElHRWdjMlZ6YzJsdmJpQmpiMjVtYVdjZ1pXNTBjbms2SUNSN2EyVjVmU0F0SUNSN2RtRnNkV1Y5TG1BcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1czTmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxMQ0JoYkd4dlkzTmRPMXh1SUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ2FXWWdLSE5sYzNOcGIyNVBjSFJwYjI1elNHRnVaR3hsSUNFOVBTQXdLU0I3WEc0Z0lDQWdJQ0IzWVhOdExsOVBjblJTWld4bFlYTmxVMlZ6YzJsdmJrOXdkR2x2Ym5Nb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXBPMXh1SUNBZ0lIMWNiaUFnSUNCaGJHeHZZM011Wm05eVJXRmphQ2hoYkd4dll5QTlQaUIzWVhOdExsOW1jbVZsS0dGc2JHOWpLU2s3WEc0Z0lDQWdkR2h5YjNjZ1pUdGNiaUFnZlZ4dWZUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0VVpXNXpiM0o5SUdaeWIyMGdKMjl1Ym5oeWRXNTBhVzFsTFdOdmJXMXZiaWM3WEc1Y2JpOHZJR0VnWkhWdGJYa2dkSGx3WlNCa1pXTnNZWEpoZEdsdmJpQm1iM0lnUm14dllYUXhOa0Z5Y21GNUlHbHVJR05oYzJVZ1lXNTVJSEJ2YkhsbWFXeHNJR2x6SUdGMllXbHNZV0pzWlM1Y2JtUmxZMnhoY21VZ1oyeHZZbUZzSUh0Y2JpQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRUIwZVhCbGMyTnlhWEIwTFdWemJHbHVkQzl1WVcxcGJtY3RZMjl1ZG1WdWRHbHZiaXdnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxXVjRjR3hwWTJsMExXRnVlVnh1SUNCamIyNXpkQ0JHYkc5aGRERTJRWEp5WVhrNklHRnVlVHRjYm4xY2JseHVMeThnVkdocGN5Qm1hV3hsSUdsdVkyeDFaR1Z6SUdOdmJXMXZiaUJrWldacGJtbDBhVzl1Y3k0Z1ZHaGxlU0JrYnlCT1QxUWdhR0YyWlNCa1pYQmxibVJsYm1ONUlHOXVJSFJvWlNCWFpXSkJjM05sYldKc2VTQnBibk4wWVc1alpTNWNibHh1THlvcVhHNGdLaUJEYjNCcFpXUWdabkp2YlNCUFRrNVlJR1JsWm1sdWFYUnBiMjR1SUZWelpTQjBhR2x6SUhSdklHUnliM0FnWkdWd1pXNWtaVzVqZVNBbmIyNXVlRjl3Y205MGJ5Y2dkRzhnWkdWamNtVmhjMlVnWTI5dGNHbHNaV1FnTG1weklHWnBiR1VnYzJsNlpTNWNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJR1Z1ZFcwZ1JHRjBZVlI1Y0dVZ2UxeHVJQ0IxYm1SbFptbHVaV1FnUFNBd0xGeHVJQ0JtYkc5aGRDQTlJREVzWEc0Z0lIVnBiblE0SUQwZ01peGNiaUFnYVc1ME9DQTlJRE1zWEc0Z0lIVnBiblF4TmlBOUlEUXNYRzRnSUdsdWRERTJJRDBnTlN4Y2JpQWdhVzUwTXpJZ1BTQTJMRnh1SUNCcGJuUTJOQ0E5SURjc1hHNGdJSE4wY21sdVp5QTlJRGdzWEc0Z0lHSnZiMndnUFNBNUxGeHVJQ0JtYkc5aGRERTJJRDBnTVRBc1hHNGdJR1J2ZFdKc1pTQTlJREV4TEZ4dUlDQjFhVzUwTXpJZ1BTQXhNaXhjYmlBZ2RXbHVkRFkwSUQwZ01UTXNYRzRnSUdOdmJYQnNaWGcyTkNBOUlERTBMRnh1SUNCamIyMXdiR1Y0TVRJNElEMGdNVFVzWEc0Z0lHSm1iRzloZERFMklEMGdNVFpjYm4xY2JseHVMeW9xWEc0Z0tpQk5ZWEFnYzNSeWFXNW5JSFJsYm5OdmNpQmtZWFJoSUhSdklHVnVkVzBnZG1Gc2RXVmNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJSFJsYm5OdmNrUmhkR0ZVZVhCbFUzUnlhVzVuVkc5RmJuVnRJRDBnS0hSNWNHVTZJSE4wY21sdVp5azZJRVJoZEdGVWVYQmxJRDArSUh0Y2JpQWdjM2RwZEdOb0lDaDBlWEJsS1NCN1hHNGdJQ0FnWTJGelpTQW5hVzUwT0NjNlhHNGdJQ0FnSUNCeVpYUjFjbTRnUkdGMFlWUjVjR1V1YVc1ME9EdGNiaUFnSUNCallYTmxJQ2QxYVc1ME9DYzZYRzRnSUNBZ0lDQnlaWFIxY200Z1JHRjBZVlI1Y0dVdWRXbHVkRGc3WEc0Z0lDQWdZMkZ6WlNBblltOXZiQ2M2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSR0YwWVZSNWNHVXVZbTl2YkR0Y2JpQWdJQ0JqWVhObElDZHBiblF4TmljNlhHNGdJQ0FnSUNCeVpYUjFjbTRnUkdGMFlWUjVjR1V1YVc1ME1UWTdYRzRnSUNBZ1kyRnpaU0FuZFdsdWRERTJKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQkVZWFJoVkhsd1pTNTFhVzUwTVRZN1hHNGdJQ0FnWTJGelpTQW5hVzUwTXpJbk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUVSaGRHRlVlWEJsTG1sdWRETXlPMXh1SUNBZ0lHTmhjMlVnSjNWcGJuUXpNaWM2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSR0YwWVZSNWNHVXVkV2x1ZERNeU8xeHVJQ0FnSUdOaGMyVWdKMlpzYjJGME1UWW5PbHh1SUNBZ0lDQWdjbVYwZFhKdUlFUmhkR0ZVZVhCbExtWnNiMkYwTVRZN1hHNGdJQ0FnWTJGelpTQW5abXh2WVhRek1pYzZYRzRnSUNBZ0lDQnlaWFIxY200Z1JHRjBZVlI1Y0dVdVpteHZZWFE3WEc0Z0lDQWdZMkZ6WlNBblpteHZZWFEyTkNjNlhHNGdJQ0FnSUNCeVpYUjFjbTRnUkdGMFlWUjVjR1V1Wkc5MVlteGxPMXh1SUNBZ0lHTmhjMlVnSjNOMGNtbHVaeWM2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSR0YwWVZSNWNHVXVjM1J5YVc1bk8xeHVJQ0FnSUdOaGMyVWdKMmx1ZERZMEp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCRVlYUmhWSGx3WlM1cGJuUTJORHRjYmlBZ0lDQmpZWE5sSUNkMWFXNTBOalFuT2x4dUlDQWdJQ0FnY21WMGRYSnVJRVJoZEdGVWVYQmxMblZwYm5RMk5EdGNibHh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUhWdWMzVndjRzl5ZEdWa0lHUmhkR0VnZEhsd1pUb2dKSHQwZVhCbGZXQXBPMXh1SUNCOVhHNTlPMXh1WEc0dktpcGNiaUFxSUUxaGNDQmxiblZ0SUhaaGJIVmxJSFJ2SUhOMGNtbHVaeUIwWlc1emIzSWdaR0YwWVZ4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ2RHVnVjMjl5UkdGMFlWUjVjR1ZGYm5WdFZHOVRkSEpwYm1jZ1BTQW9kSGx3WlZCeWIzUnZPaUJFWVhSaFZIbHdaU2s2SUZSbGJuTnZjaTVVZVhCbElEMCtJSHRjYmlBZ2MzZHBkR05vSUNoMGVYQmxVSEp2ZEc4cElIdGNiaUFnSUNCallYTmxJRVJoZEdGVWVYQmxMbWx1ZERnNlhHNGdJQ0FnSUNCeVpYUjFjbTRnSjJsdWREZ25PMXh1SUNBZ0lHTmhjMlVnUkdGMFlWUjVjR1V1ZFdsdWREZzZYRzRnSUNBZ0lDQnlaWFIxY200Z0ozVnBiblE0Snp0Y2JpQWdJQ0JqWVhObElFUmhkR0ZVZVhCbExtSnZiMnc2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKMkp2YjJ3bk8xeHVJQ0FnSUdOaGMyVWdSR0YwWVZSNWNHVXVhVzUwTVRZNlhHNGdJQ0FnSUNCeVpYUjFjbTRnSjJsdWRERTJKenRjYmlBZ0lDQmpZWE5sSUVSaGRHRlVlWEJsTG5WcGJuUXhOanBjYmlBZ0lDQWdJSEpsZEhWeWJpQW5kV2x1ZERFMkp6dGNiaUFnSUNCallYTmxJRVJoZEdGVWVYQmxMbWx1ZERNeU9seHVJQ0FnSUNBZ2NtVjBkWEp1SUNkcGJuUXpNaWM3WEc0Z0lDQWdZMkZ6WlNCRVlYUmhWSGx3WlM1MWFXNTBNekk2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKM1ZwYm5Rek1pYzdYRzRnSUNBZ1kyRnpaU0JFWVhSaFZIbHdaUzVtYkc5aGRERTJPbHh1SUNBZ0lDQWdjbVYwZFhKdUlDZG1iRzloZERFMkp6dGNiaUFnSUNCallYTmxJRVJoZEdGVWVYQmxMbVpzYjJGME9seHVJQ0FnSUNBZ2NtVjBkWEp1SUNkbWJHOWhkRE15Snp0Y2JpQWdJQ0JqWVhObElFUmhkR0ZVZVhCbExtUnZkV0pzWlRwY2JpQWdJQ0FnSUhKbGRIVnliaUFuWm14dllYUTJOQ2M3WEc0Z0lDQWdZMkZ6WlNCRVlYUmhWSGx3WlM1emRISnBibWM2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKM04wY21sdVp5YzdYRzRnSUNBZ1kyRnpaU0JFWVhSaFZIbHdaUzVwYm5RMk5EcGNiaUFnSUNBZ0lISmxkSFZ5YmlBbmFXNTBOalFuTzF4dUlDQWdJR05oYzJVZ1JHRjBZVlI1Y0dVdWRXbHVkRFkwT2x4dUlDQWdJQ0FnY21WMGRYSnVJQ2QxYVc1ME5qUW5PMXh1WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ2RXNXpkWEJ3YjNKMFpXUWdaR0YwWVNCMGVYQmxPaUFrZTNSNWNHVlFjbTkwYjMxZ0tUdGNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJuWlhRZ2RHVnVjMjl5SUdWc1pXMWxiblFnYzJsNlpTQnBiaUJpZVhSbGN5QmllU0IwYUdVZ1oybDJaVzRnWkdGMFlTQjBlWEJsWEc0Z0tpQkFjbVYwZFhKdWN5QnphWHBsSUdsdUlHbHVkR1ZuWlhJZ2IzSWdkVzVrWldacGJtVmtJR2xtSUhSb1pTQmtZWFJoSUhSNWNHVWdhWE1nYm05MElITjFjSEJ2Y25SbFpGeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdaMlYwVkdWdWMyOXlSV3hsYldWdWRGTnBlbVVnUFNBb1pHRjBaVlI1Y0dVNklHNTFiV0psY2lrNklHNTFiV0psY254Y2JpQWdJQ0IxYm1SbFptbHVaV1FnUFQ0Z1czVnVaR1ZtYVc1bFpDd2dOQ3dnTVN3Z01Td2dNaXdnTWl3Z05Dd2dPQ3dnZFc1a1pXWnBibVZrTENBeExDQXlMQ0E0TENBMExDQTRMQ0IxYm1SbFptbHVaV1FzSUhWdVpHVm1hVzVsWkN3Z2RXNWtaV1pwYm1Wa1hWdGtZWFJsVkhsd1pWMDdYRzVjYmk4cUtseHVJQ29nWjJWMElIUjVjR1ZrSUdGeWNtRjVJR052Ym5OMGNuVmpkRzl5SUdKNUlIUm9aU0JuYVhabGJpQjBaVzV6YjNJZ2RIbHdaVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnZEdWdWMyOXlWSGx3WlZSdlZIbHdaV1JCY25KaGVVTnZibk4wY25WamRHOXlJRDBnS0hSNWNHVTZJRlJsYm5OdmNpNVVlWEJsS1RvZ1JteHZZWFF6TWtGeWNtRjVRMjl1YzNSeWRXTjBiM0o4VldsdWREaEJjbkpoZVVOdmJuTjBjblZqZEc5eWZGeHVJQ0FnSUVsdWREaEJjbkpoZVVOdmJuTjBjblZqZEc5eWZGVnBiblF4TmtGeWNtRjVRMjl1YzNSeWRXTjBiM0o4U1c1ME1UWkJjbkpoZVVOdmJuTjBjblZqZEc5eWZFbHVkRE15UVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhDYVdkSmJuUTJORUZ5Y21GNVEyOXVjM1J5ZFdOMGIzSjhYRzRnSUNBZ1ZXbHVkRGhCY25KaGVVTnZibk4wY25WamRHOXlmRVpzYjJGME5qUkJjbkpoZVVOdmJuTjBjblZqZEc5eWZGVnBiblF6TWtGeWNtRjVRMjl1YzNSeWRXTjBiM0o4UW1sblZXbHVkRFkwUVhKeVlYbERiMjV6ZEhKMVkzUnZjaUE5UGlCN1hHNGdJQ0FnSUNCemQybDBZMmdnS0hSNWNHVXBJSHRjYmlBZ0lDQWdJQ0FnWTJGelpTQW5abXh2WVhReE5pYzZYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1lXeHNiM2NnUm14dllYUXhOa0Z5Y21GNUlIQnZiSGxtYVd4c0xseHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBlWEJsYjJZZ1JteHZZWFF4TmtGeWNtRjVJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KaUJHYkc5aGRERTJRWEp5WVhrdVpuSnZiU0EvSUVac2IyRjBNVFpCY25KaGVTQTZJRlZwYm5ReE5rRnljbUY1TzF4dUlDQWdJQ0FnSUNCallYTmxJQ2RtYkc5aGRETXlKenBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnUm14dllYUXpNa0Z5Y21GNU8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNkMWFXNTBPQ2M2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUZWcGJuUTRRWEp5WVhrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjJsdWREZ25PbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJKYm5RNFFYSnlZWGs3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKM1ZwYm5ReE5pYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRlZwYm5ReE5rRnljbUY1TzF4dUlDQWdJQ0FnSUNCallYTmxJQ2RwYm5ReE5pYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRWx1ZERFMlFYSnlZWGs3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKMmx1ZERNeUp6cGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdTVzUwTXpKQmNuSmhlVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQW5ZbTl2YkNjNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlGVnBiblE0UVhKeVlYazdYRzRnSUNBZ0lDQWdJR05oYzJVZ0oyWnNiMkYwTmpRbk9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQkdiRzloZERZMFFYSnlZWGs3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKM1ZwYm5Rek1pYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRlZwYm5Rek1rRnljbUY1TzF4dUlDQWdJQ0FnSUNCallYTmxJQ2RwYm5RMk5DYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRUpwWjBsdWREWTBRWEp5WVhrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjNWcGJuUTJOQ2M2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUVKcFoxVnBiblEyTkVGeWNtRjVPMXh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnZFc1emRYQndiM0owWldRZ2RIbHdaVG9nSkh0MGVYQmxmV0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDA3WEc1Y2JpOHFLbHh1SUNvZ1RXRndJSE4wY21sdVp5QnNiMmNnYkdWMlpXd2dkRzhnYVc1MFpXZGxjaUIyWVd4MVpWeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdiRzluVEdWMlpXeFRkSEpwYm1kVWIwVnVkVzBnUFNBb2JHOW5UR1YyWld3L09pQW5kbVZ5WW05elpTZDhKMmx1Wm04bmZDZDNZWEp1YVc1bkozd25aWEp5YjNJbmZDZG1ZWFJoYkNjcE9pQnVkVzFpWlhJZ1BUNGdlMXh1SUNCemQybDBZMmdnS0d4dloweGxkbVZzS1NCN1hHNGdJQ0FnWTJGelpTQW5kbVZ5WW05elpTYzZYRzRnSUNBZ0lDQnlaWFIxY200Z01EdGNiaUFnSUNCallYTmxJQ2RwYm1adkp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUdOaGMyVWdKM2RoY201cGJtY25PbHh1SUNBZ0lDQWdjbVYwZFhKdUlESTdYRzRnSUNBZ1kyRnpaU0FuWlhKeWIzSW5PbHh1SUNBZ0lDQWdjbVYwZFhKdUlETTdYRzRnSUNBZ1kyRnpaU0FuWm1GMFlXd25PbHh1SUNBZ0lDQWdjbVYwZFhKdUlEUTdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnZFc1emRYQndiM0owWldRZ2JHOW5aMmx1WnlCc1pYWmxiRG9nSkh0c2IyZE1aWFpsYkgxZ0tUdGNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJEYUdWamF5QjNhR1YwYUdWeUlIUm9aU0JuYVhabGJpQjBaVzV6YjNJZ2RIbHdaU0JwY3lCemRYQndiM0owWldRZ1lua2dSMUJWSUdKMVptWmxjbHh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOSGNIVkNkV1ptWlhKVGRYQndiM0owWldSVWVYQmxJRDBnS0hSNWNHVTZJRlJsYm5OdmNpNVVlWEJsS1RvZ2RIbHdaU0JwY3lCVVpXNXpiM0l1UjNCMVFuVm1abVZ5UkdGMFlWUjVjR1Z6SUQwK0lIUjVjR1VnUFQwOUlDZG1iRzloZERNeUp5QjhmRnh1SUNBZ0lIUjVjR1VnUFQwOUlDZG1iRzloZERFMkp5QjhmQ0IwZVhCbElEMDlQU0FuYVc1ME16SW5JSHg4SUhSNWNHVWdQVDA5SUNkcGJuUTJOQ2NnZkh3Z2RIbHdaU0E5UFQwZ0ozVnBiblF6TWljZ2ZId2dkSGx3WlNBOVBUMGdKM1ZwYm5RNEp5QjhmRnh1SUNBZ0lIUjVjR1VnUFQwOUlDZGliMjlzSnp0Y2JseHVMeW9xWEc0Z0tpQk5ZWEFnYzNSeWFXNW5JR1JoZEdFZ2JHOWpZWFJwYjI0Z2RHOGdhVzUwWldkbGNpQjJZV3gxWlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1pHRjBZVXh2WTJGMGFXOXVVM1J5YVc1blZHOUZiblZ0SUQwZ0tHeHZZMkYwYVc5dU9pQlVaVzV6YjNJdVJHRjBZVXh2WTJGMGFXOXVLVG9nYm5WdFltVnlJRDArSUh0Y2JpQWdjM2RwZEdOb0lDaHNiMk5oZEdsdmJpa2dlMXh1SUNBZ0lHTmhjMlVnSjI1dmJtVW5PbHh1SUNBZ0lDQWdjbVYwZFhKdUlEQTdYRzRnSUNBZ1kyRnpaU0FuWTNCMUp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUdOaGMyVWdKMk53ZFMxd2FXNXVaV1FuT2x4dUlDQWdJQ0FnY21WMGRYSnVJREk3WEc0Z0lDQWdZMkZ6WlNBbmRHVjRkSFZ5WlNjNlhHNGdJQ0FnSUNCeVpYUjFjbTRnTXp0Y2JpQWdJQ0JqWVhObElDZG5jSFV0WW5WbVptVnlKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQTBPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUhWdWMzVndjRzl5ZEdWa0lHUmhkR0VnYkc5allYUnBiMjQ2SUNSN2JHOWpZWFJwYjI1OVlDazdYRzRnSUgxY2JuMDdYRzVjYmk4cUtseHVJQ29nVFdGd0lHbHVkR1ZuWlhJZ1pHRjBZU0JzYjJOaGRHbHZiaUIwYnlCemRISnBibWNnZG1Gc2RXVmNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJR1JoZEdGTWIyTmhkR2x2YmtWdWRXMVViMU4wY21sdVp5QTlJQ2hzYjJOaGRHbHZiam9nYm5WdFltVnlLVG9nVkdWdWMyOXlMa1JoZEdGTWIyTmhkR2x2Ym54MWJtUmxabWx1WldRZ1BUNWNiaUFnSUNBb1d5ZHViMjVsSnl3Z0oyTndkU2NzSUNkamNIVXRjR2x1Ym1Wa0p5d2dKM1JsZUhSMWNtVW5MQ0FuWjNCMUxXSjFabVpsY2lkZElHRnpJR052Ym5OMEtWdHNiMk5oZEdsdmJsMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENBcUlHRnpJR1p6SUdaeWIyMGdKMlp6Snp0Y2JtbHRjRzl5ZENCN2NtVmhaRVpwYkdWOUlHWnliMjBnSjI1dlpHVTZabk12Y0hKdmJXbHpaWE1uTzF4dVhHNHZLaXBjYmlBcUlFeHZZV1FnWVNCbWFXeGxJR2x1ZEc4Z1lTQlZhVzUwT0VGeWNtRjVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQm1hV3hsSUMwZ2RHaGxJR1pwYkdVZ2RHOGdiRzloWkM0Z1EyRnVJR0psSUdFZ1ZWSk1MM0JoZEdnc0lHRWdRbXh2WWl3Z1lXNGdRWEp5WVhsQ2RXWm1aWElzSUc5eUlHRWdWV2x1ZERoQmNuSmhlUzVjYmlBcUlFQnlaWFIxY201eklHRWdWV2x1ZERoQmNuSmhlU0JqYjI1MFlXbHVhVzVuSUhSb1pTQm1hV3hsSUdSaGRHRXVYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JzYjJGa1JtbHNaU0E5SUdGemVXNWpLR1pwYkdVNklITjBjbWx1WjN4Q2JHOWlmRUZ5Y21GNVFuVm1abVZ5VEdsclpYeFZhVzUwT0VGeWNtRjVLVG9nVUhKdmJXbHpaVHhWYVc1ME9FRnljbUY1UGlBOVBpQjdYRzRnSUdsbUlDaDBlWEJsYjJZZ1ptbHNaU0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlIQnliMk5sYzNNZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbUlIQnliMk5sYzNNdWRtVnljMmx2Ym5NZ0ppWWdjSEp2WTJWemN5NTJaWEp6YVc5dWN5NXViMlJsS1NCN1hHNGdJQ0FnSUNBdkx5QnNiMkZrSUdacGJHVWdhVzUwYnlCQmNuSmhlVUoxWm1abGNpQnBiaUJPYjJSbExtcHpYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVnBiblE0UVhKeVlYa29ZWGRoYVhRZ2NtVmhaRVpwYkdVb1ptbHNaU2twTzF4dUlDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWlM1amIyUmxJRDA5UFNBblJWSlNYMFpUWDBaSlRFVmZWRTlQWDB4QlVrZEZKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1pwYkdVZ2FYTWdkRzl2SUd4aGNtZGxMQ0IxYzJVZ1puTXVZM0psWVhSbFVtVmhaRk4wY21WaGJTQnBibk4wWldGa1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzUnlaV0Z0SUQwZ1puTXVZM0psWVhSbFVtVmhaRk4wY21WaGJTaG1hV3hsS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamFIVnVhM002SUZWcGJuUTRRWEp5WVhsYlhTQTlJRnRkTzF4dUlDQWdJQ0FnSUNBZ0lHWnZjaUJoZDJGcGRDQW9ZMjl1YzNRZ1kyaDFibXNnYjJZZ2MzUnlaV0Z0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUhWdWEzTXVjSFZ6YUNoamFIVnVheWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVldsdWREaEJjbkpoZVNoQ2RXWm1aWEl1WTI5dVkyRjBLR05vZFc1cmN5a3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJR1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDOHZJR3h2WVdRZ1ptbHNaU0JwYm5SdklFRnljbUY1UW5WbVptVnlJR2x1SUdKeWIzZHpaWEp6WEc0Z0lDQWdJQ0JqYjI1emRDQnlaWE53YjI1elpTQTlJR0YzWVdsMElHWmxkR05vS0dacGJHVXBPMXh1SUNBZ0lDQWdhV1lnS0NGeVpYTndiMjV6WlM1dmF5a2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZR1poYVd4bFpDQjBieUJzYjJGa0lHVjRkR1Z5Ym1Gc0lHUmhkR0VnWm1sc1pUb2dKSHRtYVd4bGZXQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZEV4bGJtZDBhRWhsWVdSbGNpQTlJSEpsYzNCdmJuTmxMbWhsWVdSbGNuTXVaMlYwS0NkRGIyNTBaVzUwTFV4bGJtZDBhQ2NwTzF4dUlDQWdJQ0FnWTI5dWMzUWdabWxzWlZOcGVtVWdQU0JqYjI1MFpXNTBUR1Z1WjNSb1NHVmhaR1Z5SUQ4Z2NHRnljMlZKYm5Rb1kyOXVkR1Z1ZEV4bGJtZDBhRWhsWVdSbGNpd2dNVEFwSURvZ01EdGNiaUFnSUNBZ0lHbG1JQ2htYVd4bFUybDZaU0E4SURFd056TTNOREU0TWpRZ0x5b2dNVWRDSUNvdktTQjdYRzRnSUNBZ0lDQWdJQzh2SUhkb1pXNGdRMjl1ZEdWdWRDMU1aVzVuZEdnZ2FHVmhaR1Z5SUdseklHNXZkQ0J6WlhRc0lIZGxJR05oYm01dmRDQmtaWFJsY20xcGJtVWdkR2hsSUdacGJHVWdjMmw2WlM0Z1YyVWdZWE56ZFcxbElHbDBJR2x6SUhOdFlXeHNJR1Z1YjNWbmFDQjBiMXh1SUNBZ0lDQWdJQ0F2THlCc2IyRmtJR2x1ZEc4Z2JXVnRiM0o1TGx4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVnBiblE0UVhKeVlYa29ZWGRoYVhRZ2NtVnpjRzl1YzJVdVlYSnlZWGxDZFdabVpYSW9LU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0F2THlCbWFXeGxJR2x6SUhSdmJ5QnNZWEpuWlN3Z2RYTmxJSE4wY21WaGJTQnBibk4wWldGa1hHNGdJQ0FnSUNBZ0lHbG1JQ2doY21WemNHOXVjMlV1WW05a2VTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnWm1GcGJHVmtJSFJ2SUd4dllXUWdaWGgwWlhKdVlXd2daR0YwWVNCbWFXeGxPaUFrZTJacGJHVjlMQ0J1YnlCeVpYTndiMjV6WlNCaWIyUjVMbUFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUhKbFlXUmxjaUE5SUhKbGMzQnZibk5sTG1KdlpIa3VaMlYwVW1WaFpHVnlLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2JHVjBJR0oxWm1abGNqdGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUIwY25rZ2RHOGdZM0psWVhSbElFRnljbUY1UW5WbVptVnlJR1JwY21WamRHeDVYRzRnSUNBZ0lDQWdJQ0FnWW5WbVptVnlJRDBnYm1WM0lFRnljbUY1UW5WbVptVnlLR1pwYkdWVGFYcGxLVHRjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNobElHbHVjM1JoYm1ObGIyWWdVbUZ1WjJWRmNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnZFhObElGZGxZa0Z6YzJWdFlteDVJRTFsYlc5eWVTQjBieUJoYkd4dlkyRjBaU0JzWVhKblpYSWdRWEp5WVhsQ2RXWm1aWEpjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhCaFoyVnpJRDBnVFdGMGFDNWpaV2xzS0dacGJHVlRhWHBsSUM4Z05qVTFNellwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZblZtWm1WeUlEMGdibVYzSUZkbFlrRnpjMlZ0WW14NUxrMWxiVzl5ZVNoN2FXNXBkR2xoYkRvZ2NHRm5aWE1zSUcxaGVHbHRkVzA2SUhCaFoyVnpmU2t1WW5WbVptVnlPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCbE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0J2Wm1aelpYUWdQU0F3TzF4dUlDQWdJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ2JtOHRZMjl1YzNSaGJuUXRZMjl1WkdsMGFXOXVYRzRnSUNBZ0lDQWdJSGRvYVd4bElDaDBjblZsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2UyUnZibVVzSUhaaGJIVmxmU0E5SUdGM1lXbDBJSEpsWVdSbGNpNXlaV0ZrS0NrN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dSdmJtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmphSFZ1YTFOcGVtVWdQU0IyWVd4MVpTNWllWFJsVEdWdVozUm9PMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR05vZFc1cklEMGdibVYzSUZWcGJuUTRRWEp5WVhrb1luVm1abVZ5TENCdlptWnpaWFFzSUdOb2RXNXJVMmw2WlNrN1hHNGdJQ0FnSUNBZ0lDQWdZMmgxYm1zdWMyVjBLSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0J2Wm1aelpYUWdLejBnWTJoMWJtdFRhWHBsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dWV2x1ZERoQmNuSmhlU2hpZFdabVpYSXNJREFzSUdacGJHVlRhWHBsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdmU0JsYkhObElHbG1JQ2htYVd4bElHbHVjM1JoYm1ObGIyWWdRbXh2WWlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTaGhkMkZwZENCbWFXeGxMbUZ5Y21GNVFuVm1abVZ5S0NrcE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0dacGJHVWdhVzV6ZEdGdVkyVnZaaUJWYVc1ME9FRnljbUY1S1NCN1hHNGdJQ0FnY21WMGRYSnVJR1pwYkdVN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlZhVzUwT0VGeWNtRjVLR1pwYkdVcE8xeHVJQ0I5WEc1OU8xeHVJaXdnSW1WNGNHOXlkQ0JqYjI1emRDQnlaV0ZrUm1sc1pTQTlJSFZ1WkdWbWFXNWxaRHRsZUhCdmNuUWdZMjl1YzNRZ2NtVmhaRVpwYkdWVGVXNWpJRDBnZFc1a1pXWnBibVZrTzJWNGNHOXlkQ0JqYjI1emRDQmpjbVZoZEdWU1pXRmtVM1J5WldGdElEMGdkVzVrWldacGJtVmtPeUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0RmJuWXNJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHNJRlJsYm5OdmNuMGdabkp2YlNBbmIyNXVlSEoxYm5ScGJXVXRZMjl0Ylc5dUp6dGNibHh1YVcxd2IzSjBJSHRUWlhKcFlXeHBlbUZpYkdWSmJuUmxjbTVoYkVKMVptWmxjaXdnVTJWeWFXRnNhWHBoWW14bFUyVnpjMmx2YmsxbGRHRmtZWFJoTENCVFpYSnBZV3hwZW1GaWJHVlVaVzV6YjNKTlpYUmhaR0YwWVN3Z1ZHVnVjMjl5VFdWMFlXUmhkR0Y5SUdaeWIyMGdKeTR2Y0hKdmVIa3RiV1Z6YzJGblpYTW5PMXh1YVcxd2IzSjBJSHR6WlhSU2RXNVBjSFJwYjI1emZTQm1jbTl0SUNjdUwzSjFiaTF2Y0hScGIyNXpKenRjYm1sdGNHOXlkQ0I3YzJWMFUyVnpjMmx2Yms5d2RHbHZibk45SUdaeWIyMGdKeTR2YzJWemMybHZiaTF2Y0hScGIyNXpKenRjYm1sdGNHOXlkQ0I3WkdGMFlVeHZZMkYwYVc5dVUzUnlhVzVuVkc5RmJuVnRMQ0JuWlhSVVpXNXpiM0pGYkdWdFpXNTBVMmw2WlN3Z2FYTkhjSFZDZFdabVpYSlRkWEJ3YjNKMFpXUlVlWEJsTENCc2IyZE1aWFpsYkZOMGNtbHVaMVJ2Ulc1MWJTd2dkR1Z1YzI5eVJHRjBZVlI1Y0dWRmJuVnRWRzlUZEhKcGJtY3NJSFJsYm5OdmNrUmhkR0ZVZVhCbFUzUnlhVzVuVkc5RmJuVnRMQ0IwWlc1emIzSlVlWEJsVkc5VWVYQmxaRUZ5Y21GNVEyOXVjM1J5ZFdOMGIzSjlJR1p5YjIwZ0p5NHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0blpYUkpibk4wWVc1alpYMGdabkp2YlNBbkxpOTNZWE50TFdaaFkzUnZjbmtuTzF4dWFXMXdiM0owSUh0aGJHeHZZMWRoYzIxVGRISnBibWNzSUdOb1pXTnJUR0Z6ZEVWeWNtOXlmU0JtY205dElDY3VMM2RoYzIwdGRYUnBiSE1uTzF4dWFXMXdiM0owSUh0c2IyRmtSbWxzWlgwZ1puSnZiU0FuTGk5M1lYTnRMWFYwYVd4ekxXeHZZV1F0Wm1sc1pTYzdYRzVjYmk4dklDTnlaV2RwYjI0Z1NXNXBkR2xoYkdsNllYUnBiMjV6WEc1Y2JpOHFLbHh1SUNvZ1ZHaGxjbVVnWVhKbElEUWdaR2xtWm1WeVpXNTBJRndpYVc1cGRHbGhiR2w2WVhScGIyNWNJaUJ6ZEdWd2N5Qm1iM0lnVDFKVUxpQlVhR1Y1SUdoaGNIQmxiaUJwYmlCa2FXWm1aWEpsYm5RZ2NHeGhZMlZ6SUdGdVpDQmthV1ptWlhKbGJuUWdkR2x0WlM1Y2JpQXFYRzRnS2lBeExpQktZWFpoVTJOeWFYQjBJR2x1YVhScFlXeHBlbUYwYVc5dUlHWnZjaUJ2Ym01NGNuVnVkR2x0WlMxamIyMXRiMjRnWVc1a0lHOXVibmh5ZFc1MGFXMWxMWGRsWWk1Y2JpQXFJQ0FnSUZSb2FYTWdhWE1nZEdobElHWnBjbk4wSUdsdWFYUnBZV3hwZW1GMGFXOXVJSE4wWlhBdUlFbHVJSFJvYVhNZ2MzUmxjQ3dnYjI1dWVISjFiblJwYldVdGQyVmlJR05oYkd4eklHOXVibmh5ZFc1MGFXMWxMV052YlcxdmJpZHpJSEpsWjJsemRHVnlRbUZqYTJWdVpDZ3BYRzRnS2lCbWRXNWpkR2x2YmlCdGRXeDBhWEJzWlNCMGFXMWxjeUIwYnlCeVpXZHBjM1JsY2lCaGJHd2dkR2hsSUdGMllXbHNZV0pzWlNCaVlXTnJaVzVrY3k0Z1ZHaGxJR0poWTJ0bGJtUWdjbVZuYVhOMGNtRjBhVzl1SUdseklIWmxjbmtnWm1GemRDNGdTWFFnYjI1c2VWeHVJQ29nY21WbmFYTjBaWEp6SUhSb1pTQmlZV05yWlc1a0lHNWhiV1VnZDJsMGFDQjBhR1VnZFc1cGJtbDBhV0ZzYVhwbFpDQmlZV05yWlc1a0lHOWlhbVZqZEM0Z1RtOGdhR1ZoZG5rZ2FXNXBkR2xoYkdsNllYUnBiMjRnYVhNZ1pHOXVaU0JwYmlCMGFHbHpJSE4wWlhBdVhHNGdLaUFnSUNCU1pXWmxjaUIwYnlCM1pXSXZiR2xpTDJsdVpHVjRMblJ6SUdadmNpQjBhR1VnWW1GamEyVnVaQ0J5WldkcGMzUnlZWFJwYjI0dVhHNGdLbHh1SUNvZ01pNGdWMlZpUVhOelpXMWliSGtnWVhKMGFXWmhZM1FnYVc1cGRHbGhiR2w2WVhScGIyNHVYRzRnS2lBZ0lDQlVhR2x6SUdoaGNIQmxibk1nZDJobGJpQmhibmtnY21WbmFYTjBaWEpsWkNCM1lYTnRJR0poWTJ0bGJtUWdhWE1nZFhObFpDQm1iM0lnZEdobElHWnBjbk4wSUhScGJXVWdLR2xsTGlCZ2IzSjBMa2x1Wm1WeVpXNWpaVk5sYzNOcGIyNHVZM0psWVhSbEtDbGdJRzl5WEc0Z0tpQmdiM0owTGxSeVlXbHVhVzVuVTJWemMybHZiaTVqY21WaGRHVW9LV0FnYVhNZ1kyRnNiR1ZrS1M0Z1NXNGdkR2hwY3lCemRHVndMQ0J2Ym01NGNuVnVkR2x0WlMxM1pXSWdaRzlsY3lCMGFHVWdabTlzYkc5M2FXNW5jenBjYmlBcUlDQWdJQ0F0SUdOeVpXRjBaU0JoSUhCeWIzaDVJSGR2Y210bGNpQmhibVFnYldGclpTQnpkWEpsSUhSb1pTQndjbTk0ZVNCM2IzSnJaWElnYVhNZ2NtVmhaSGtnZEc4Z2NtVmpaV2wyWlNCdFpYTnpZV2RsY3l3Z2FXWWdjSEp2ZUhrZ2FYTWdaVzVoWW14bFpDNWNiaUFxSUNBZ0lDQXRJSEJsY21admNtMGdabVZoZEhWeVpTQmtaWFJsWTNScGIyNHNJR3h2WTJGMFpTQmpiM0p5WldOMElGZGxZa0Z6YzJWdFlteDVJR0Z5ZEdsbVlXTjBJSEJoZEdnZ1lXNWtJR05oYkd3Z2RHaGxJRVZ0YzJOeWFYQjBaVzRnWjJWdVpYSmhkR1ZrWEc0Z0tpQktZWFpoVTJOeWFYQjBJR052WkdVZ2RHOGdhVzVwZEdsaGJHbDZaU0IwYUdVZ1YyVmlRWE56WlcxaWJIa2djblZ1ZEdsdFpTNWNiaUFxSUNBZ0lDQWdJQ0FnTFNCcFppQndjbTk0ZVNCcGN5QmxibUZpYkdWa0xDQjBhR2x6SUhOMFpYQWdhR0Z3Y0dWdWN5QnBiaUIwYUdVZ2NISnZlSGtnZDI5eWEyVnlJSFZ6YVc1bklHMWxjM05oWjJVZ0oybHVhWFF0ZDJGemJTY3VYRzRnS2lBZ0lDQWdJQ0FnSUMwZ1pHOTNibXh2WVdScGJtY2dkR2hsSUNkdmNuUXRkMkZ6YlhzdUxpNTlMbmRoYzIwbklHWnBiR1VnYVhNZ1pHOXVaU0JwYmlCMGFHbHpJSE4wWlhBdVhHNGdLaUFnSUNBZ0lDQWdJQzBnYVdZZ2JYVnNkR2t0ZEdoeVpXRmtJR2x6SUdWdVlXSnNaV1FzSUc5dVpTQnZjaUJ0YjNKbElIZGxZbmR2Y210bGNpQjNhV3hzSUdKbElHTnlaV0YwWldRZ2RHOGdhVzVwZEdsaGJHbDZaU0IwYUdVZ1VGUm9jbVZoWkNCMGFISmxZV1J3YjI5c0xseHVJQ3BjYmlBcUlETXVJRTlTVkNCbGJuWnBjbTl1YldWdWRDQnBibWwwYVdGc2FYcGhkR2x2Ymk1Y2JpQXFJQ0FnSUZSb2FYTWdhR0Z3Y0dWdWN5QmhablJsY2lCemRHVndJREl1SUVsdUlIUm9hWE1nYzNSbGNDd2diMjV1ZUhKMWJuUnBiV1V0ZDJWaUlIQmxjbVp2Y20xeklFOU9UbGdnVW5WdWRHbHRaU0JsYm5acGNtOXViV1Z1ZENCcGJtbDBhV0ZzYVhwaGRHbHZiaTVjYmlBcUlFWjFibU4wYVc5dUlHQmZUM0owU1c1cGRDZ3BZQ0JwY3lCallXeHNaV1FnYVc0Z2RHaHBjeUJ6ZEdWd0xseHVJQ29nSUNBZ0lDMGdhV1lnY0hKdmVIa2dhWE1nWlc1aFlteGxaQ3dnZEdocGN5QnpkR1Z3SUdoaGNIQmxibk1nYVc0Z2RHaGxJSEJ5YjNoNUlIZHZjbXRsY2lCMWMybHVaeUJ0WlhOellXZGxJQ2RwYm1sMExXOXlkQ2N1WEc0Z0tpQWdJQ0FnTFNCc2IyZG5hVzVuSUd4bGRtVnNJQ2h2Y25RdVpXNTJMbXh2WjB4bGRtVnNLU0JoYm1RZ2RHaHlaV0ZrSUc1MWJXSmxjaUFvYjNKMExtVnVkaTUzWVhOdExtNTFiVlJvY21WaFpITXBJR0Z5WlNCelpYUWdhVzRnZEdocGN5QnpkR1Z3TGx4dUlDcGNiaUFxSURRdUlGTmxjM05wYjI0Z2FXNXBkR2xoYkdsNllYUnBiMjR1WEc0Z0tpQWdJQ0JVYUdseklHaGhjSEJsYm5NZ2QyaGxiaUJnYjNKMExrbHVabVZ5Wlc1alpWTmxjM05wYjI0dVkzSmxZWFJsS0NsZ0lHOXlJR0J2Y25RdVZISmhhVzVwYm1kVFpYTnphVzl1TG1OeVpXRjBaU2dwWUNCcGN5QmpZV3hzWldRdUlGVnViR2xyWlNCMGFHVWdabWx5YzNRZ00xeHVJQ29nYzNSbGNITWdLSFJvWlhrZ2IyNXNlU0JqWVd4c1pXUWdiMjVqWlNrc0lIUm9hWE1nYzNSbGNDQjNhV3hzSUdKbElHUnZibVVnWm05eUlHVmhZMmdnYzJWemMybHZiaTRnU1c0Z2RHaHBjeUJ6ZEdWd0xDQnZibTU0Y25WdWRHbHRaUzEzWldJZ1pHOWxjeUIwYUdWY2JpQXFJR1p2Ykd4dmQybHVaM002WEc0Z0tpQWdJQ0JKWmlCMGFHVWdjR0Z5WVcxbGRHVnlJR2x6SUdFZ1ZWSk1PbHh1SUNvZ0lDQWdMU0JrYjNkdWJHOWhaQ0IwYUdVZ2JXOWtaV3dnWkdGMFlTQm1jbTl0SUhSb1pTQlZVa3d1WEc0Z0tpQWdJQ0F0SUdOdmNIa2dkR2hsSUcxdlpHVnNJR1JoZEdFZ2RHOGdkR2hsSUZkQlUwMGdhR1ZoY0M0Z0tIQnliM2g1T2lBblkyOXdlUzFtY205dEp5bGNiaUFxSUNBZ0lDMGdaR1Z5WldabGNtVnVZMlVnZEdobElHMXZaR1ZzSUdKMVptWmxjaTRnVkdocGN5QnpkR1Z3SUdGc2JHOTNjeUIwYUdVZ2IzSnBaMmx1WVd3Z1FYSnlZWGxDZFdabVpYSWdkRzhnWW1VZ1oyRnlZbUZuWlNCamIyeHNaV04wWldRdVhHNGdLaUFnSUNBdElHTmhiR3dnWUY5UGNuUkRjbVZoZEdWVFpYTnphVzl1S0NsZ0lIUnZJR055WldGMFpTQjBhR1VnYzJWemMybHZiaTRnS0hCeWIzaDVPaUFuWTNKbFlYUmxKeWxjYmlBcVhHNGdLaUFnSUNCSlppQjBhR1VnY0dGeVlXMWxkR1Z5SUdseklHRWdWV2x1ZERoQmNuSmhlU0J2WW1wbFkzUTZYRzRnS2lBZ0lDQXRJR052Y0hrZ2RHaGxJRzF2WkdWc0lHUmhkR0VnZEc4Z2RHaGxJRmRCVTAwZ2FHVmhjQzRnS0hCeWIzaDVPaUFuWTI5d2VTMW1jbTl0SnlsY2JpQXFJQ0FnSUMwZ1kyRnNiQ0JnWDA5eWRFTnlaV0YwWlZObGMzTnBiMjRvS1dBZ2RHOGdZM0psWVhSbElIUm9aU0J6WlhOemFXOXVMaUFvY0hKdmVIazZJQ2RqY21WaGRHVW5LVnh1SUNwY2JpQXFYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQnBibWwwYVdGc2FYcGxJRTlTVkNCbGJuWnBjbTl1YldWdWRDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2JuVnRWR2h5WldGa2N5QlRaWFJIYkc5aVlXeEpiblJ5WVU5d1RuVnRWR2h5WldGa2N5aHVkVzFVYUhKbFlXUnpLVnh1SUNvZ1FIQmhjbUZ0SUd4dloyZHBibWRNWlhabGJDQkRjbVZoZEdWRmJuWW9jM1JoZEdsalgyTmhjM1E4VDNKMFRHOW5aMmx1WjB4bGRtVnNQaWhzYjJkbmFXNW5YMnhsZG1Wc0tTbGNiaUFxTDF4dVkyOXVjM1FnYVc1cGRFOXlkQ0E5SUNodWRXMVVhSEpsWVdSek9pQnVkVzFpWlhJc0lHeHZaMmRwYm1kTVpYWmxiRG9nYm5WdFltVnlLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZibk4wSUdWeWNtOXlRMjlrWlNBOUlHZGxkRWx1YzNSaGJtTmxLQ2t1WDA5eWRFbHVhWFFvYm5WdFZHaHlaV0ZrY3l3Z2JHOW5aMmx1WjB4bGRtVnNLVHRjYmlBZ2FXWWdLR1Z5Y205eVEyOWtaU0FoUFQwZ01Da2dlMXh1SUNBZ0lHTm9aV05yVEdGemRFVnljbTl5S0NkRFlXNWNYQ2QwSUdsdWFYUnBZV3hwZW1VZ2IyNXVlSEoxYm5ScGJXVXVKeWs3WEc0Z0lIMWNibjA3WEc1Y2JpOHFLbHh1SUNvZ2FXNTBhV0ZzYVhwbElISjFiblJwYldVZ1pXNTJhWEp2Ym0xbGJuUXVYRzRnS2lCQWNHRnlZVzBnWlc1MklIQmhjM05sWkNCcGJpQjBhR1VnWlc1MmFYSnZibTFsYm5RZ1kyOXVabWxuSUc5aWFtVmpkQzVjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUdsdWFYUlNkVzUwYVcxbElEMGdZWE41Ym1Nb1pXNTJPaUJGYm5ZcE9pQlFjbTl0YVhObFBIWnZhV1ErSUQwK0lIdGNiaUFnTHk4Z2FXNXBkQ0JQVWxSY2JpQWdhVzVwZEU5eWRDaGxibll1ZDJGemJTNXVkVzFVYUhKbFlXUnpJU3dnYkc5blRHVjJaV3hUZEhKcGJtZFViMFZ1ZFcwb1pXNTJMbXh2WjB4bGRtVnNLU2s3WEc1OU8xeHVYRzR2S2lwY2JpQXFJSEJsY21admNtMGdSVkFnYzNCbFkybG1hV01nYVc1cGRHbGhiR2w2WVhScGIyNHVYRzRnS2x4dUlDb2dRSEJoY21GdElHVnVkbHh1SUNvZ1FIQmhjbUZ0SUdWd1RtRnRaVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVc1cGRFVndJRDBnWVhONWJtTW9aVzUyT2lCRmJuWXNJR1Z3VG1GdFpUb2djM1J5YVc1bktUb2dVSEp2YldselpUeDJiMmxrUGlBOVBpQjdYRzRnSUdsbUlDZ2hRbFZKVEVSZlJFVkdVeTVFU1ZOQlFreEZYMWRGUWtkUVZTa2dlMXh1SUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQkFkSGx3WlhOamNtbHdkQzFsYzJ4cGJuUXZibTh0Y21WeGRXbHlaUzFwYlhCdmNuUnpMQ0JBZEhsd1pYTmpjbWx3ZEMxbGMyeHBiblF2Ym04dGRtRnlMWEpsY1hWcGNtVnpYRzRnSUNBZ1kyOXVjM1FnYVc1cGRFcHpaWEFnUFNCeVpYRjFhWEpsS0NjdUwycHpaWEF2YVc1cGRDY3BMbWx1YVhRN1hHNWNiaUFnSUNCcFppQW9aWEJPWVcxbElEMDlQU0FuZDJWaVozQjFKeWtnZTF4dUlDQWdJQ0FnTHk4Z2NHVnlabTl5YlNCWFpXSkhVRlVnWVhaaGFXeGhZbWxzYVhSNUlHTm9aV05yWEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc1aGRtbG5ZWFJ2Y2lBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NnZkh3Z0lXNWhkbWxuWVhSdmNpNW5jSFVwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkWFpXSkhVRlVnYVhNZ2JtOTBJSE4xY0hCdmNuUmxaQ0JwYmlCamRYSnlaVzUwSUdWdWRtbHliMjV0Wlc1MEp5azdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR3hsZENCaFpHRndkR1Z5SUQwZ1pXNTJMbmRsWW1kd2RTNWhaR0Z3ZEdWeUlHRnpJRWRRVlVGa1lYQjBaWElnZkNCdWRXeHNPMXh1SUNBZ0lDQWdhV1lnS0NGaFpHRndkR1Z5S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJR2xtSUdGa1lYQjBaWElnYVhNZ2JtOTBJSE5sZEN3Z2NtVnhkV1Z6ZENCaElHNWxkeUJoWkdGd2RHVnlMbHh1SUNBZ0lDQWdJQ0JqYjI1emRDQndiM2RsY2xCeVpXWmxjbVZ1WTJVZ1BTQmxibll1ZDJWaVozQjFMbkJ2ZDJWeVVISmxabVZ5Wlc1alpUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCdmQyVnlVSEpsWm1WeVpXNWpaU0FoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JSEJ2ZDJWeVVISmxabVZ5Wlc1alpTQWhQVDBnSjJ4dmR5MXdiM2RsY2ljZ0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUhCdmQyVnlVSEpsWm1WeVpXNWpaU0FoUFQwZ0oyaHBaMmd0Y0dWeVptOXliV0Z1WTJVbktTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JKYm5aaGJHbGtJSEJ2ZDJWeVVISmxabVZ5Wlc1alpTQnpaWFIwYVc1bk9pQmNJaVI3Y0c5M1pYSlFjbVZtWlhKbGJtTmxmVndpWUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1ptOXlZMlZHWVd4c1ltRmphMEZrWVhCMFpYSWdQU0JsYm5ZdWQyVmlaM0IxTG1admNtTmxSbUZzYkdKaFkydEJaR0Z3ZEdWeU8xeHVJQ0FnSUNBZ0lDQnBaaUFvWm05eVkyVkdZV3hzWW1GamEwRmtZWEIwWlhJZ0lUMDlJSFZ1WkdWbWFXNWxaQ0FtSmlCMGVYQmxiMllnWm05eVkyVkdZV3hzWW1GamEwRmtZWEIwWlhJZ0lUMDlJQ2RpYjI5c1pXRnVKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCbWIzSmpaVVpoYkd4aVlXTnJRV1JoY0hSbGNpQnpaWFIwYVc1bk9pQmNJaVI3Wm05eVkyVkdZV3hzWW1GamEwRmtZWEIwWlhKOVhDSmdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCaFpHRndkR1Z5SUQwZ1lYZGhhWFFnYm1GMmFXZGhkRzl5TG1kd2RTNXlaWEYxWlhOMFFXUmhjSFJsY2loN2NHOTNaWEpRY21WbVpYSmxibU5sTENCbWIzSmpaVVpoYkd4aVlXTnJRV1JoY0hSbGNuMHBPMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXRmtZWEIwWlhJcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDZEdZV2xzWldRZ2RHOGdaMlYwSUVkUVZTQmhaR0Z3ZEdWeUxpQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKMWx2ZFNCdFlYa2dibVZsWkNCMGJ5QmxibUZpYkdVZ1pteGhaeUJjSWkwdFpXNWhZbXhsTFhWdWMyRm1aUzEzWldKbmNIVmNJaUJwWmlCNWIzVWdZWEpsSUhWemFXNW5JRU5vY205dFpTNG5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FXWWdZV1JoY0hSbGNpQnBjeUJ6WlhRc0lIWmhiR2xrWVhSbElHbDBMbHh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUdGa1lYQjBaWEl1YkdsdGFYUnpJQ0U5UFNBbmIySnFaV04wSnlCOGZDQjBlWEJsYjJZZ1lXUmhjSFJsY2k1bVpXRjBkWEpsY3lBaFBUMGdKMjlpYW1WamRDY2dmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1Z2WmlCaFpHRndkR1Z5TG5KbGNYVmxjM1JFWlhacFkyVWdJVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1ZG1Gc2FXUWdSMUJWSUdGa1lYQjBaWElnYzJWMElHbHVJR0JsYm5ZdWQyVmlaM0IxTG1Ga1lYQjBaWEpnTGlCSmRDQnRkWE4wSUdKbElHRWdSMUJWUVdSaGNIUmxjaUJ2WW1wbFkzUXVKeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLQ0ZsYm5ZdWQyRnpiUzV6YVcxa0tTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FnSUNkT2IzUWdjM1Z3Y0c5eWRHVmtJR1p2Y2lCWFpXSkhVRlU5VDA0Z1lXNWtJRk5KVFVROVQwWkdMaUJRYkdWaGMyVWdjMlYwSUdCbGJuWXVkMkZ6YlM1emFXMWtZQ0IwYnlCMGNuVmxJSGRvWlc0Z2RYTnBibWNnWUhkbFltZHdkV0FnUlZBbktUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdZWGRoYVhRZ2FXNXBkRXB6WlhBb0ozZGxZbWR3ZFNjc0lHZGxkRWx1YzNSaGJtTmxLQ2tzSUdWdWRpd2dZV1JoY0hSbGNpazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGxjRTVoYldVZ1BUMDlJQ2QzWldKdWJpY3BJSHRjYmlBZ0lDQWdJQzh2SUhCbGNtWnZjbTBnVjJWaVRrNGdZWFpoYVd4aFltbHNhWFI1SUdOb1pXTnJYRzRnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzVoZG1sbllYUnZjaUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dmSHdnSVNodVlYWnBaMkYwYjNJZ1lYTWdkVzVyYm05M2JpQmhjeUI3Yld3NklIVnVhMjV2ZDI1OUtTNXRiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjFkbFlrNU9JR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUWdhVzRnWTNWeWNtVnVkQ0JsYm5acGNtOXViV1Z1ZENjcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmhkMkZwZENCcGJtbDBTbk5sY0NnbmQyVmlibTRuTENCblpYUkpibk4wWVc1alpTZ3BMQ0JsYm5ZcE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVMeThnSTJWdVpISmxaMmx2YmlCSmJtbDBhV0ZzYVhwaGRHbHZibk5jYmx4dUx5b3FYRzRnS2lCMllXeHBaQ0JrWVhSaElHeHZZMkYwYVc5dWN5Qm1iM0lnYVc1d2RYUXZiM1YwY0hWMElIUmxibk52Y25NdVhHNGdLaTljYm5SNWNHVWdVM1Z3Y0c5eWRHVmtWR1Z1YzI5eVJHRjBZVXh2WTJGMGFXOXVSbTl5U1c1d2RYUlBkWFJ3ZFhRZ1BTQW5ZM0IxSjN3blkzQjFMWEJwYm01bFpDZDhKMmR3ZFMxaWRXWm1aWEluTzF4dVhHNTBlWEJsSUVsUFFtbHVaR2x1WjFOMFlYUmxJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dkR2hsSUdoaGJtUnNaU0J2WmlCSlR5QmlhVzVrYVc1bkxseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2dhR0Z1Wkd4bE9pQnVkVzFpWlhJN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhSb1pTQndjbVZtWlhKeVpXUWdiRzlqWVhScGIyNGdabTl5SUdWaFkyZ2diM1YwY0hWMElIUmxibk52Y2k1Y2JpQWdJQ3BjYmlBZ0lDb2dkbUZzZFdVZ2FYTWdiMjVsSUc5bUlDZGpjSFVuTENBblkzQjFMWEJwYm01bFpDY3NJQ2RuY0hVdFluVm1abVZ5Snk1Y2JpQWdJQ292WEc0Z0lISmxZV1J2Ym14NUlHOTFkSEIxZEZCeVpXWmxjbkpsWkV4dlkyRjBhVzl1Y3pvZ2NtVmhaRzl1YkhrZ1UzVndjRzl5ZEdWa1ZHVnVjMjl5UkdGMFlVeHZZMkYwYVc5dVJtOXlTVzV3ZFhSUGRYUndkWFJiWFR0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nWlc1MWJTQjJZV3gxWlNCdlppQjBhR1VnY0hKbFptVnljbVZrSUd4dlkyRjBhVzl1SUdadmNpQmxZV05vSUc5MWRIQjFkQ0IwWlc1emIzSXVYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0J2ZFhSd2RYUlFjbVZtWlhKeVpXUk1iMk5oZEdsdmJuTkZibU52WkdWa09pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ0lIUjFjR3hsSUdWc1pXMWxiblJ6SUdGeVpUb2dTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpQkpSRHNnYVc1d2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa095QnZkWFJ3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrT3lCaWFXNWthVzVuVTNSaGRHVmNiaUFxTDF4dWRIbHdaU0JUWlhOemFXOXVUV1YwWVdSaGRHRWdQU0JiWEc0Z0lHbHVabVZ5Wlc1alpWTmxjM05wYjI1SlpEb2diblZ0WW1WeUxDQnBibkIxZEU1aGJXVnpWVlJHT0VWdVkyOWtaV1E2SUc1MWJXSmxjbHRkTENCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtPaUJ1ZFcxaVpYSmJYU3hjYmlBZ1ltbHVaR2x1WjFOMFlYUmxPaUJKVDBKcGJtUnBibWRUZEdGMFpYeHVkV3hzTENCbGJtRmliR1ZIY21Gd2FFTmhjSFIxY21VNklHSnZiMnhsWVc0c0lHbHVjSFYwVDNWMGNIVjBRbTkxYm1RNklHSnZiMnhsWVc1Y2JsMDdYRzVjYm1OdmJuTjBJR0ZqZEdsMlpWTmxjM05wYjI1eklEMGdibVYzSUUxaGNEeHVkVzFpWlhJc0lGTmxjM05wYjI1TlpYUmhaR0YwWVQ0b0tUdGNibHh1THlvcVhHNGdLaUJuWlhRZ2RHaGxJR2x1Y0hWMEwyOTFkSEIxZENCamIzVnVkQ0J2WmlCMGFHVWdjMlZ6YzJsdmJpNWNiaUFxSUVCd1lYSmhiU0J6WlhOemFXOXVTR0Z1Wkd4bElIUm9aU0JvWVc1a2JHVWdjbVZ3Y21WelpXNTBhVzVuSUhSb1pTQnpaWE56YVc5dUxpQnphRzkxYkdRZ1ltVWdibTl1TFhwbGNtOHVYRzRnS2lCQWNtVjBkWEp1Y3lCaElIUjFjR3hsSUdsdVkyeDFaR2x1WnlBeUlHNTFiV0psY25Nc0lISmxjSEpsYzJWdWRHbHVaeUIwYUdVZ2FXNXdkWFFnWTI5MWJuUWdZVzVrSUc5MWRIQjFkQ0JqYjNWdWRDNWNiaUFxTDF4dVkyOXVjM1FnWjJWMFUyVnpjMmx2YmtsdWNIVjBUM1YwY0hWMFEyOTFiblFnUFNBb2MyVnpjMmx2YmtoaGJtUnNaVG9nYm5WdFltVnlLVG9nVzI1MWJXSmxjaXdnYm5WdFltVnlYU0E5UGlCN1hHNGdJR052Ym5OMElIZGhjMjBnUFNCblpYUkpibk4wWVc1alpTZ3BPMXh1SUNCamIyNXpkQ0J6ZEdGamF5QTlJSGRoYzIwdWMzUmhZMnRUWVhabEtDazdYRzRnSUhSeWVTQjdYRzRnSUNBZ1kyOXVjM1FnWkdGMFlVOW1abk5sZENBOUlIZGhjMjB1YzNSaFkydEJiR3h2WXlnNEtUdGNiaUFnSUNCamIyNXpkQ0JsY25KdmNrTnZaR1VnUFNCM1lYTnRMbDlQY25SSFpYUkpibkIxZEU5MWRIQjFkRU52ZFc1MEtITmxjM05wYjI1SVlXNWtiR1VzSUdSaGRHRlBabVp6WlhRc0lHUmhkR0ZQWm1aelpYUWdLeUEwS1R0Y2JpQWdJQ0JwWmlBb1pYSnliM0pEYjJSbElDRTlQU0F3S1NCN1hHNGdJQ0FnSUNCamFHVmphMHhoYzNSRmNuSnZjaWduUTJGdVhGd25kQ0JuWlhRZ2MyVnpjMmx2YmlCcGJuQjFkQzl2ZFhSd2RYUWdZMjkxYm5RdUp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJiZDJGemJTNUlSVUZRTXpKYlpHRjBZVTltWm5ObGRDQXZJRFJkTENCM1lYTnRMa2hGUVZBek1sdGtZWFJoVDJabWMyVjBJQzhnTkNBcklERmRYVHRjYmlBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNCM1lYTnRMbk4wWVdOclVtVnpkRzl5WlNoemRHRmpheWs3WEc0Z0lIMWNibjA3WEc1Y2JpOHFLbHh1SUNvZ1lXeHNiMk5oZEdVZ2RHaGxJRzFsYlc5eWVTQmhibVFnYldWdFkzQjVJSFJvWlNCbGVIUmxjbTVoYkNCaWRXWm1aWEl1WEc0Z0tseHVJQ29nUUhCaGNtRnRJRzF2WkdWc0lDMGdkR2hsSUdWNGRHVnlibUZzSUdKMVptWmxjaUJqYjI1MFlXbHVhVzVuSUhSb1pTQnRiMlJsYkNCa1lYUmhMaUJOZFhOMElHNXZkQ0JpWlNCMGFHVWdjMkZ0WlNCaWRXWm1aWElnWVhNZ2RHaGxJRmRCVTAwZ2FHVmhjQzVjYmlBcUlFQnlaWFIxY201eklHRWdNaTFsYkdWdFpXNTBjeUIwZFhCc1pTQXRJSFJvWlNCd2IybHVkR1Z5SUdGdVpDQnphWHBsSUc5bUlIUm9aU0JoYkd4dlkyRjBaV1FnWW5WbVptVnlYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JqYjNCNVJuSnZiVVY0ZEdWeWJtRnNRblZtWm1WeUlEMGdLRzF2WkdWc09pQlZhVzUwT0VGeWNtRjVLVG9nVzI1MWJXSmxjaXdnYm5WdFltVnlYU0E5UGlCN1hHNGdJR052Ym5OMElIZGhjMjBnUFNCblpYUkpibk4wWVc1alpTZ3BPMXh1SUNCamIyNXpkQ0J0YjJSbGJFUmhkR0ZQWm1aelpYUWdQU0IzWVhOdExsOXRZV3hzYjJNb2JXOWtaV3d1WW5sMFpVeGxibWQwYUNrN1hHNGdJR2xtSUNodGIyUmxiRVJoZEdGUFptWnpaWFFnUFQwOUlEQXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFTmhiaWQwSUdOeVpXRjBaU0JoSUhObGMzTnBiMjR1SUdaaGFXeGxaQ0IwYnlCaGJHeHZZMkYwWlNCaElHSjFabVpsY2lCdlppQnphWHBsSUNSN2JXOWtaV3d1WW5sMFpVeGxibWQwYUgwdVlDazdYRzRnSUgxY2JpQWdkMkZ6YlM1SVJVRlFWVGd1YzJWMEtHMXZaR1ZzTENCdGIyUmxiRVJoZEdGUFptWnpaWFFwTzF4dUlDQnlaWFIxY200Z1cyMXZaR1ZzUkdGMFlVOW1abk5sZEN3Z2JXOWtaV3d1WW5sMFpVeGxibWQwYUYwN1hHNTlPMXh1WEc0dktpcGNiaUFxSUdOeVpXRjBaU0JoYmlCcGJtWmxjbVZ1WTJVZ2MyVnpjMmx2YmlCbWNtOXRJR0VnYlc5a1pXd2daR0YwWVNCaWRXWm1aWEl1WEc0Z0tseHVJQ29nUUhCaGNtRnRJRzF2WkdWc1JHRjBZU0F0SUdWcGRHaGxjaUJoSUZWcGJuUTRRWEp5WVhrZ2IySnFaV04wSUhKbGNISmxjMlZ1ZEdsdVp5QjBhR1VnYlc5a1pXd2daR0YwWVN3Z2IzSWdZU0F5TFdWc1pXMWxiblJ6SUhSMWNHeGxJR052Ym5SaGFXNXBibWNnZEdobFhHNGdLaUFnSUNBZ2NHOXBiblJsY2lCaGJtUWdjMmw2WlNCdlppQjBhR1VnYlc5a1pXd2daR0YwWVNCaWRXWm1aWEl1WEc0Z0tpQkFjR0Z5WVcwZ2IzQjBhVzl1Y3lCaGJpQnZjSFJwYjI1aGJDQnpaWE56YVc5dUlHOXdkR2x2Ym5NZ2IySnFaV04wTGx4dUlDb2dRSEpsZEhWeWJuTWdZU0F6TFdWc1pXMWxiblJ6SUhSMWNHeGxJR052Ym5SaGFXNXBibWNnVzNObGMzTnBiMjRnYUdGdVpHeGxMQ0JwYm5CMWRDQnVZVzFsY3l3Z2IzVjBjSFYwSUc1aGJXVnpYVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTNKbFlYUmxVMlZ6YzJsdmJpQTlJR0Z6ZVc1aktGeHVJQ0FnSUcxdlpHVnNSR0YwWVRvZ1ZXbHVkRGhCY25KaGVYeFRaWEpwWVd4cGVtRmliR1ZKYm5SbGNtNWhiRUoxWm1abGNpeGNiaUFnSUNCdmNIUnBiMjV6UHpvZ1NXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1VFpYTnphVzl1VDNCMGFXOXVjeWs2SUZCeWIyMXBjMlU4VTJWeWFXRnNhWHBoWW14bFUyVnpjMmx2YmsxbGRHRmtZWFJoUGlBOVBpQjdYRzRnSUd4bGRDQnRiMlJsYkVSaGRHRlBabVp6WlhRNklHNTFiV0psY2l3Z2JXOWtaV3hFWVhSaFRHVnVaM1JvT2lCdWRXMWlaWEk3WEc0Z0lHTnZibk4wSUhkaGMyMGdQU0JuWlhSSmJuTjBZVzVqWlNncE8xeHVYRzRnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0cxdlpHVnNSR0YwWVNrcElIdGNiaUFnSUNBdkx5QnBaaUJ0YjJSbGJDQmtZWFJoSUdseklHRnVJR0Z5Y21GNUxDQnBkQ0J0ZFhOMElHSmxJR0VnTWkxbGJHVnRaVzUwY3lCMGRYQnNaU0JqYjI1MFlXbHVhVzVuSUhSb1pTQndiMmx1ZEdWeUlHRnVaQ0J6YVhwbElHOW1JSFJvWlNCdGIyUmxiQ0JrWVhSaFhHNGdJQ0FnVzIxdlpHVnNSR0YwWVU5bVpuTmxkQ3dnYlc5a1pXeEVZWFJoVEdWdVozUm9YU0E5SUcxdlpHVnNSR0YwWVR0Y2JpQWdmU0JsYkhObElHbG1JQ2h0YjJSbGJFUmhkR0V1WW5WbVptVnlJRDA5UFNCM1lYTnRMa2hGUVZCVk9DNWlkV1ptWlhJcElIdGNiaUFnSUNBdkx5QnBaaUJ0YjJSbGJDQmtZWFJoSUhWelpYTWdkR2hsSUhOaGJXVWdZblZtWm1WeUlHRnpJSFJvWlNCWFFWTk5JR2hsWVhBc0lIZGxJR1J2YmlkMElHNWxaV1FnZEc4Z1kyOXdlU0JwZEM1Y2JpQWdJQ0JiYlc5a1pXeEVZWFJoVDJabWMyVjBMQ0J0YjJSbGJFUmhkR0ZNWlc1bmRHaGRJRDBnVzIxdlpHVnNSR0YwWVM1aWVYUmxUMlptYzJWMExDQnRiMlJsYkVSaGRHRXVZbmwwWlV4bGJtZDBhRjA3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnTHk4Z2IzUm9aWEozYVhObExDQmpiM0I1SUhSb1pTQnRiMlJsYkNCa1lYUmhJSFJ2SUhSb1pTQlhRVk5OSUdobFlYQXVYRzRnSUNBZ1cyMXZaR1ZzUkdGMFlVOW1abk5sZEN3Z2JXOWtaV3hFWVhSaFRHVnVaM1JvWFNBOUlHTnZjSGxHY205dFJYaDBaWEp1WVd4Q2RXWm1aWElvYlc5a1pXeEVZWFJoS1R0Y2JpQWdmVnh1WEc0Z0lHeGxkQ0J6WlhOemFXOXVTR0Z1Wkd4bElEMGdNRHRjYmlBZ2JHVjBJSE5sYzNOcGIyNVBjSFJwYjI1elNHRnVaR3hsSUQwZ01EdGNiaUFnYkdWMElHbHZRbWx1WkdsdVowaGhibVJzWlNBOUlEQTdYRzRnSUd4bGRDQmhiR3h2WTNNNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lHTnZibk4wSUdsdWNIVjBUbUZ0WlhOVlZFWTRSVzVqYjJSbFpDQTlJRnRkTzF4dUlDQmpiMjV6ZENCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtJRDBnVzEwN1hHNWNiaUFnZEhKNUlIdGNiaUFnSUNCYmMyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXNJR0ZzYkc5amMxMGdQU0J6WlhSVFpYTnphVzl1VDNCMGFXOXVjeWh2Y0hScGIyNXpLVHRjYmx4dUlDQWdJR2xtSUNodmNIUnBiMjV6UHk1bGVIUmxjbTVoYkVSaGRHRWdKaVlnZDJGemJTNXRiM1Z1ZEVWNGRHVnlibUZzUkdGMFlTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHOWhaR2x1WjFCeWIyMXBjMlZ6SUQwZ1cxMDdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJR1pwYkdVZ2IyWWdiM0IwYVc5dWN5NWxlSFJsY201aGJFUmhkR0VwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY0dGMGFDQTlJSFI1Y0dWdlppQm1hV3hsSUQwOVBTQW5jM1J5YVc1bkp5QS9JR1pwYkdVZ09pQm1hV3hsTG5CaGRHZzdYRzRnSUNBZ0lDQWdJR3h2WVdScGJtZFFjbTl0YVhObGN5NXdkWE5vS0d4dllXUkdhV3hsS0hSNWNHVnZaaUJtYVd4bElEMDlQU0FuYzNSeWFXNW5KeUEvSUdacGJHVWdPaUJtYVd4bExtUmhkR0VwTG5Sb1pXNG9aR0YwWVNBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnZDJGemJTNXRiM1Z1ZEVWNGRHVnlibUZzUkdGMFlTRW9jR0YwYUN3Z1pHRjBZU2s3WEc0Z0lDQWdJQ0FnSUgwcEtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnZDJGcGRDQm1iM0lnWVd4c0lHVjRkR1Z5Ym1Gc0lHUmhkR0VnWm1sc1pYTWdkRzhnWW1VZ2JHOWhaR1ZrWEc0Z0lDQWdJQ0JoZDJGcGRDQlFjbTl0YVhObExtRnNiQ2hzYjJGa2FXNW5VSEp2YldselpYTXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lITmxjM05wYjI1SVlXNWtiR1VnUFNCaGQyRnBkQ0IzWVhOdExsOVBjblJEY21WaGRHVlRaWE56YVc5dUtHMXZaR1ZzUkdGMFlVOW1abk5sZEN3Z2JXOWtaV3hFWVhSaFRHVnVaM1JvTENCelpYTnphVzl1VDNCMGFXOXVjMGhoYm1Sc1pTazdYRzRnSUNBZ2FXWWdLSE5sYzNOcGIyNUlZVzVrYkdVZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLQ2REWVc1Y1hDZDBJR055WldGMFpTQmhJSE5sYzNOcGIyNHVKeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ1cybHVjSFYwUTI5MWJuUXNJRzkxZEhCMWRFTnZkVzUwWFNBOUlHZGxkRk5sYzNOcGIyNUpibkIxZEU5MWRIQjFkRU52ZFc1MEtITmxjM05wYjI1SVlXNWtiR1VwTzF4dVhHNGdJQ0FnWTI5dWMzUWdaVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxJRDBnSVNGdmNIUnBiMjV6UHk1bGJtRmliR1ZIY21Gd2FFTmhjSFIxY21VN1hHNWNiaUFnSUNCamIyNXpkQ0JwYm5CMWRFNWhiV1Z6SUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1FnYjNWMGNIVjBUbUZ0WlhNZ1BTQmJYVHRjYmlBZ0lDQmpiMjV6ZENCdmRYUndkWFJRY21WbVpYSnlaV1JNYjJOaGRHbHZibk02SUZOMWNIQnZjblJsWkZSbGJuTnZja1JoZEdGTWIyTmhkR2x2YmtadmNrbHVjSFYwVDNWMGNIVjBXMTBnUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVjSFYwUTI5MWJuUTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYm1GdFpTQTlJSGRoYzIwdVgwOXlkRWRsZEVsdWNIVjBUbUZ0WlNoelpYTnphVzl1U0dGdVpHeGxMQ0JwS1R0Y2JpQWdJQ0FnSUdsbUlDaHVZVzFsSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLQ2REWVc1Y1hDZDBJR2RsZENCaGJpQnBibkIxZENCdVlXMWxMaWNwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVc1d2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa0xuQjFjMmdvYm1GdFpTazdYRzRnSUNBZ0lDQnBibkIxZEU1aGJXVnpMbkIxYzJnb2QyRnpiUzVWVkVZNFZHOVRkSEpwYm1jb2JtRnRaU2twTzF4dUlDQWdJSDFjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzkxZEhCMWRFTnZkVzUwT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHNWhiV1VnUFNCM1lYTnRMbDlQY25SSFpYUlBkWFJ3ZFhST1lXMWxLSE5sYzNOcGIyNUlZVzVrYkdVc0lHa3BPMXh1SUNBZ0lDQWdhV1lnS0c1aGJXVWdQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdZMmhsWTJ0TVlYTjBSWEp5YjNJb0owTmhibHhjSjNRZ1oyVjBJR0Z1SUc5MWRIQjFkQ0J1WVcxbExpY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdiM1YwY0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkM1d2RYTm9LRzVoYldVcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYm1GdFpWTjBjbWx1WnlBOUlIZGhjMjB1VlZSR09GUnZVM1J5YVc1bktHNWhiV1VwTzF4dUlDQWdJQ0FnYjNWMGNIVjBUbUZ0WlhNdWNIVnphQ2h1WVcxbFUzUnlhVzVuS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLQ0ZDVlVsTVJGOUVSVVpUTGtSSlUwRkNURVZmVjBWQ1IxQlZLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaGxibUZpYkdWSGNtRndhRU5oY0hSMWNtVWdKaVlnYjNCMGFXOXVjejh1Y0hKbFptVnljbVZrVDNWMGNIVjBURzlqWVhScGIyNGdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRGQnlaV1psY25KbFpFeHZZMkYwYVc5dWN5NXdkWE5vS0NkbmNIVXRZblZtWm1WeUp5azdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYkc5allYUnBiMjRnUFNCMGVYQmxiMllnYjNCMGFXOXVjejh1Y0hKbFptVnljbVZrVDNWMGNIVjBURzlqWVhScGIyNGdQVDA5SUNkemRISnBibWNuSUQ5Y2JpQWdJQ0FnSUNBZ0lDQWdJRzl3ZEdsdmJuTXVjSEpsWm1WeWNtVmtUM1YwY0hWMFRHOWpZWFJwYjI0Z09seHVJQ0FnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjejh1Y0hKbFptVnljbVZrVDNWMGNIVjBURzlqWVhScGIyNC9MbHR1WVcxbFUzUnlhVzVuWFNBL1B5QW5ZM0IxSnp0Y2JpQWdJQ0FnSUNBZ2FXWWdLR3h2WTJGMGFXOXVJQ0U5UFNBblkzQjFKeUFtSmlCc2IyTmhkR2x2YmlBaFBUMGdKMk53ZFMxd2FXNXVaV1FuSUNZbUlHeHZZMkYwYVc5dUlDRTlQU0FuWjNCMUxXSjFabVpsY2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRTV2ZENCemRYQndiM0owWldRZ2NISmxabVZ5Y21Wa0lHOTFkSEIxZENCc2IyTmhkR2x2YmpvZ0pIdHNiMk5oZEdsdmJuMHVZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLR1Z1WVdKc1pVZHlZWEJvUTJGd2RIVnlaU0FtSmlCc2IyTmhkR2x2YmlBaFBUMGdKMmR3ZFMxaWRXWm1aWEluS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQk9iM1FnYzNWd2NHOXlkR1ZrSUhCeVpXWmxjbkpsWkNCdmRYUndkWFFnYkc5allYUnBiMjQ2SUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dlkyRjBhVzl1ZlM0Z1QyNXNlU0FuWjNCMUxXSjFabVpsY2ljZ2JHOWpZWFJwYjI0Z2FYTWdjM1Z3Y0c5eWRHVmtJSGRvWlc0Z1pXNWhZbXhsUjNKaGNHaERZWEIwZFhKbElHbHpJSFJ5ZFdVdVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYjNWMGNIVjBVSEpsWm1WeWNtVmtURzlqWVhScGIyNXpMbkIxYzJnb2JHOWpZWFJwYjI0cE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklIVnpaU0JKVHlCaWFXNWthVzVuSUc5dWJIa2dkMmhsYmlCaGRDQnNaV0Z6ZENCdmJtVWdiM1YwY0hWMElHbHpJSEJ5WldabVpYSmxaQ0IwYnlCaVpTQnZiaUJIVUZVdVhHNGdJQ0FnYkdWMElHSnBibVJwYm1kVGRHRjBaVG9nU1U5Q2FXNWthVzVuVTNSaGRHVjhiblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdhV1lnS0NGQ1ZVbE1SRjlFUlVaVExrUkpVMEZDVEVWZlYwVkNSMUJWSUNZbUlHOTFkSEIxZEZCeVpXWmxjbkpsWkV4dlkyRjBhVzl1Y3k1emIyMWxLR3dnUFQ0Z2JDQTlQVDBnSjJkd2RTMWlkV1ptWlhJbktTa2dlMXh1SUNBZ0lDQWdhVzlDYVc1a2FXNW5TR0Z1Wkd4bElEMGdkMkZ6YlM1ZlQzSjBRM0psWVhSbFFtbHVaR2x1WnloelpYTnphVzl1U0dGdVpHeGxLVHRjYmlBZ0lDQWdJR2xtSUNocGIwSnBibVJwYm1kSVlXNWtiR1VnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnWTJobFkydE1ZWE4wUlhKeWIzSW9KME5oYmx4Y0ozUWdZM0psWVhSbElFbFBJR0pwYm1ScGJtY3VKeWs3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdKcGJtUnBibWRUZEdGMFpTQTlJSHRjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxPaUJwYjBKcGJtUnBibWRJWVc1a2JHVXNYRzRnSUNBZ0lDQWdJRzkxZEhCMWRGQnlaV1psY25KbFpFeHZZMkYwYVc5dWN5eGNiaUFnSUNBZ0lDQWdiM1YwY0hWMFVISmxabVZ5Y21Wa1RHOWpZWFJwYjI1elJXNWpiMlJsWkRvZ2IzVjBjSFYwVUhKbFptVnljbVZrVEc5allYUnBiMjV6TG0xaGNDaHNJRDArSUdSaGRHRk1iMk5oZEdsdmJsTjBjbWx1WjFSdlJXNTFiU2hzS1Nrc1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdGamRHbDJaVk5sYzNOcGIyNXpMbk5sZENoY2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtoaGJtUnNaU3hjYmlBZ0lDQWdJQ0FnVzNObGMzTnBiMjVJWVc1a2JHVXNJR2x1Y0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkN3Z2IzVjBjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaQ3dnWW1sdVpHbHVaMU4wWVhSbExDQmxibUZpYkdWSGNtRndhRU5oY0hSMWNtVXNJR1poYkhObFhTazdYRzRnSUNBZ2NtVjBkWEp1SUZ0elpYTnphVzl1U0dGdVpHeGxMQ0JwYm5CMWRFNWhiV1Z6TENCdmRYUndkWFJPWVcxbGMxMDdYRzRnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNCcGJuQjFkRTVoYldWelZWUkdPRVZ1WTI5a1pXUXVabTl5UldGamFDaGlkV1lnUFQ0Z2QyRnpiUzVmVDNKMFJuSmxaU2hpZFdZcEtUdGNiaUFnSUNCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMbVp2Y2tWaFkyZ29ZblZtSUQwK0lIZGhjMjB1WDA5eWRFWnlaV1VvWW5WbUtTazdYRzVjYmlBZ0lDQnBaaUFvYVc5Q2FXNWthVzVuU0dGdVpHeGxJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQjNZWE50TGw5UGNuUlNaV3hsWVhObFFtbHVaR2x1WnlocGIwSnBibVJwYm1kSVlXNWtiR1VwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoelpYTnphVzl1U0dGdVpHeGxJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQjNZWE50TGw5UGNuUlNaV3hsWVhObFUyVnpjMmx2YmloelpYTnphVzl1U0dGdVpHeGxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHliM2NnWlR0Y2JpQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQjNZWE50TGw5bWNtVmxLRzF2WkdWc1JHRjBZVTltWm5ObGRDazdYRzRnSUNBZ2FXWWdLSE5sYzNOcGIyNVBjSFJwYjI1elNHRnVaR3hsSUNFOVBTQXdLU0I3WEc0Z0lDQWdJQ0IzWVhOdExsOVBjblJTWld4bFlYTmxVMlZ6YzJsdmJrOXdkR2x2Ym5Nb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXBPMXh1SUNBZ0lIMWNiaUFnSUNCaGJHeHZZM011Wm05eVJXRmphQ2hoYkd4dll5QTlQaUIzWVhOdExsOW1jbVZsS0dGc2JHOWpLU2s3WEc1Y2JpQWdJQ0F2THlCMWJtMXZkVzUwSUdWNGRHVnlibUZzSUdSaGRHRWdhV1lnYm1WalpYTnpZWEo1WEc0Z0lDQWdkMkZ6YlM1MWJtMXZkVzUwUlhoMFpYSnVZV3hFWVhSaFB5NG9LVHRjYmlBZ2ZWeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEpsYkdWaGMyVlRaWE56YVc5dUlEMGdLSE5sYzNOcGIyNUpaRG9nYm5WdFltVnlLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZibk4wSUhkaGMyMGdQU0JuWlhSSmJuTjBZVzVqWlNncE8xeHVJQ0JqYjI1emRDQnpaWE56YVc5dUlEMGdZV04wYVhabFUyVnpjMmx2Ym5NdVoyVjBLSE5sYzNOcGIyNUpaQ2s3WEc0Z0lHbG1JQ2doYzJWemMybHZiaWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdZMkZ1Ym05MElISmxiR1ZoYzJVZ2MyVnpjMmx2Ymk0Z2FXNTJZV3hwWkNCelpYTnphVzl1SUdsa09pQWtlM05sYzNOcGIyNUpaSDFnS1R0Y2JpQWdmVnh1SUNCamIyNXpkQ0JiYzJWemMybHZia2hoYm1Sc1pTd2dhVzV3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrTENCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMQ0JwYjBKcGJtUnBibWRUZEdGMFpTd2daVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxYU0E5SUhObGMzTnBiMjQ3WEc1Y2JpQWdhV1lnS0dsdlFtbHVaR2x1WjFOMFlYUmxLU0I3WEc0Z0lDQWdhV1lnS0dWdVlXSnNaVWR5WVhCb1EyRndkSFZ5WlNrZ2UxeHVJQ0FnSUNBZ2QyRnpiUzVmVDNKMFEyeGxZWEpDYjNWdVpFOTFkSEIxZEhNb2FXOUNhVzVrYVc1blUzUmhkR1V1YUdGdVpHeGxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2QyRnpiUzVmVDNKMFVtVnNaV0Z6WlVKcGJtUnBibWNvYVc5Q2FXNWthVzVuVTNSaGRHVXVhR0Z1Wkd4bEtUdGNiaUFnZlZ4dVhHNGdJSGRoYzIwdWFuTmxjRTl1VW1Wc1pXRnpaVk5sYzNOcGIyNC9MaWh6WlhOemFXOXVTV1FwTzF4dVhHNGdJR2x1Y0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkM1bWIzSkZZV05vS0dKMVppQTlQaUIzWVhOdExsOVBjblJHY21WbEtHSjFaaWtwTzF4dUlDQnZkWFJ3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrTG1admNrVmhZMmdvWW5WbUlEMCtJSGRoYzIwdVgwOXlkRVp5WldVb1luVm1LU2s3WEc0Z0lIZGhjMjB1WDA5eWRGSmxiR1ZoYzJWVFpYTnphVzl1S0hObGMzTnBiMjVJWVc1a2JHVXBPMXh1SUNCaFkzUnBkbVZUWlhOemFXOXVjeTVrWld4bGRHVW9jMlZ6YzJsdmJrbGtLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCd2NtVndZWEpsU1c1d2RYUlBkWFJ3ZFhSVVpXNXpiM0lnUFZ4dUlDQWdJQ2gwWlc1emIzSTZJRlJsYm5OdmNrMWxkR0ZrWVhSaGZHNTFiR3dzSUhSbGJuTnZja2hoYm1Sc1pYTTZJRzUxYldKbGNsdGRMQ0JoYkd4dlkzTTZJRzUxYldKbGNsdGRMQ0J6WlhOemFXOXVTV1E2SUc1MWJXSmxjaXdnYVc1a1pYZzZJRzUxYldKbGNpeGNiaUFnSUNBZ1pXNWhZbXhsUjNKaGNHaERZWEIwZFhKbElEMGdabUZzYzJVcE9pQjJiMmxrSUQwK0lIdGNiaUFnSUNBZ0lHbG1JQ2doZEdWdWMyOXlLU0I3WEc0Z0lDQWdJQ0FnSUhSbGJuTnZja2hoYm1Sc1pYTXVjSFZ6YUNnd0tUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmpiMjV6ZENCM1lYTnRJRDBnWjJWMFNXNXpkR0Z1WTJVb0tUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1pHRjBZVlI1Y0dVZ1BTQjBaVzV6YjNKYk1GMDdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXMXpJRDBnZEdWdWMyOXlXekZkTzF4dUlDQWdJQ0FnWTI5dWMzUWdiRzlqWVhScGIyNGdQU0IwWlc1emIzSmJNMTA3WEc1Y2JpQWdJQ0FnSUd4bGRDQnlZWGRFWVhSaE9pQnVkVzFpWlhJN1hHNGdJQ0FnSUNCc1pYUWdaR0YwWVVKNWRHVk1aVzVuZEdnNklHNTFiV0psY2p0Y2JseHVJQ0FnSUNBZ2FXWWdLR1JoZEdGVWVYQmxJRDA5UFNBbmMzUnlhVzVuSnlBbUppQnNiMk5oZEdsdmJpQTlQVDBnSjJkd2RTMWlkV1ptWlhJbktTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25VM1J5YVc1bklIUmxibk52Y2lCcGN5QnViM1FnYzNWd2NHOXlkR1ZrSUc5dUlFZFFWUzRuS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLR1Z1WVdKc1pVZHlZWEJvUTJGd2RIVnlaU0FtSmlCc2IyTmhkR2x2YmlBaFBUMGdKMmR3ZFMxaWRXWm1aWEluS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loY2JpQWdJQ0FnSUNBZ0lDQWdJR0JGZUhSbGNtNWhiQ0JpZFdabVpYSWdiWFZ6ZENCaVpTQndjbTkyYVdSbFpDQm1iM0lnYVc1d2RYUXZiM1YwY0hWMElHbHVaR1Y0SUNSN2FXNWtaWGg5SUhkb1pXNGdaVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxJR2x6SUhSeWRXVXVZQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaHNiMk5oZEdsdmJpQTlQVDBnSjJkd2RTMWlkV1ptWlhJbktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHZHdkVUoxWm1abGNpQTlJSFJsYm5OdmNsc3lYUzVuY0hWQ2RXWm1aWElnWVhNZ1IxQlZRblZtWm1WeU8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJHVnRaVzUwVTJsNlpVbHVRbmwwWlhNZ1BTQm5aWFJVWlc1emIzSkZiR1Z0Wlc1MFUybDZaU2gwWlc1emIzSkVZWFJoVkhsd1pWTjBjbWx1WjFSdlJXNTFiU2hrWVhSaFZIbHdaU2twSVR0Y2JpQWdJQ0FnSUNBZ1pHRjBZVUo1ZEdWTVpXNW5kR2dnUFNCa2FXMXpMbkpsWkhWalpTZ29ZU3dnWWlrZ1BUNGdZU0FxSUdJc0lERXBJQ29nWld4bGJXVnVkRk5wZW1WSmJrSjVkR1Z6TzF4dVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUhKbFoybHpkR1Z5UW5WbVptVnlJRDBnZDJGemJTNXFjMlZ3VW1WbmFYTjBaWEpDZFdabVpYSTdYRzRnSUNBZ0lDQWdJR2xtSUNnaGNtVm5hWE4wWlhKQ2RXWm1aWElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUmxibk52Y2lCc2IyTmhkR2x2YmlCY0ltZHdkUzFpZFdabVpYSmNJaUJwY3lCdWIzUWdjM1Z3Y0c5eWRHVmtJSGRwZEdodmRYUWdkWE5wYm1jZ1YyVmlSMUJWTGljcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpoZDBSaGRHRWdQU0J5WldkcGMzUmxja0oxWm1abGNpaHpaWE56YVc5dVNXUXNJR2x1WkdWNExDQm5jSFZDZFdabVpYSXNJR1JoZEdGQ2VYUmxUR1Z1WjNSb0tUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdSaGRHRWdQU0IwWlc1emIzSmJNbDA3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb1pHRjBZU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ6ZEhKcGJtY2dkR1Z1YzI5eVhHNGdJQ0FnSUNBZ0lDQWdaR0YwWVVKNWRHVk1aVzVuZEdnZ1BTQTBJQ29nWkdGMFlTNXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lDQWdjbUYzUkdGMFlTQTlJSGRoYzIwdVgyMWhiR3h2WXloa1lYUmhRbmwwWlV4bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1lXeHNiMk56TG5CMWMyZ29jbUYzUkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHUmhkR0ZKYm1SbGVDQTlJSEpoZDBSaGRHRWdMeUEwTzF4dUlDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daR0YwWVM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmtZWFJoVzJsZElDRTlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0dCMFpXNXpiM0lnWkdGMFlTQmhkQ0JwYm1SbGVDQWtlMmw5SUdseklHNXZkQ0JoSUhOMGNtbHVaMkFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2QyRnpiUzVJUlVGUVZUTXlXMlJoZEdGSmJtUmxlQ3NyWFNBOUlHRnNiRzlqVjJGemJWTjBjbWx1Wnloa1lYUmhXMmxkTENCaGJHeHZZM01wTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaFFubDBaVXhsYm1kMGFDQTlJR1JoZEdFdVlubDBaVXhsYm1kMGFEdGNiaUFnSUNBZ0lDQWdJQ0J5WVhkRVlYUmhJRDBnZDJGemJTNWZiV0ZzYkc5aktHUmhkR0ZDZVhSbFRHVnVaM1JvS1R0Y2JpQWdJQ0FnSUNBZ0lDQmhiR3h2WTNNdWNIVnphQ2h5WVhkRVlYUmhLVHRjYmlBZ0lDQWdJQ0FnSUNCM1lYTnRMa2hGUVZCVk9DNXpaWFFvYm1WM0lGVnBiblE0UVhKeVlYa29aR0YwWVM1aWRXWm1aWElzSUdSaGRHRXVZbmwwWlU5bVpuTmxkQ3dnWkdGMFlVSjVkR1ZNWlc1bmRHZ3BMQ0J5WVhkRVlYUmhLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCamIyNXpkQ0J6ZEdGamF5QTlJSGRoYzIwdWMzUmhZMnRUWVhabEtDazdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXMXpUMlptYzJWMElEMGdkMkZ6YlM1emRHRmphMEZzYkc5aktEUWdLaUJrYVcxekxteGxibWQwYUNrN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ1pHbHRTVzVrWlhnZ1BTQmthVzF6VDJabWMyVjBJQzhnTkR0Y2JpQWdJQ0FnSUNBZ1pHbHRjeTVtYjNKRllXTm9LR1FnUFQ0Z2QyRnpiUzVJUlVGUU16SmJaR2x0U1c1a1pYZ3JLMTBnUFNCa0tUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RHVnVjMjl5SUQwZ2QyRnpiUzVmVDNKMFEzSmxZWFJsVkdWdWMyOXlLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHVnVjMjl5UkdGMFlWUjVjR1ZUZEhKcGJtZFViMFZ1ZFcwb1pHRjBZVlI1Y0dVcExDQnlZWGRFWVhSaExDQmtZWFJoUW5sMFpVeGxibWQwYUN3Z1pHbHRjMDltWm5ObGRDd2daR2x0Y3k1c1pXNW5kR2dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtZWFJoVEc5allYUnBiMjVUZEhKcGJtZFViMFZ1ZFcwb2JHOWpZWFJwYjI0cEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSbGJuTnZjaUE5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLR0JEWVc0bmRDQmpjbVZoZEdVZ2RHVnVjMjl5SUdadmNpQnBibkIxZEM5dmRYUndkWFF1SUhObGMzTnBiMjQ5Skh0elpYTnphVzl1U1dSOUxDQnBibVJsZUQwa2UybHVaR1Y0ZlM1Z0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0IwWlc1emIzSklZVzVrYkdWekxuQjFjMmdvZEdWdWMyOXlLVHRjYmlBZ0lDQWdJSDBnWm1sdVlXeHNlU0I3WEc0Z0lDQWdJQ0FnSUhkaGMyMHVjM1JoWTJ0U1pYTjBiM0psS0hOMFlXTnJLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlPMXh1WEc0dktpcGNiaUFxSUhCbGNtWnZjbTBnYVc1bVpYSmxibU5sSUhKMWJseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdjblZ1SUQwZ1lYTjVibU1vWEc0Z0lDQWdjMlZ6YzJsdmJrbGtPaUJ1ZFcxaVpYSXNJR2x1Y0hWMFNXNWthV05sY3pvZ2JuVnRZbVZ5VzEwc0lHbHVjSFYwVkdWdWMyOXljem9nVkdWdWMyOXlUV1YwWVdSaGRHRmJYU3dnYjNWMGNIVjBTVzVrYVdObGN6b2diblZ0WW1WeVcxMHNYRzRnSUNBZ2IzVjBjSFYwVkdWdWMyOXljem9nUVhKeVlYazhWR1Z1YzI5eVRXVjBZV1JoZEdGOGJuVnNiRDRzSUc5d2RHbHZibk02SUVsdVptVnlaVzVqWlZObGMzTnBiMjR1VW5WdVQzQjBhVzl1Y3lrNklGQnliMjFwYzJVOFZHVnVjMjl5VFdWMFlXUmhkR0ZiWFQ0Z1BUNGdlMXh1SUNCamIyNXpkQ0IzWVhOdElEMGdaMlYwU1c1emRHRnVZMlVvS1R0Y2JpQWdZMjl1YzNRZ2MyVnpjMmx2YmlBOUlHRmpkR2wyWlZObGMzTnBiMjV6TG1kbGRDaHpaWE56YVc5dVNXUXBPMXh1SUNCcFppQW9JWE5sYzNOcGIyNHBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lHTmhibTV2ZENCeWRXNGdhVzVtWlhKbGJtTmxMaUJwYm5aaGJHbGtJSE5sYzNOcGIyNGdhV1E2SUNSN2MyVnpjMmx2Ymtsa2ZXQXBPMXh1SUNCOVhHNGdJR052Ym5OMElITmxjM05wYjI1SVlXNWtiR1VnUFNCelpYTnphVzl1V3pCZE8xeHVJQ0JqYjI1emRDQnBibkIxZEU1aGJXVnpWVlJHT0VWdVkyOWtaV1FnUFNCelpYTnphVzl1V3pGZE8xeHVJQ0JqYjI1emRDQnZkWFJ3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrSUQwZ2MyVnpjMmx2YmxzeVhUdGNiaUFnWTI5dWMzUWdhVzlDYVc1a2FXNW5VM1JoZEdVZ1BTQnpaWE56YVc5dVd6TmRPMXh1SUNCamIyNXpkQ0JsYm1GaWJHVkhjbUZ3YUVOaGNIUjFjbVVnUFNCelpYTnphVzl1V3pSZE8xeHVJQ0JqYjI1emRDQnBibkIxZEU5MWRIQjFkRUp2ZFc1a0lEMGdjMlZ6YzJsdmJsczFYVHRjYmx4dUlDQmpiMjV6ZENCcGJuQjFkRU52ZFc1MElEMGdhVzV3ZFhSSmJtUnBZMlZ6TG14bGJtZDBhRHRjYmlBZ1kyOXVjM1FnYjNWMGNIVjBRMjkxYm5RZ1BTQnZkWFJ3ZFhSSmJtUnBZMlZ6TG14bGJtZDBhRHRjYmx4dUlDQnNaWFFnY25WdVQzQjBhVzl1YzBoaGJtUnNaU0E5SURBN1hHNGdJR3hsZENCeWRXNVBjSFJwYjI1elFXeHNiMk56T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1WEc0Z0lHTnZibk4wSUdsdWNIVjBWR1Z1YzI5eVNHRnVaR3hsY3pvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnYjNWMGNIVjBWR1Z1YzI5eVNHRnVaR3hsY3pvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnYVc1d2RYUlBkWFJ3ZFhSQmJHeHZZM002SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzVjYmlBZ1kyOXVjM1FnWW1WbWIzSmxVblZ1VTNSaFkyc2dQU0IzWVhOdExuTjBZV05yVTJGMlpTZ3BPMXh1SUNCamIyNXpkQ0JwYm5CMWRGWmhiSFZsYzA5bVpuTmxkQ0E5SUhkaGMyMHVjM1JoWTJ0QmJHeHZZeWhwYm5CMWRFTnZkVzUwSUNvZ05DazdYRzRnSUdOdmJuTjBJR2x1Y0hWMFRtRnRaWE5QWm1aelpYUWdQU0IzWVhOdExuTjBZV05yUVd4c2IyTW9hVzV3ZFhSRGIzVnVkQ0FxSURRcE8xeHVJQ0JqYjI1emRDQnZkWFJ3ZFhSV1lXeDFaWE5QWm1aelpYUWdQU0IzWVhOdExuTjBZV05yUVd4c2IyTW9iM1YwY0hWMFEyOTFiblFnS2lBMEtUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFRtRnRaWE5QWm1aelpYUWdQU0IzWVhOdExuTjBZV05yUVd4c2IyTW9iM1YwY0hWMFEyOTFiblFnS2lBMEtUdGNibHh1SUNCMGNua2dlMXh1SUNBZ0lGdHlkVzVQY0hScGIyNXpTR0Z1Wkd4bExDQnlkVzVQY0hScGIyNXpRV3hzYjJOelhTQTlJSE5sZEZKMWJrOXdkR2x2Ym5Nb2IzQjBhVzl1Y3lrN1hHNWNiaUFnSUNBdkx5QmpjbVZoZEdVZ2FXNXdkWFFnZEdWdWMyOXljMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dhVzV3ZFhSRGIzVnVkRHNnYVNzcktTQjdYRzRnSUNBZ0lDQndjbVZ3WVhKbFNXNXdkWFJQZFhSd2RYUlVaVzV6YjNJb1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSVVpXNXpiM0p6VzJsZExDQnBibkIxZEZSbGJuTnZja2hoYm1Sc1pYTXNJR2x1Y0hWMFQzVjBjSFYwUVd4c2IyTnpMQ0J6WlhOemFXOXVTV1FzSUdsdWNIVjBTVzVrYVdObGMxdHBYU3dnWlc1aFlteGxSM0poY0doRFlYQjBkWEpsS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCamNtVmhkR1VnYjNWMGNIVjBJSFJsYm5OdmNuTmNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHOTFkSEIxZEVOdmRXNTBPeUJwS3lzcElIdGNiaUFnSUNBZ0lIQnlaWEJoY21WSmJuQjFkRTkxZEhCMWRGUmxibk52Y2loY2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSVVpXNXpiM0p6VzJsZExDQnZkWFJ3ZFhSVVpXNXpiM0pJWVc1a2JHVnpMQ0JwYm5CMWRFOTFkSEIxZEVGc2JHOWpjeXdnYzJWemMybHZia2xrTENCcGJuQjFkRU52ZFc1MElDc2diM1YwY0hWMFNXNWthV05sYzF0cFhTeGNiaUFnSUNBZ0lDQWdJQ0JsYm1GaWJHVkhjbUZ3YUVOaGNIUjFjbVVwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCcGJuQjFkRlpoYkhWbGMwbHVaR1Y0SUQwZ2FXNXdkWFJXWVd4MVpYTlBabVp6WlhRZ0x5QTBPMXh1SUNBZ0lHeGxkQ0JwYm5CMWRFNWhiV1Z6U1c1a1pYZ2dQU0JwYm5CMWRFNWhiV1Z6VDJabWMyVjBJQzhnTkR0Y2JpQWdJQ0JzWlhRZ2IzVjBjSFYwVm1Gc2RXVnpTVzVrWlhnZ1BTQnZkWFJ3ZFhSV1lXeDFaWE5QWm1aelpYUWdMeUEwTzF4dUlDQWdJR3hsZENCdmRYUndkWFJPWVcxbGMwbHVaR1Y0SUQwZ2IzVjBjSFYwVG1GdFpYTlBabVp6WlhRZ0x5QTBPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dhVzV3ZFhSRGIzVnVkRHNnYVNzcktTQjdYRzRnSUNBZ0lDQjNZWE50TGtoRlFWQlZNekpiYVc1d2RYUldZV3gxWlhOSmJtUmxlQ3NyWFNBOUlHbHVjSFYwVkdWdWMyOXlTR0Z1Wkd4bGMxdHBYVHRjYmlBZ0lDQWdJSGRoYzIwdVNFVkJVRlV6TWx0cGJuQjFkRTVoYldWelNXNWtaWGdySzEwZ1BTQnBibkIxZEU1aGJXVnpWVlJHT0VWdVkyOWtaV1JiYVc1d2RYUkpibVJwWTJWelcybGRYVHRjYmlBZ0lDQjlYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnZkWFJ3ZFhSRGIzVnVkRHNnYVNzcktTQjdYRzRnSUNBZ0lDQjNZWE50TGtoRlFWQlZNekpiYjNWMGNIVjBWbUZzZFdWelNXNWtaWGdySzEwZ1BTQnZkWFJ3ZFhSVVpXNXpiM0pJWVc1a2JHVnpXMmxkTzF4dUlDQWdJQ0FnZDJGemJTNUlSVUZRVlRNeVcyOTFkSEIxZEU1aGJXVnpTVzVrWlhncksxMGdQU0J2ZFhSd2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa1cyOTFkSEIxZEVsdVpHbGpaWE5iYVYxZE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hRbFZKVEVSZlJFVkdVeTVFU1ZOQlFreEZYMWRGUWtkUVZTQW1KaUJwYjBKcGJtUnBibWRUZEdGMFpTQW1KaUFoYVc1d2RYUlBkWFJ3ZFhSQ2IzVnVaQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdlMmhoYm1Sc1pTd2diM1YwY0hWMFVISmxabVZ5Y21Wa1RHOWpZWFJwYjI1ekxDQnZkWFJ3ZFhSUWNtVm1aWEp5WldSTWIyTmhkR2x2Ym5ORmJtTnZaR1ZrZlNBOUlHbHZRbWx1WkdsdVoxTjBZWFJsTzF4dVhHNGdJQ0FnSUNCcFppQW9hVzV3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrTG14bGJtZDBhQ0FoUFQwZ2FXNXdkWFJEYjNWdWRDa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZR2x1Y0hWMElHTnZkVzUwSUdaeWIyMGdabVZsWkhNZ0tDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRU52ZFc1MGZTa2dhWE1nWlhod1pXTjBaV1FnZEc4Z1ltVWdZV3gzWVhseklHVnhkV0ZzSUhSdklHMXZaR1ZzSjNNZ2FXNXdkWFFnWTI5MWJuUWdLQ1I3YVc1d2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa0xteGxibWQwYUgwcExtQXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCd2NtOWpaWE56SUdsdWNIVjBjMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm5CMWRFTnZkVzUwT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhVzVrWlhnZ1BTQnBibkIxZEVsdVpHbGpaWE5iYVYwN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdWeWNtOXlRMjlrWlNBOUlHRjNZV2wwSUhkaGMyMHVYMDl5ZEVKcGJtUkpibkIxZENob1lXNWtiR1VzSUdsdWNIVjBUbUZ0WlhOVlZFWTRSVzVqYjJSbFpGdHBibVJsZUYwc0lHbHVjSFYwVkdWdWMyOXlTR0Z1Wkd4bGMxdHBYU2s3WEc0Z0lDQWdJQ0FnSUdsbUlDaGxjbkp2Y2tOdlpHVWdJVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYUdWamEweGhjM1JGY25KdmNpaGdRMkZ1SjNRZ1ltbHVaQ0JwYm5CMWRGc2tlMmw5WFNCbWIzSWdjMlZ6YzJsdmJqMGtlM05sYzNOcGIyNUpaSDB1WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnY0hKdlkyVnpjeUJ3Y21VdFlXeHNiMk5oZEdWa0lHOTFkSEIxZEhOY2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2IzVjBjSFYwUTI5MWJuUTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCcGJtUmxlQ0E5SUc5MWRIQjFkRWx1WkdsalpYTmJhVjA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR3h2WTJGMGFXOXVJRDBnYjNWMGNIVjBWR1Z1YzI5eWMxdHBYVDh1V3pOZE95QWdMeThnZFc1a1pXWnBibVZrSUcxbFlXNXpJRzkxZEhCMWRDQnBjeUJ1YjNRZ2NISmxMV0ZzYkc5allYUmxaQzVjYmx4dUlDQWdJQ0FnSUNCcFppQW9iRzlqWVhScGIyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnZkWFJ3ZFhRZ2FYTWdjSEpsTFdGc2JHOWpZWFJsWkM0Z1ltbHVaQ0IwYUdVZ2RHVnVjMjl5TGx4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdWeWNtOXlRMjlrWlNBOUlIZGhjMjB1WDA5eWRFSnBibVJQZFhSd2RYUW9hR0Z1Wkd4bExDQnZkWFJ3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrVzJsdVpHVjRYU3dnYjNWMGNIVjBWR1Z1YzI5eVNHRnVaR3hsYzF0cFhTd2dNQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1Z5Y205eVEyOWtaU0FoUFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyaGxZMnRNWVhOMFJYSnliM0lvWUVOaGJpZDBJR0pwYm1RZ2NISmxMV0ZzYkc5allYUmxaQ0J2ZFhSd2RYUmJKSHRwZlYwZ1ptOXlJSE5sYzNOcGIyNDlKSHR6WlhOemFXOXVTV1I5TG1BcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnZkWFJ3ZFhRZ2FYTWdibTkwSUhCeVpTMWhiR3h2WTJGMFpXUXVJSEpsYzJWMElIQnlaV1psY25KbFpDQnNiMk5oZEdsdmJpNWNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmxjbkp2Y2tOdlpHVWdQVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjNZWE50TGw5UGNuUkNhVzVrVDNWMGNIVjBLR2hoYm1Sc1pTd2diM1YwY0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkZ0cGJtUmxlRjBzSURBc0lHOTFkSEIxZEZCeVpXWmxjbkpsWkV4dlkyRjBhVzl1YzBWdVkyOWtaV1JiYVc1a1pYaGRLVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9aWEp5YjNKRGIyUmxJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamFHVmphMHhoYzNSRmNuSnZjaWhnUTJGdUozUWdZbWx1WkNCdmRYUndkWFJiSkh0cGZWMGdkRzhnSkh0dmRYUndkWFJRY21WbVpYSnlaV1JNYjJOaGRHbHZibk5iYVYxOUlHWnZjaUJ6WlhOemFXOXVQU1I3YzJWemMybHZia2xrZlM1Z0tUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdGamRHbDJaVk5sYzNOcGIyNXpMbk5sZENoY2JpQWdJQ0FnSUNBZ0lDQnpaWE56YVc5dVNXUXNYRzRnSUNBZ0lDQWdJQ0FnVzNObGMzTnBiMjVJWVc1a2JHVXNJR2x1Y0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkN3Z2IzVjBjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaQ3dnYVc5Q2FXNWthVzVuVTNSaGRHVXNJR1Z1WVdKc1pVZHlZWEJvUTJGd2RIVnlaU3dnZEhKMVpWMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZGhjMjB1YW5ObGNFOXVVblZ1VTNSaGNuUS9MaWh6WlhOemFXOXVTR0Z1Wkd4bEtUdGNiaUFnSUNCc1pYUWdaWEp5YjNKRGIyUmxPaUJ1ZFcxaVpYSTdYRzRnSUNBZ2FXWWdLQ0ZDVlVsTVJGOUVSVVpUTGtSSlUwRkNURVZmVjBWQ1IxQlZJQ1ltSUdsdlFtbHVaR2x1WjFOMFlYUmxLU0I3WEc0Z0lDQWdJQ0JsY25KdmNrTnZaR1VnUFNCaGQyRnBkQ0IzWVhOdExsOVBjblJTZFc1WGFYUm9RbWx1WkdsdVp5aGNiaUFnSUNBZ0lDQWdJQ0J6WlhOemFXOXVTR0Z1Wkd4bExDQnBiMEpwYm1ScGJtZFRkR0YwWlM1b1lXNWtiR1VzSUc5MWRIQjFkRU52ZFc1MExDQnZkWFJ3ZFhSV1lXeDFaWE5QWm1aelpYUXNJSEoxYms5d2RHbHZibk5JWVc1a2JHVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCbGNuSnZja052WkdVZ1BTQmhkMkZwZENCM1lYTnRMbDlQY25SU2RXNG9YRzRnSUNBZ0lDQWdJQ0FnYzJWemMybHZia2hoYm1Sc1pTd2dhVzV3ZFhST1lXMWxjMDltWm5ObGRDd2dhVzV3ZFhSV1lXeDFaWE5QWm1aelpYUXNJR2x1Y0hWMFEyOTFiblFzSUc5MWRIQjFkRTVoYldWelQyWm1jMlYwTENCdmRYUndkWFJEYjNWdWRDeGNiaUFnSUNBZ0lDQWdJQ0J2ZFhSd2RYUldZV3gxWlhOUFptWnpaWFFzSUhKMWJrOXdkR2x2Ym5OSVlXNWtiR1VwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNobGNuSnZja052WkdVZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLQ2RtWVdsc1pXUWdkRzhnWTJGc2JDQlBjblJTZFc0b0tTNG5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCdmRYUndkWFE2SUZSbGJuTnZjazFsZEdGa1lYUmhXMTBnUFNCYlhUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diM1YwY0hWMFEyOTFiblE3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RHVnVjMjl5SUQwZ2QyRnpiUzVJUlVGUVZUTXlXMjkxZEhCMWRGWmhiSFZsYzA5bVpuTmxkQ0F2SURRZ0t5QnBYVHRjYmlBZ0lDQWdJR2xtSUNoMFpXNXpiM0lnUFQwOUlHOTFkSEIxZEZSbGJuTnZja2hoYm1Sc1pYTmJhVjBwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiM1YwY0hWMElIUmxibk52Y2lCcGN5QndjbVV0WVd4c2IyTmhkR1ZrTGlCdWJ5QnVaV1ZrSUhSdklHTnZjSGtnWkdGMFlTNWNiaUFnSUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvYjNWMGNIVjBWR1Z1YzI5eWMxdHBYU0VwTzF4dUlDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1kyOXVjM1FnWW1WbWIzSmxSMlYwVkdWdWMyOXlSR0YwWVZOMFlXTnJJRDBnZDJGemJTNXpkR0ZqYTFOaGRtVW9LVHRjYmlBZ0lDQWdJQzh2SUhOMFlXTnJJR0ZzYkc5allYUmxJRFFnY0c5cGJuUmxjaUIyWVd4MVpWeHVJQ0FnSUNBZ1kyOXVjM1FnZEdWdWMyOXlSR0YwWVU5bVpuTmxkQ0E5SUhkaGMyMHVjM1JoWTJ0QmJHeHZZeWcwSUNvZ05DazdYRzVjYmlBZ0lDQWdJR3hsZENCclpXVndUM1YwY0hWMFZHVnVjMjl5SUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0JzWlhRZ2RIbHdaVG9nVkdWdWMyOXlMbFI1Y0dWOGRXNWtaV1pwYm1Wa0xDQmtZWFJoVDJabWMyVjBJRDBnTUR0Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHVnljbTl5UTI5a1pTQTlJSGRoYzIwdVgwOXlkRWRsZEZSbGJuTnZja1JoZEdFb1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwWlc1emIzSXNJSFJsYm5OdmNrUmhkR0ZQWm1aelpYUXNJSFJsYm5OdmNrUmhkR0ZQWm1aelpYUWdLeUEwTENCMFpXNXpiM0pFWVhSaFQyWm1jMlYwSUNzZ09Dd2dkR1Z1YzI5eVJHRjBZVTltWm5ObGRDQXJJREV5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z5Y205eVEyOWtaU0FoUFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLR0JEWVc0bmRDQmhZMk5sYzNNZ2IzVjBjSFYwSUhSbGJuTnZjaUJrWVhSaElHOXVJR2x1WkdWNElDUjdhWDB1WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiR1YwSUhSbGJuTnZja1JoZEdGSmJtUmxlQ0E5SUhSbGJuTnZja1JoZEdGUFptWnpaWFFnTHlBME8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCa1lYUmhWSGx3WlNBOUlIZGhjMjB1U0VWQlVGVXpNbHQwWlc1emIzSkVZWFJoU1c1a1pYZ3JLMTA3WEc0Z0lDQWdJQ0FnSUdSaGRHRlBabVp6WlhRZ1BTQjNZWE50TGtoRlFWQlZNekpiZEdWdWMyOXlSR0YwWVVsdVpHVjRLeXRkTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrYVcxelQyWm1jMlYwSUQwZ2QyRnpiUzVJUlVGUVZUTXlXM1JsYm5OdmNrUmhkR0ZKYm1SbGVDc3JYVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR2x0YzB4bGJtZDBhQ0E5SUhkaGMyMHVTRVZCVUZVek1sdDBaVzV6YjNKRVlYUmhTVzVrWlhncksxMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElHUnBiWE1nUFNCYlhUdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JrYVcxelRHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCa2FXMXpMbkIxYzJnb2QyRnpiUzVJUlVGUVZUTXlXMlJwYlhOUFptWnpaWFFnTHlBMElDc2dhVjBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIZGhjMjB1WDA5eWRFWnlaV1VvWkdsdGMwOW1abk5sZENrN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MybDZaU0E5SUdScGJYTXVjbVZrZFdObEtDaGhMQ0JpS1NBOVBpQmhJQ29nWWl3Z01TazdYRzRnSUNBZ0lDQWdJSFI1Y0dVZ1BTQjBaVzV6YjNKRVlYUmhWSGx3WlVWdWRXMVViMU4wY21sdVp5aGtZWFJoVkhsd1pTazdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjSEpsWm1WeWNtVmtURzlqWVhScGIyNGdQU0JwYjBKcGJtUnBibWRUZEdGMFpUOHViM1YwY0hWMFVISmxabVZ5Y21Wa1RHOWpZWFJwYjI1elcyOTFkSEIxZEVsdVpHbGpaWE5iYVYxZE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNod2NtVm1aWEp5WldSTWIyTmhkR2x2YmlBOVBUMGdKMmR3ZFMxaWRXWm1aWEluS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMU4wY21sdVp5QjBaVzV6YjNJZ2FYTWdibTkwSUhOMWNIQnZjblJsWkNCdmJpQkhVRlV1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE4wY21sdVowUmhkR0U2SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHUmhkR0ZKYm1SbGVDQTlJR1JoZEdGUFptWnpaWFFnTHlBME8xeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYzJsNlpUc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnZabVp6WlhRZ1BTQjNZWE50TGtoRlFWQlZNekpiWkdGMFlVbHVaR1Y0S3l0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdiV0Y0UW5sMFpYTlViMUpsWVdRZ1BTQnBJRDA5UFNCemFYcGxJQzBnTVNBL0lIVnVaR1ZtYVc1bFpDQTZJSGRoYzIwdVNFVkJVRlV6TWx0a1lYUmhTVzVrWlhoZElDMGdiMlptYzJWME8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSeWFXNW5SR0YwWVM1d2RYTm9LSGRoYzIwdVZWUkdPRlJ2VTNSeWFXNW5LRzltWm5ObGRDd2diV0Y0UW5sMFpYTlViMUpsWVdRcEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2IzVjBjSFYwTG5CMWMyZ29XM1I1Y0dVc0lHUnBiWE1zSUhOMGNtbHVaMFJoZEdFc0lDZGpjSFVuWFNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnU1dZZ1lTQmpaWEowWVdsdUlHOTFkSEIxZENkeklIQnlaV1psY25KbFpDQnNiMk5oZEdsdmJpQnBjeUJIVUZVZ1luVjBJSFJvWlNCMFpXNXpiM0lnYVhNZ1pXMXdkSGtzSUhkbElITjBhV3hzSUc1bFpXUWdkRzhnWTNKbFlYUmxJR0VnUTFCVlhHNGdJQ0FnSUNBZ0lDQWdMeThnZEdWdWMyOXlJR1p2Y2lCcGRDNGdWR2hsY21VZ2FYTWdibThnYldGd2NHbHVaeUJIVUZVZ1luVm1abVZ5SUdadmNpQmhiaUJsYlhCMGVTQjBaVzV6YjNJdVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hCeVpXWmxjbkpsWkV4dlkyRjBhVzl1SUQwOVBTQW5aM0IxTFdKMVptWmxjaWNnSmlZZ2MybDZaU0ErSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR2RsZEVKMVptWmxjaUE5SUhkaGMyMHVhbk5sY0VkbGRFSjFabVpsY2p0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaFoyVjBRblZtWm1WeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmNISmxabVZ5Y21Wa1RHOWpZWFJwYjI0Z1hDSm5jSFV0WW5WbVptVnlYQ0lnYVhNZ2JtOTBJSE4xY0hCdmNuUmxaQ0IzYVhSb2IzVjBJSFZ6YVc1bklGZGxZa2RRVlM0bktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHZHdkVUoxWm1abGNpQTlJR2RsZEVKMVptWmxjaWhrWVhSaFQyWm1jMlYwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHVnNaVzFsYm5SVGFYcGxJRDBnWjJWMFZHVnVjMjl5Uld4bGJXVnVkRk5wZW1Vb1pHRjBZVlI1Y0dVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHVnNaVzFsYm5SVGFYcGxJRDA5UFNCMWJtUmxabWx1WldRZ2ZId2dJV2x6UjNCMVFuVm1abVZ5VTNWd2NHOXlkR1ZrVkhsd1pTaDBlWEJsS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUZWdWMzVndjRzl5ZEdWa0lHUmhkR0VnZEhsd1pUb2dKSHQwZVhCbGZXQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QmtieUJ1YjNRZ2NtVnNaV0Z6WlNCMGFHVWdkR1Z1YzI5eUlISnBaMmgwSUc1dmR5NGdhWFFnZDJsc2JDQmlaU0J5Wld4bFlYTmxaQ0IzYUdWdUlIVnpaWElnWTJGc2JITWdkR1Z1YzI5eUxtUnBjM0J2YzJVb0tTNWNiaUFnSUNBZ0lDQWdJQ0FnSUd0bFpYQlBkWFJ3ZFhSVVpXNXpiM0lnUFNCMGNuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhRdWNIVnphQ2hiWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dVc0lHUnBiWE1zSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbmNIVkNkV1ptWlhJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHOTNibXh2WVdRNklIZGhjMjB1YW5ObGNFTnlaV0YwWlVSdmQyNXNiMkZrWlhJaEtHZHdkVUoxWm1abGNpd2djMmw2WlNBcUlHVnNaVzFsYm5SVGFYcGxMQ0IwZVhCbEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmthWE53YjNObE9pQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjNZWE50TGw5UGNuUlNaV3hsWVhObFZHVnVjMjl5S0hSbGJuTnZjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FuWjNCMUxXSjFabVpsY2lkY2JpQWdJQ0FnSUNBZ0lDQWdJRjBwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQjBlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0lnUFNCMFpXNXpiM0pVZVhCbFZHOVVlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0lvZEhsd1pTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrWVhSaElEMGdibVYzSUhSNWNHVmtRWEp5WVhsRGIyNXpkSEoxWTNSdmNpaHphWHBsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZHlCVmFXNTBPRUZ5Y21GNUtHUmhkR0V1WW5WbVptVnlMQ0JrWVhSaExtSjVkR1ZQWm1aelpYUXNJR1JoZEdFdVlubDBaVXhsYm1kMGFDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjMlYwS0hkaGMyMHVTRVZCVUZVNExuTjFZbUZ5Y21GNUtHUmhkR0ZQWm1aelpYUXNJR1JoZEdGUFptWnpaWFFnS3lCa1lYUmhMbUo1ZEdWTVpXNW5kR2dwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRDNXdkWE5vS0Z0MGVYQmxMQ0JrYVcxekxDQmtZWFJoTENBblkzQjFKMTBwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJQ0FnZDJGemJTNXpkR0ZqYTFKbGMzUnZjbVVvWW1WbWIzSmxSMlYwVkdWdWMyOXlSR0YwWVZOMFlXTnJLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1VnUFQwOUlDZHpkSEpwYm1jbklDWW1JR1JoZEdGUFptWnpaWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjNZWE50TGw5bWNtVmxLR1JoZEdGUFptWnpaWFFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2doYTJWbGNFOTFkSEIxZEZSbGJuTnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lIZGhjMjB1WDA5eWRGSmxiR1ZoYzJWVVpXNXpiM0lvZEdWdWMyOXlLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNocGIwSnBibVJwYm1kVGRHRjBaU0FtSmlBaFpXNWhZbXhsUjNKaGNHaERZWEIwZFhKbEtTQjdYRzRnSUNBZ0lDQjNZWE50TGw5UGNuUkRiR1ZoY2tKdmRXNWtUM1YwY0hWMGN5aHBiMEpwYm1ScGJtZFRkR0YwWlM1b1lXNWtiR1VwTzF4dUlDQWdJQ0FnWVdOMGFYWmxVMlZ6YzJsdmJuTXVjMlYwS0Z4dUlDQWdJQ0FnSUNBZ0lITmxjM05wYjI1SlpDeGNiaUFnSUNBZ0lDQWdJQ0JiYzJWemMybHZia2hoYm1Sc1pTd2dhVzV3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrTENCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMQ0JwYjBKcGJtUnBibWRUZEdGMFpTd2daVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxMQ0JtWVd4elpWMHBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYjNWMGNIVjBPMXh1SUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUhkaGMyMHVjM1JoWTJ0U1pYTjBiM0psS0dKbFptOXlaVkoxYmxOMFlXTnJLVHRjYmx4dUlDQWdJR2x1Y0hWMFZHVnVjMjl5U0dGdVpHeGxjeTVtYjNKRllXTm9LSFlnUFQ0Z2QyRnpiUzVmVDNKMFVtVnNaV0Z6WlZSbGJuTnZjaWgyS1NrN1hHNGdJQ0FnYjNWMGNIVjBWR1Z1YzI5eVNHRnVaR3hsY3k1bWIzSkZZV05vS0hZZ1BUNGdkMkZ6YlM1ZlQzSjBVbVZzWldGelpWUmxibk52Y2loMktTazdYRzRnSUNBZ2FXNXdkWFJQZFhSd2RYUkJiR3h2WTNNdVptOXlSV0ZqYUNod0lEMCtJSGRoYzIwdVgyWnlaV1VvY0NrcE8xeHVYRzRnSUNBZ2FXWWdLSEoxYms5d2RHbHZibk5JWVc1a2JHVWdJVDA5SURBcElIdGNiaUFnSUNBZ0lIZGhjMjB1WDA5eWRGSmxiR1ZoYzJWU2RXNVBjSFJwYjI1ektISjFiazl3ZEdsdmJuTklZVzVrYkdVcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5ZFc1UGNIUnBiMjV6UVd4c2IyTnpMbVp2Y2tWaFkyZ29jQ0E5UGlCM1lYTnRMbDltY21WbEtIQXBLVHRjYmlBZ2ZWeHVmVHRjYmx4dUx5b3FYRzRnS2lCbGJtUWdjSEp2Wm1sc2FXNW5YRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JsYm1SUWNtOW1hV3hwYm1jZ1BTQW9jMlZ6YzJsdmJrbGtPaUJ1ZFcxaVpYSXBPaUIyYjJsa0lEMCtJSHRjYmlBZ1kyOXVjM1FnZDJGemJTQTlJR2RsZEVsdWMzUmhibU5sS0NrN1hHNGdJR052Ym5OMElITmxjM05wYjI0Z1BTQmhZM1JwZG1WVFpYTnphVzl1Y3k1blpYUW9jMlZ6YzJsdmJrbGtLVHRjYmlBZ2FXWWdLQ0Z6WlhOemFXOXVLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHBiblpoYkdsa0lITmxjM05wYjI0Z2FXUW5LVHRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnpaWE56YVc5dVNHRnVaR3hsSUQwZ2MyVnpjMmx2Ymxzd1hUdGNibHh1SUNBdkx5QndjbTltYVd4bElHWnBiR1VnYm1GdFpTQnBjeUJ1YjNRZ2RYTmxaQ0I1WlhRc0lHSjFkQ0JwZENCdGRYTjBJR0psSUdaeVpXVmtMbHh1SUNCamIyNXpkQ0J3Y205bWFXeGxSbWxzWlU1aGJXVWdQU0IzWVhOdExsOVBjblJGYm1SUWNtOW1hV3hwYm1jb2MyVnpjMmx2YmtoaGJtUnNaU2s3WEc0Z0lHbG1JQ2h3Y205bWFXeGxSbWxzWlU1aGJXVWdQVDA5SURBcElIdGNiaUFnSUNCamFHVmphMHhoYzNSRmNuSnZjaWduUTJGdVhGd25kQ0JuWlhRZ1lXNGdjSEp2Wm1sc1pTQm1hV3hsSUc1aGJXVXVKeWs3WEc0Z0lIMWNiaUFnZDJGemJTNWZUM0owUm5KbFpTaHdjbTltYVd4bFJtbHNaVTVoYldVcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1Y0ZEhKaFkzUlVjbUZ1YzJabGNtRmliR1ZDZFdabVpYSnpJRDBnS0hSbGJuTnZjbk02SUhKbFlXUnZibXg1SUZObGNtbGhiR2w2WVdKc1pWUmxibk52Y2sxbGRHRmtZWFJoVzEwcE9pQkJjbkpoZVVKMVptWmxja3hwYTJWYlhTQTlQaUI3WEc0Z0lHTnZibk4wSUdKMVptWmxjbk02SUVGeWNtRjVRblZtWm1WeVRHbHJaVnRkSUQwZ1cxMDdYRzRnSUdadmNpQW9ZMjl1YzNRZ2RHVnVjMjl5SUc5bUlIUmxibk52Y25NcElIdGNiaUFnSUNCamIyNXpkQ0JrWVhSaElEMGdkR1Z1YzI5eVd6SmRPMXh1SUNBZ0lHbG1JQ2doUVhKeVlYa3VhWE5CY25KaGVTaGtZWFJoS1NBbUppQW5ZblZtWm1WeUp5QnBiaUJrWVhSaEtTQjdYRzRnSUNBZ0lDQmlkV1ptWlhKekxuQjFjMmdvWkdGMFlTNWlkV1ptWlhJcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnWW5WbVptVnljenRjYm4wN1hHNGlMQ0FpTHk4Z1EyOXdlWEpwWjJoMElDaGpLU0JOYVdOeWIzTnZablFnUTI5eWNHOXlZWFJwYjI0dUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzR2THlCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1RVbFVJRXhwWTJWdWMyVXVYRzVjYmk4dkx5QThjbVZtWlhKbGJtTmxJR3hwWWoxY0luZGxZbmR2Y210bGNsd2lJQzgrWEc1Y2JpOHZYRzR2THlBcUlIUjVjR1VnYUdGamF5Qm1iM0lnWENKSVZFMU1TVzFoWjJWRmJHVnRaVzUwWENKY2JpOHZYRzR2THlCcGJpQjBlWEJsYzJOeWFYQjBMQ0IwYUdVZ2RIbHdaU0J2WmlCY0lraFVUVXhKYldGblpVVnNaVzFsYm5SY0lpQnBjeUJrWldacGJtVmtJR2x1SUd4cFlpNWtiMjB1WkM1MGN5d2dkMmhwWTJnZ2FYTWdZMjl1Wm14cFkzUWdkMmwwYUNCc2FXSXVkMlZpZDI5eWEyVnlMbVF1ZEhNdVhHNHZMeUIzYUdWdUlIZGxJSFZ6WlNCM1pXSjNiM0pyWlhJc0lIUm9aU0JzYVdJdWQyVmlkMjl5YTJWeUxtUXVkSE1nZDJsc2JDQmlaU0IxYzJWa0xDQjNhR2xqYUNCa2IyVnpJRzV2ZENCb1lYWmxJRWhVVFV4SmJXRm5aVVZzWlcxbGJuUWdaR1ZtYVc1bFpDNWNiaTh2WEc0dkx5QjNaU0IzYVd4c0lHZGxkQ0IwYUdVZ1ptOXNiRzkzYVc1bklHVnljbTl5Y3lCamIyMXdiR0ZwYm1sdVp5QjBhR0YwSUVoVVRVeEpiV0ZuWlVWc1pXMWxiblFnYVhNZ2JtOTBJR1JsWm1sdVpXUTZYRzR2TDF4dUx5OGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNiaTh2WEc0dkx5QXVMaTlqYjIxdGIyNHZaR2x6ZEM5amFuTXZkR1Z1YzI5eUxXWmhZM1J2Y25rdVpDNTBjem94T0RjNk1qa2dMU0JsY25KdmNpQlVVekkxTlRJNklFTmhibTV2ZENCbWFXNWtJRzVoYldVZ0owaFVUVXhKYldGblpVVnNaVzFsYm5RbkxpQkVhV1FnZVc5MUlHMWxZVzVjYmk4dklDZElWRTFNVEVsRmJHVnRaVzUwSno5Y2JpOHZYRzR2THlBeE9EY2dJQ0FnSUdaeWIyMUpiV0ZuWlNocGJXRm5aVVZzWlcxbGJuUTZJRWhVVFV4SmJXRm5aVVZzWlcxbGJuUXNJRzl3ZEdsdmJuTS9PaUJVWlc1emIzSkdjbTl0U1cxaFoyVkZiR1Z0Wlc1MFQzQjBhVzl1Y3lrNlhHNHZMeUJRY205dGFYTmxQRlI1Y0dWa1ZHVnVjMjl5UENkbWJHOWhkRE15Sno0Z2ZDQlVlWEJsWkZSbGJuTnZjanduZFdsdWREZ25QajQ3WEc0dkx5QWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUg1K2ZuNStmbjUrZm41K2ZuNStmbjVjYmk4dlhHNHZMeUJ1YjJSbFgyMXZaSFZzWlhNdlFIZGxZbWR3ZFM5MGVYQmxjeTlrYVhOMEwybHVaR1Y0TG1RdWRITTZPRE02TnlBdElHVnljbTl5SUZSVE1qVTFNam9nUTJGdWJtOTBJR1pwYm1RZ2JtRnRaU0FuU0ZSTlRFbHRZV2RsUld4bGJXVnVkQ2N1SUVScFpDQjViM1VnYldWaGJseHVMeThnSjBoVVRVeE1TVVZzWlcxbGJuUW5QMXh1THk5Y2JpOHZJRGd6SUNBZ0lDQjhJRWhVVFV4SmJXRm5aVVZzWlcxbGJuUmNiaTh2SUNBZ0lDQWdJQ0FnSUg1K2ZuNStmbjUrZm41K2ZuNStmbjVjYmk4dlhHNHZMeUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1THk5Y2JpOHZJR0JJVkUxTVNXMWhaMlZGYkdWdFpXNTBZQ0JwY3lCdmJteDVJSFZ6WldRZ2FXNGdkSGx3WlNCa1pXTnNZWEpoZEdsdmJpQmhibVFnYm05MElHbHVJSEpsWVd3Z1kyOWtaUzRnVTI4Z2QyVWdaR1ZtYVc1bElHbDBJR0Z6SUdCMWJtdHViM2R1WUNCb1pYSmxJSFJ2WEc0dkx5QmllWEJoYzNNZ2RHaGxJSFI1Y0dVZ1kyaGxZMnN1WEc0dkwxeHVaR1ZqYkdGeVpTQm5iRzlpWVd3Z2UxeHVJQ0IwZVhCbElFaFVUVXhKYldGblpVVnNaVzFsYm5RZ1BTQjFibXR1YjNkdU8xeHVmVnh1WEc1cGJYQnZjblFnZTA5eWRGZGhjMjFOWlhOellXZGxMQ0JUWlhKcFlXeHBlbUZpYkdWVVpXNXpiM0pOWlhSaFpHRjBZWDBnWm5KdmJTQW5MaTR2Y0hKdmVIa3RiV1Z6YzJGblpYTW5PMXh1YVcxd2IzSjBJSHRqY21WaGRHVlRaWE56YVc5dUxDQmpiM0I1Um5KdmJVVjRkR1Z5Ym1Gc1FuVm1abVZ5TENCbGJtUlFjbTltYVd4cGJtY3NJR1Y0ZEhKaFkzUlVjbUZ1YzJabGNtRmliR1ZDZFdabVpYSnpMQ0JwYm1sMFJYQXNJR2x1YVhSU2RXNTBhVzFsTENCeVpXeGxZWE5sVTJWemMybHZiaXdnY25WdWZTQm1jbTl0SUNjdUxpOTNZWE50TFdOdmNtVXRhVzF3YkNjN1hHNXBiWEJ2Y25RZ2UybHVhWFJwWVd4cGVtVlhaV0pCYzNObGJXSnNlWDBnWm5KdmJTQW5MaTR2ZDJGemJTMW1ZV04wYjNKNUp6dGNibHh1YzJWc1ppNXZibTFsYzNOaFoyVWdQU0FvWlhZNklFMWxjM05oWjJWRmRtVnVkRHhQY25SWFlYTnRUV1Z6YzJGblpUNHBPaUIyYjJsa0lEMCtJSHRjYmlBZ1kyOXVjM1FnZTNSNWNHVXNJR2x1SURvZ2JXVnpjMkZuWlgwZ1BTQmxkaTVrWVhSaE8xeHVJQ0IwY25rZ2UxeHVJQ0FnSUhOM2FYUmphQ0FvZEhsd1pTa2dlMXh1SUNBZ0lDQWdZMkZ6WlNBbmFXNXBkQzEzWVhOdEp6cGNiaUFnSUNBZ0lDQWdhVzVwZEdsaGJHbDZaVmRsWWtGemMyVnRZbXg1S0cxbGMzTmhaMlVoTG5kaGMyMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBdWRHaGxiaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1sMFVuVnVkR2x0WlNodFpYTnpZV2RsSVNrdWRHaGxiaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2IzTjBUV1Z6YzJGblpTaDdkSGx3WlgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeUlEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxMQ0JsY25KOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y2lBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3YjNOMFRXVnpjMkZuWlNoN2RIbHdaU3dnWlhKeWZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNBbmFXNXBkQzFsY0NjNklIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UyVndUbUZ0WlN3Z1pXNTJmU0E5SUcxbGMzTmhaMlVoTzF4dUlDQWdJQ0FnSUNCcGJtbDBSWEFvWlc1MkxDQmxjRTVoYldVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1ZEdobGJpaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndiM04wVFdWemMyRm5aU2g3ZEhsd1pYMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeUlEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCdmMzUk5aWE56WVdkbEtIdDBlWEJsTENCbGNuSjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JqWVhObElDZGpiM0I1TFdaeWIyMG5PaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSHRpZFdabVpYSjlJRDBnYldWemMyRm5aU0U3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0oxWm1abGNrUmhkR0VnUFNCamIzQjVSbkp2YlVWNGRHVnlibUZzUW5WbVptVnlLR0oxWm1abGNpazdYRzRnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxMQ0J2ZFhRNklHSjFabVpsY2tSaGRHRjlJR0Z6SUU5eWRGZGhjMjFOWlhOellXZGxLVHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpZWE5sSUNkamNtVmhkR1VuT2lCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUh0dGIyUmxiQ3dnYjNCMGFXOXVjMzBnUFNCdFpYTnpZV2RsSVR0Y2JpQWdJQ0FnSUNBZ1kzSmxZWFJsVTJWemMybHZiaWh0YjJSbGJDd2diM0IwYVc5dWN5bGNiaUFnSUNBZ0lDQWdJQ0FnSUM1MGFHVnVLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sYzNOcGIyNU5aWFJoWkdGMFlTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2IzTjBUV1Z6YzJGblpTaDdkSGx3WlN3Z2IzVjBPaUJ6WlhOemFXOXVUV1YwWVdSaGRHRjlJR0Z6SUU5eWRGZGhjMjFOWlhOellXZGxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNpQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2IzTjBUV1Z6YzJGblpTaDdkSGx3WlN3Z1pYSnlmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTJGelpTQW5jbVZzWldGelpTYzZYRzRnSUNBZ0lDQWdJSEpsYkdWaGMyVlRaWE56YVc5dUtHMWxjM05oWjJVaEtUdGNiaUFnSUNBZ0lDQWdjRzl6ZEUxbGMzTmhaMlVvZTNSNWNHVjlLVHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQmpZWE5sSUNkeWRXNG5PaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSHR6WlhOemFXOXVTV1FzSUdsdWNIVjBTVzVrYVdObGN5d2dhVzV3ZFhSekxDQnZkWFJ3ZFhSSmJtUnBZMlZ6TENCdmNIUnBiMjV6ZlNBOUlHMWxjM05oWjJVaE8xeHVJQ0FnSUNBZ0lDQnlkVzRvYzJWemMybHZia2xrTENCcGJuQjFkRWx1WkdsalpYTXNJR2x1Y0hWMGN5d2diM1YwY0hWMFNXNWthV05sY3l3Z2JtVjNJRUZ5Y21GNUtHOTFkSEIxZEVsdVpHbGpaWE11YkdWdVozUm9LUzVtYVd4c0tHNTFiR3dwTENCdmNIUnBiMjV6S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdMblJvWlc0b1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwY3lBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2IzVjBjSFYwY3k1emIyMWxLRzhnUFQ0Z2Ixc3pYU0FoUFQwZ0oyTndkU2NwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxMQ0JsY25JNklDZFFjbTk0ZVNCa2IyVnpJRzV2ZENCemRYQndiM0owSUc1dmJpMWpjSFVnZEdWdWMyOXlJR3h2WTJGMGFXOXVMaWQ5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTNSNWNHVXNJRzkxZERvZ2IzVjBjSFYwYzMwZ1lYTWdUM0owVjJGemJVMWxjM05oWjJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGVIUnlZV04wVkhKaGJuTm1aWEpoWW14bFFuVm1abVZ5Y3loYkxpNHVhVzV3ZFhSekxDQXVMaTV2ZFhSd2RYUnpYU0JoY3lCVFpYSnBZV3hwZW1GaWJHVlVaVzV6YjNKTlpYUmhaR0YwWVZ0ZEtTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSWdQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVc0lHVnljbjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOaGMyVWdKMlZ1WkMxd2NtOW1hV3hwYm1jbk9seHVJQ0FnSUNBZ0lDQmxibVJRY205bWFXeHBibWNvYldWemMyRm5aU0VwTzF4dUlDQWdJQ0FnSUNCd2IzTjBUV1Z6YzJGblpTaDdkSGx3WlgwcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdmVnh1SUNCOUlHTmhkR05vSUNobGNuSXBJSHRjYmlBZ0lDQndiM04wVFdWemMyRm5aU2g3ZEhsd1pTd2daWEp5ZlNCaGN5QlBjblJYWVhOdFRXVnpjMkZuWlNrN1hHNGdJSDFjYm4wN1hHNGlYU3dLSUNBaWJXRndjR2x1WjNNaU9pQWlPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEUxQlFXRXNWVUZCYTBNc1kwRkJjME03UVVGQmNrWTdRVUZCUVR0QlFVRlBMRTFCUVUwc1YwRkJWenRCUVVGcFFpeE5RVUZOTEdWQlFXVTdRVUZCYVVJc1RVRkJUU3h0UWtGQmJVSTdRVUZCUVR0QlFVRkJPenM3UVVOQmVFYzdRVUZCUVR0QlFVRkJMR2RDUVVGQlFUdEJRVUZCTzBGQlFVRXNUVUZCWVVFN1FVRkJZanRCUVVGQk8wRkJRVThzVFVGQlRVRXNVVUZCVHp0QlFVRkJPMEZCUVVFN096dEJRMEZ3UWp0QlFVRkJPMEZCUVVFN1FVRkRRU3hWUVVGSkxGZEJRVmNzVFVGQlRUdEJRVU51UWl4WlFVRkpMR0ZCUVdFc1QwRkJUeXhoUVVGaExHVkJRV1VzVTBGQlV5eG5Ra0ZCWjBJc1UwRkJVeXhqUVVGakxFMUJRVTA3UVVGRE1VY3NXVUZCU1N4UFFVRlBMR1ZCUVdVN1FVRkJZU3gxUWtGQllTeGpRVUZqTzBGQlEyeEZMR1ZCUTBZc1UwRkJVeXhaUVVGWkxFTkJRVU1zUjBGQlJ6dEJRVVY2UWl4alFVRkpMRWxCUVVVc1YwRkJWU3hIUVVGRk8wRkJRVVVzV1VGQlJTeFJRVUZOTEVsQlFVa3NVVUZCVVN4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTzBGQlFVVXNaMEpCUVVVN1FVRkJRU3hWUVVGRExFTkJRVU03UVVGQlJTeGpRVUZKTEVsQlFVVXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSU3hEUVVGRExFZEJRVVVzU1VGQlJTeHJRa0ZCYVVJc1MwRkJSeXhaUVVGVkxFOUJRVThzVVVGQlR5eEpRVUZGTEdOQlFWa3NUMEZCVHl4bFFVRmpMRXRCUVVjc1dVRkJWU3hQUVVGUExGZEJRVk1zV1VGQlZTeFBRVUZQTEZGQlFWRXNXVUZCVlN4WlFVRlZMRTlCUVU4c1VVRkJVU3hUUVVGVExFMUJRVXNzU1VGQlJTeEpRVUZITEVkQlFVVXNSMEZCUlR0QlFVTnlVaXhqUVVGSExFbEJRVWM3UVVGQlF5eG5Ra0ZCU1N4TFFVRkhMSFZEUVVGakxFbEJRVVU3UVVGQlowSXNaMEpCUVVVc1NVRkJSU3hGUVVGRkxGRkJRVkVzUTBGQlF5eEpRVUZGTEUxQlFVa3NXVUZCVlR0QlFVRkpMR2RDUVVGRkxFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNhMEpCUVVVc1JVRkJSU3hYUVVGWExGTkJRVk1zU1VGQlJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1ZVRkJWU3hEUVVGRE8wRkJRVVVzY1VKQlFVOHNSMEZCUnl4aFFVRmhMRWRCUVVVc1NVRkJSU3hUUVVGUExFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVVXNaMEpCUVVVc1QwRkJSenRCUVVGRExHdENRVUZGTEVWQlFVVXNSMEZCUlN4SlFVRkZPMEZCUVVVc1owSkJRVVVzVjBGQlV5eEpRVUZGTEVsQlFVa3NWMEZCVnl4RFFVRkRPMEZCUVVjc2NVSkJRVTg3UVVGQlFTeFpRVUZETzBGQlFVVXNaMEpCUVVVc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEpRVUZGTEZOQlFVczdRVUZCUXl4clFrRkJSU3hGUVVGRkxGZEJRVmNzVTBGQlV5eEpRVUZGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hWUVVGVkxFTkJRVU03UVVGQlJTeHBRa0ZCUnl4VFFVRlRMRWRCUVVVc1NVRkJSU3hUUVVGUExGRkJRVThzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4dlFrRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlJTeEZRVUZGTEVsQlFVVXNSVUZCUlN4VFFVRlBMRU5CUVVNN1FVRkJRU3hqUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVVXNZVUZCUXl4RlFVRkZMR1ZCUVdFc1NVRkJSU3hSUVVGUkxFdEJRVXNzVjBGQlV5eEpRVUZGTEZGQlFWRXNTMEZCU3l4RFFVRkRMRVZCUVVVc1VVRkJVU3hQUVVGTkxFZEJRVWM3UVVGQlJ5eHZRa0ZCVVN4TFFVRkxMRTFCUVUwc1EwRkJRenRCUVVGRkxHTkJRVVVzVlVGQlVTeE5RVUZKTzBGQlFVRXNWVUZCTkVJc1YwRkJVeXhOUVVOb2FFSTdRVUZCUlN4blFrRkJSU3hKUVVGRkxFdEJRVXNzVTBGQlV5eFBRVUZMTEdWQlFXRXNUMEZCVHl4WlFVRlZMRk5CUVZNc2EwSkJRV2RDTEVsQlFVVXNVMEZCVXl4alFVRmpMRTFCUVVzc1pVRkJZU3hKUVVGRkxHRkJRVmtzVFVGQlNTeEZRVUZGTEZGQlFWRXNUMEZCVHl4SlFVRkZMRWxCUVVVc1JVRkJSU3hQUVVGUExFZEJRVVVzUlVGQlJTeFJRVUZSTEZWQlFWTXNSVUZCUlN4RlFVRkZMRmxCUVZrc1IwRkJSeXhKUVVGRkxFTkJRVU1zU1VGQlJTeEpRVUZGTEVsQlFVY3NTVUZCUlN4UFFVRkhPMEZCUVVNc2EwSkJRVWtzU1VGQlJTeEpRVUZKTzBGQlFXVXNaMEpCUVVVc1MwRkJTeXhQUVVGTkxFZEJRVVVzUzBGQlJUdEJRVUZGTEdkQ1FVRkZMRXRCUVVzc1NVRkJTVHRCUVVGRkxIRkNRVUZQTEVWQlFVVTdRVUZCUVN4WlFVRlpMRWRCUVVVc1RVRkJTU3hKUVVGRkxFOUJRVWM3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRWxCUVVrN1FVRkJaU3huUWtGQlJTeExRVUZMTEU5QlFVMHNSMEZCUlN4TFFVRkZPMEZCUVVVc1owSkJRVVVzWlVGQllUdEJRVUZqTEdkQ1FVRkZMRXRCUVVzc1NVRkJTVHRCUVVGRkxIRkNRVUZQTEVsQlFVa3NWMEZCVnl4RlFVRkZMRkZCUVZFN1FVRkJRU3haUVVGRExFbEJRVWNzU1VGQlJTeERRVUZETEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc2EwSkJRVWtzU1VGQlJTeEpRVUZKTzBGQlFXVXNaMEpCUVVVc1MwRkJTeXhQUVVGTkxFZEJRVVVzU1VGQlJUdEJRVUZGTEdkQ1FVRkZMR1ZCUTJwbU8wRkJRV01zWjBKQlFVVXNVMEZCVHl4TlFVRkpPMEZCUVVNc2RVSkJRVXNzUlVGQlJTeFZRVUZSTEV0QlFVY3NSVUZCUlN4VlFVRlJMRVZCUVVVc1YwRkJVeXhGUVVGRkxFVkJRVVVzVVVGQlVTeEpRVUZGTEVWQlFVVTdRVUZCUVN4alFVRkRPMEZCUVVVc1owSkJRVVVzVlVGQlVUdEJRVUZGTEdkQ1FVRkZMRXRCUVVzc1NVRkJTVHRCUVVGQkxGbEJRVU03UVVGQlJTeGpRVUZKTEV0QlFVY3NSVUZCUlN4VFFVRlBMRkZCUVZFc1NVRkJTU3hMUVVGTExFOUJRVThzUjBGQlJTeEpRVUZGTEVWQlFVVXNXVUZCVlN4UlFVRlJMRTFCUVUwc1MwRkJTeXhQUVVGUE8wRkJRVVVzYVVKQlFVOHNUMEZCVHl4SFFVRkZMRU5CUVVNN1FVRkJSU3hqUVVGRk8wRkJRVXNzV1VGQlJTeG5Ra0ZCWXl4SlFVRkZMRVZCUVVVN1FVRkJZU3hqUVVGSk8wRkJRVVVzV1VGQlJTeGxRVUZoTEVsQlFVVXNSVUZCUlR0QlFVRlpMR05CUVVrc1owSkJRV01zUlVGQlJTeHBRa0ZCWlR0QlFVRkhMSE5DUVVGVkxFOUJRVThzWlVGQllTeEZRVUZGTEdsRFFVRnBRenRCUVVGRkxHTkJRVWtzUjBGQlJTeEhRVUZGTEV0QlFVY3NUMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVOcVlTeHRRa0ZCVXl4TFFVRkpPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVOHNZMEZCUlN4UlFVRk5MRWxCUVVVc1NVRkJTU3hWUVVGVkxFTkJRVU03UVVGQlJTeGpRVUZGTEZOQlFVOHNTVUZCU1N4WFFVRlhMRU5CUVVNN1FVRkJSU3hqUVVGRkxGTkJRVThzU1VGQlJTeEpRVUZKTEZkQlFWY3NRMEZCUXp0QlFVRkZMR05CUVVVc1UwRkJUeXhKUVVGRkxFbEJRVWtzVjBGQlZ5eERRVUZETzBGQlFVVXNZMEZCUlN4VlFVRlJMRWxCUVVrc1dVRkJXU3hEUVVGRE8wRkJRVVVzWTBGQlJTeFZRVUZSTEVsQlFVVXNTVUZCU1N4WlFVRlpMRU5CUVVNN1FVRkJSU3hqUVVGRkxGVkJRVkVzU1VGQlNTeGhRVUZoTEVOQlFVTTdRVUZCUlN4alFVRkZMRlZCUVZFc1NVRkJTU3hoUVVGaExFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNZMEZCU1N4TFFVRkhMRU5CUVVNc1IwRkJSU3hMUVVGSExFTkJRVU1zUjBGQlJTeExRVUZITEVOQlFVTTdRVUZCUlN4dFFrRkJVeXhMUVVGSk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZMRTlCUVU4c1RVRkJUVHRCUVVGRkxHVkJRVWNzVVVGQlVTeERRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMR05CUVVrc1NVRkJSU3hIUVVGRkxFbEJRVVVzVFVGQlN5eEpRVUZGTzBGQlF5OVdMRzFDUVVGVExFVkJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkhMRVZCUVVVN1FVRkJVU3huUWtGQlJTeFJRVUZSTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hoUVVGWExFbEJRVVU3UVVGQlNTeGpRVUZGTEVOQlFVTTdRVUZCUlN4cFFrRkJSenRCUVVGSExHZENRVUZGTEVsQlFVa3NXVUZCV1N4aFFVRmhMRWxCUVVVc01FTkJRVEJETzBGQlFVVXNZMEZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVTA3UVVGQlFTeFZRVUZGTzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zYlVKQlFVOHNSVUZCUlN4WFFVRlhMSFZEUVVGMVF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4alFVRkpPMEZCUVVVc1kwRkJSVHRCUVVFNFFpeGpRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVVN1FVRkJReXhuUWtGQlNTeExRVUZITzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hoUVVGWExFVkJRVVVzVjBGQlZ5eEpRVUZITEVOQlFVTXNTVUZCUlN4SlFVRkZPMEZCUVVFc1ZVRkJSVHRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2RDUVVGSExFdEJRVWNzUzBGQlJ6dEJRVUZGTEhGQ1FVRlBMRWxCUVVrc1YwRkJWeXhEUVVGRE8wRkJRVVVzWjBKQlFVYzdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCU3p0QlFVRkJMRlZCUVd0RU8wRkJRM3BqTEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHZENRVUZITEVOQlFVTXNUVUZCU1N4TlFVRkpMRWxCUVVjN1FVRkJReXhyUWtGQlJ5eGpRVUZaTEU5QlFVOHNVMEZCVHl4RFFVRkRMRVZCUVVVc1YwRkJWeXhUUVVGVE8wRkJRVVVzZFVKQlFVOHNUVUZCVFN4SFFVRkZMRVZCUVVNc1lVRkJXU3hqUVVGaExFTkJRVU1zUlVGQlJTeExRVUZMTEU5QlFVYzdRVUZCUXl4elFrRkJSeXhEUVVGRExFVkJRVVU3UVVGQlJ5d3dRa0ZCU3l4NVEwRkJkVU1zU1VGQlJUdEJRVUZKTEhsQ1FVRlBMRVZCUVVVc1dVRkJXVHRCUVVGQkxHZENRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRTFCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGQlJTeHJRa0ZCUnp0QlFVRkZMSFZDUVVGUExFbEJRVWtzVVVGQlVTeERRVUZETEVkQlFVVXNUVUZCU1R0QlFVRkRMRzlDUVVGRkxFZEJRVVVzVDBGQlJ5eEZRVUZGTEVsQlFVa3NWMEZCVnl4RFFVRkRMRU5CUVVNc1IwRkJSU3hEUVVGRE8wRkJRVUVzWjBKQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJReXh0UWtGQlR5eFJRVUZSTEZGQlFWRXNSVUZCUlN4TFFVRkxMRTFCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEcxQ1FVRlBMRWRCUVVjc1EwRkJReXhGUVVGRkxFdEJRVXNzVDBGQlJ5eFpRVUZaTEZsQlFWa3NSMEZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFOUJRVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NSMEZCUlN4UFFVRkhPMEZCUVVNc1owSkJRVVVzTkVOQlFUQkRMRU5CUVVNN1FVRkJSU3huUWtGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVNeFpTeHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVTdRVUZCUlN4dFFrRkJUeXhMUVVGSExHTkJRVmtzVDBGQlR5eFpRVUZaTEhkQ1FVRnpRaXhIUVVGSExFTkJRVU1zUzBGQlJ5eEZRVUZGTEZkQlFWY3NVMEZCVXl4TFFVRkhMRTFCUVVrc1kwRkJXU3hQUVVGUExGRkJRVTBzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXl4SlFVRkZMRTFCUVUwc1IwRkJSU3hGUVVGRExHRkJRVmtzWTBGQllTeERRVUZETEVWQlFVVXNTMEZCU3l4UFFVRkhMRmxCUVZrc2NVSkJRWEZDTEVkQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1IwRkJSU3hUUVVGVExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4dlEwRkJhME1zUTBGQlF6dEJRVUZGTEdkQ1FVRkZMREpEUVVFeVF6dEJRVUZGTEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEVOQlFVTXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXhqUVVGSkxFZEJRVVVzU1VGQlJTeFBRVUZITzBGQlFVTXNiVUpCUVVzc1NVRkJSU3hGUVVGRk8wRkJRVkVzWjBKQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRM2hhTEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHbENRVUZMTEV0QlFVY3NTVUZCUlR0QlFVRkhMR2xDUVVGTExFdEJRVWNzVTBGQlV5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1MwRkJTeXhMUVVGSExFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVTdRVUZCUVN4WlFVRkRPMEZCUVVVc2FVSkJRVXNzUzBGQlJ5eFRRVUZUTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hMUVVGTExFdEJRVWNzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJSU3hwUWtGQlN5eExRVUZITEZOQlFWTXNSMEZCUlN4SFFVRkZPMEZCUVVNc2JVSkJRVXNzUjBGQlJ6dEJRVUZGTEcxQ1FVRkxMRWRCUVVjc1EwRkJRenRCUVVGRkxHMUNRVUZMTEVkQlFVY3NRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJSU3hwUWtGQlN5eExRVUZITEZkQlFWVTdRVUZCUXl4blFrRkJSU3hMUVVGTExFdEJRVWNzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRMjVPTEdOQlFVa3NTMEZCUnl4SFFVRkZMRXRCUVVjc1IwRkJSU3hMUVVGSExHVkJRV0VzVDBGQlR5eGpRVUZaTEVsQlFVa3NXVUZCV1N4TlFVRk5MRWxCUVVVc1VVRkJUeXhMUVVGSExFTkJRVU1zUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4dFFrRkJTenRCUVVGRkxHZENRVUZKTEVsQlFVVXNTVUZCUlR0QlFVRkZMR2xDUVVGSkxFbEJRVVVzUjBGQlJTeEZRVUZGTEVOQlFVTXNTMEZCUnl4RlFVRkZMRXRCUVVjN1FVRkJTU3huUWtGQlJUdEJRVUZGTEdkQ1FVRkhMRXRCUVVjc1NVRkJSU3hMUVVGSExFVkJRVVVzVlVGQlVUdEJRVUZITEhGQ1FVRlBMRWRCUVVjc1QwRkJUeXhGUVVGRkxGTkJRVk1zUjBGQlJTeERRVUZETEVOQlFVTTdRVUZCUlN4cFFrRkJTU3hKUVVGRkxFbEJRVWNzU1VGQlJTeExRVUZITzBGQlFVTXNhMEpCUVVrc1NVRkJSU3hGUVVGRkxFZEJRVWM3UVVGQlJTeHJRa0ZCUnl4SlFVRkZMRXRCUVVrN1FVRkJReXh2UWtGQlNTeEpRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkZPMEZCUVVjc2IwSkJRVWNzVVVGQlRTeEpRVUZGTzBGQlFVc3NkVUpCUVVjc1QwRkJUeXhqUVVGakxFbEJRVVVzVDBGQlN5eEpRVUZGTEVOQlFVTTdRVUZCUVN4eFFrRkJUVHRCUVVGRExITkNRVUZKTEVsQlFVVXNSVUZCUlN4SFFVRkhMRWxCUVVVN1FVRkJSeXh6UWtGQlJTeFJRVUZOTEVsQlFVVXNVVUZCVFN4SlFVRkZMRTlCUVVzc1MwRkJSeXhMUVVGSExFbEJRVVVzUzBGQlJ5eEpRVUZGTEUxQlFVa3NTMEZCUnl4TFFVRkhMRXRCUVVjc1MwRkJSeXhKUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZGTzBGQlFVY3NNRUpCUVUwc1NVRkJSU3hMUVVGSExFOUJRVThzWVVGQllTeERRVUZETEV0QlFVY3NTMEZCUnl4UFFVRk5MRXRCUVVjc1QwRkJUeXhoUVVGaExGRkJRVTBzUzBGQlJ5eEpRVUZITEZGQlFVMHNTVUZCUlN4SlFVRkpPMEZCUVVFc1owSkJRVVU3UVVGQlFTeGpRVUZETzBGQlFVMHNjVUpCUVVjc1QwRkJUeXhoUVVGaExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVTXNiVUpCUVU4N1FVRkJRU3hWUVVGRExFZEJRM2huUWl4SlFVRkZMRU5CUVVNc1IwRkJSU3hQUVVGTExFOUJRVXNzUzBGQlJ5eEhRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRMRWxCUVVVc1NVRkJSeXhKUVVGRkxFOUJRVWM3UVVGQlF5eHhRa0ZCVVN4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFbEJRVVVzUlVGQlJTeFJRVUZQTEVWQlFVVXNSMEZCUlR0QlFVRkRMR3RDUVVGSkxFbEJRVVVzUlVGQlJTeFhRVUZYTEVOQlFVTTdRVUZCUlN4eFFrRkJTeXhKUVVGRkxFMUJRVWtzVVVGQlRTeEpRVUZGTEV0QlFVY3NTVUZCUlN4VFFVRlBMRXRCUVVjc1UwRkJUeXhMUVVGSExFdEJRVWNzUjBGQlJTeEZRVUZGTEV0QlFVY3NTMEZCUnp0QlFVRkJMRmxCUVVNN1FVRkJReXh0UWtGQlR6dEJRVUZCTEZWQlFVTXNSMEZCUlN4SlFVRkZMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEcxQ1FVRkxPMEZCUVVVc1owSkJRVWNzUlVGQlJTeEpRVUZGTzBGQlFVY3NjVUpCUVU4N1FVRkJSU3huUWtGQlNTeEpRVUZGTzBGQlFVVXNaMEpCUVVVc1NVRkJSU3hKUVVGRk8wRkJRVVVzY1VKQlFWRXNTVUZCUlN4SFFVRkZMRWxCUVVVc1JVRkJSU3hSUVVGUExFVkJRVVVzUjBGQlJUdEJRVUZETEd0Q1FVRkpMRWxCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU03UVVGQlJTeHJRa0ZCUnl4VFFVRlBMRXRCUVVjc1UwRkJUeXhIUVVGRk8wRkJRVU1zYjBKQlFVa3NTVUZCUlN4RlFVRkZMRmRCUVZjc1JVRkJSU3hEUVVGRE8wRkJRVVVzYjBKQlFVVXNWVUZCVVN4SlFVRkZMRk5CUVU4c1RVRkJTU3hKUVVGRk8wRkJRVUVzWTBGQlNUdEJRVUZETEd0Q1FVRkhMRTlCUVVzc1IwRkJSVHRCUVVGRExHOUNRVUZITEV0QlFVYzdRVUZCUlR0QlFVRk5MR3RDUVVGRkxGRkJRVTBzUTBGQlF5eEpRVUZGTzBGQlFVRXNZMEZCUXl4UFFVRkxPMEZCUVVNc2IwSkJRVWNzVVVGQlRTeEhRVUZGTzBGQlFVTXNjMEpCUVVjc1NVRkJSU3hMUVVGSE8wRkJRVVU3UVVGQlRTeHZRa0ZCUlN4UlFVRk5MRU5CUVVNc1NVRkJSU3hOUVVGSkxFdEJRVWM3UVVGQlFTeG5Ra0ZCUXl4UFFVRkxPMEZCUVVNc2MwSkJRVWNzVTBGQlR5eEhRVUZGTzBGQlFVTXNkMEpCUVVjc1NVRkJSU3hMUVVGSE8wRkJRVVU3UVVGQlRTeHpRa0ZCUlN4UlFVRk5MRU5CUVVNc1NVRkJSU3hOUVVGSkxFdEJRVWM3UVVGQlFTeHJRa0ZCUlN4UFFVRkxPMEZCUVVNc2QwSkJRVWNzU1VGQlJTeExRVU51Wmp0QlFVRkZPMEZCUVUwc2MwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVXNUVUZCU1N4TFFVRkhPMEZCUVVjc2MwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVXNUVUZCU1N4TFFVRkhMRXRCUVVjN1FVRkJRU3hyUWtGQlJUdEJRVUZETEc5Q1FVRkZMRkZCUVUwc1EwRkJReXhKUVVGRkxFMUJRVWtzUzBGQlJ5eEpRVUZGTzBGQlFVRXNaMEpCUVVVN1FVRkJReXhyUWtGQlJTeFJRVUZOTEVOQlFVTXNTVUZCUlN4TlFVRkpMRWxCUVVVN1FVRkJRU3hqUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZETEdOQlFVVXNUVUZCU1N4RFFVRkRMRWxCUVVVN1FVRkJSU3h0UWtGQlR5eEpRVUZGTzBGQlFVRXNWVUZCUXl4SFFVRkZMRWxCUVVVc1QwRkJSeXhOUVVGSkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVsQlFVVXNUMEZCU3l4TlFVRkpMRWxCUVVVc1RVRkJTeXhMUVVGSExFTkJRVU1zUjBGQlJTeEpRVUZITEVsQlFVY3NTVUZCUnl4TFFVRkpMRXRCUVVrc1MwRkJTU3hMUVVGSkxFdEJRVWtzUzBGQlNTeExRVUZKTEVkQlFVY3NSMEZCUlN4TFFVRkhMRU5CUVVNc1IwRkJSU3hKUVVGSExFbEJRVWNzU1VGQlJ5eExRVUZKTEV0QlFVa3NTMEZCU1N4TFFVRkpMRXRCUVVrc1MwRkJTU3hMUVVGSkxFZEJRVWNzUjBGQlJTeExRVUZITEU5QlFVYzdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZGTEVkQlFVVXNTVUZCUlN4SFFVRkhMRU5CUVVNN1FVRkJSU3hwUWtGQlJ5eEZRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3h0UWtGQlR6dEJRVUZCTEZWQlFVTXNSMEZCUlN4SlFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFMUJRVWs3UVVGQlF5eG5Ra0ZCUnl4RFFVRkRMRWRCUVVVN1FVRkJReXhyUWtGQlNTeEpRVUZGTEVWQlFVTXNUVUZCU3l4WlFVRlhMRk5CUVZFc1dVRkJWeXhOUVVGTExFdEJRVWtzUzBGQlNTeExRVUZKTEUxQlFVc3NhMEpCUVdsQ0xFOUJRVTBzV1VGQlZTeFBRVUZQTEdGQlFWY3NWVUZCVlN4aFFVRlhMRlZCUVZVc1ZVRkJWU3hEUVVGRExFdEJRVWNzUzBGQlN6dEJRVUZCTEdkQ1FVRlJPMEZCUVVFc1owSkJRMnhtTzBGQlFVRXNZMEZCUnl4SlFVRkZMRlZCUVZNc1IwRkJSU3hMUVVGSExHbENRVUZuUWl4SFFVRkZPMEZCUVVVc2JVSkJRVWtzUzBGQlN6dEJRVUZGTERKQ1FVRlRMRVZCUVVVc1EwRkJReXhKUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVVc1JVRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVa3NTVUZCUlN4RFFVRkRPMEZCUVVVc2JVSkJRVWtzUzBGQlN6dEJRVUZGTEd0Q1FVRkZMRXRCUVVzc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlR0QlFVRkZMR3RDUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZETEcxQ1FVRlBPMEZCUVVFc1ZVRkJReXhIUVVGRkxFZEJRVVVzUzBGQlJ5eERRVUZETEUxQlFVc3NRMEZCUXl4SFFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRkxFdEJRVWNzUTBGQlF5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NSVUZCUlN4SFFVRkZMRXRCUVVjc1EwRkJReXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzUlVGQlJUdEJRVUZGTEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1NVRkJSU3hEUVVGRE8wRkJRVVVzWTBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RlFVRkZMRTFCUVUwN1FVRkJSU3h0UWtGQlR6dEJRVUZCTEZWQlFVTTdRVUZEYUZRc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc2NVSkJRVk1zUlVGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMRzFDUVVGSkxFbEJRVVVzV1VGQlZTeFBRVUZQTEVsQlFVVXNSVUZCUlN4VFFVRlRMRWxCUVVVc1MwRkJSeXhKUVVGSExFVkJRVVVzVTBGQlR6dEJRVUZITEc5Q1FVRkZMRVZCUVVVc1EwRkJReXhKUVVGRk8wRkJRVVVzY1VKQlFVODdRVUZCUVN4WlFVRkRPMEZCUVVNc2NVSkJRVk1zUlVGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4eFFrRkJUeXhGUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZITzBGQlFVRXNXVUZCUXp0QlFVRkRMSEZDUVVGVExFVkJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNkVUpCUVZNc1JVRkJSU3hKUVVGSE8wRkJRVU1zZFVKQlFVOHNTVUZCUlN4TFFVRkhMRXRCUVVjc1NVRkJSU3hMUVVGSExFbEJRVVU3UVVGQlFTeGpRVUZETzBGQlFVTXNhMEpCUVVrN1FVRkJSU3h4UWtGQlN5eEpRVUZGTEVWQlFVVXNSVUZCUlN4WlFVRlpMRWxCUVVVc1JVRkJSU3haUVVGWkxFTkJRVU1zVFVGQlNTeFBRVUZMTEVsQlFVVXNSVUZCUlN4RlFVRkZMRk5CUVZNc1NVRkJSU3hGUVVGRkxGTkJRVk1zUTBGQlF5eFBRVUZMTEVsQlFVVXNSVUZCUlN4RlFVRkZMRkZCUVZFc1NVRkJSU3hGUVVGRkxGRkJRVkVzUTBGQlF6dEJRVUZITEhGQ1FVRlBPMEZCUVVFc1dVRkJRenRCUVVGRExIRkNRVUZUTEVWQlFVVXNSMEZCUlR0QlFVRkRMSE5DUVVGUExFVkJRVVVzVDBGQlR5eEhRVUZGTzBGQlFVRXNaMEpCUVVNc1MwRkJTenRCUVVGRkxIbENRVUZQTEVsQlFVa3NTMEZCU3l4RlFVRkZMRmxCUVZrc1NVRkJSU3hIUVVGRkxFbEJRVWNzUlVGQlJUdEJRVUZCTEdkQ1FVRkZMRXRCUVVzN1FVRkJSU3g1UWtGQlR6dEJRVUZCTEdkQ1FVRkZMRXRCUVVzN1FVRkJSU3g1UWtGQlR5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzWjBKQlFVVXNTMEZCU3p0QlFVRkZMSGxDUVVGUExFbEJRVWs3UVVGQlFTeHZRa0ZCU3l4RlFVRkZMRmxCUVZrN1FVRkJRU3h2UWtGRE5XWTdRVUZCUVN4dlFrRkJSVHRCUVVGQkxHdENRVUZETzBGQlFVRXNaMEpCUVVVc1MwRkJTenRCUVVGRkxIbENRVUZQTEVsQlFVa3NTMEZCU3l4RlFVRkZMRmxCUVZrc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVThzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SlFVRkZMRWRCUVVVc1NVRkJSeXhGUVVGRk8wRkJRVUVzWjBKQlFVVXNTMEZCU3p0QlFVRkZMSGxDUVVGUExFbEJRVWtzUzBGQlN5eEZRVUZGTEZsQlFWa3NTVUZCUlN4SFFVRkZMRWxCUVVjc1JVRkJSVHRCUVVGQkxHTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVTXNjVUpCUVZNc1JVRkJSU3hIUVVGRk8wRkJRVU1zYTBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVjc2JVSkJRVWtzU1VGQlJTeEpRVUZKTEV0QlFVMHNTVUZCU1N4TFFVRkxMRVZCUVVVc1MwRkJSeXhOUVVGTExFZEJRVVVzUTBGQlF5eEZRVUZITEZGQlFWRXNRMEZCUXl4SFFVRkZMRWxCUVVVc1MwRkJSenRCUVVGRExHOUNRVUZKTEVsQlFVVXNSVUZCUlN4VFFVRlRMRWRCUVVVc1MwRkJSeXhGUVVGRkxFVkJRVVVzV1VGQldTeERRVUZETEVsQlFVVXNTMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkJSU3h2UWtGQlJ5eEpRVUZGTEVsQlFVVXNSVUZCUlN4UlFVRlJPMEZCUVVVc2RVSkJRVWNzU1VGQlJTeEZRVUZGTEZGQlFWRXNTVUZCUlN4SFFVRkZMRVZCUVVVc1VVRkJVU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEpRVUZGTEVWQlFVVXNVMEZCVXl4SlFVRkZMRU5CUVVNc1MwRkJSeXhGUVVGRkxGTkJRVk1zUTBGQlF5eEhRVUZGTEVWQlFVVXNXVUZCV1N4RlFVRkZMRmxCUVZrc1NVRkJSU3hEUVVGRE8wRkJRVUVzY1VKQlFVODdRVUZCUXl4dlFrRkJSU3hSUVVGUkxFVkJRVVVzVVVGQlVTeEpRVUZGTEVOQlFVTTdRVUZCUlR0QlFVRkJMR2RDUVVGTE8wRkJRVUVzWTBGQlF6dEJRVUZETEd0Q1FVRkZMRWxCUVVrc1MwRkJTeXhGUVVGRkxGbEJRVmtzU1VGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGRkxFVkJRVVVzU1VGQlNUdEJRVUZCTEdkQ1FVRkxMRVZCUVVVc1dVRkJXVHRCUVVGQkxHZENRVU51Wmp0QlFVRkJMR2RDUVVGRk8wRkJRVUVzWTBGQlF5eERRVUZETzBGQlFVVXNhMEpCUVVVc1JVRkJSU3hEUVVGRE8wRkJRVVVzY1VKQlFVOHNTMEZCUnl4RlFVRkZMRWRCUVVVc1EwRkJReXhKUVVGRkxFdEJRVWNzUlVGQlJTeEhRVUZGTEVOQlFVTXNTVUZCUlN4RlFVRkZMRmxCUVZrc1NVRkJSU3hKUVVGRkxFVkJRVVVzV1VGQldTeEpRVUZGTEVWQlFVVXNXVUZCV1N4SlFVRkZPMEZCUVVFc1dVRkJRenRCUVVGRExHMUNRVUZMTzBGQlFVVXNiVUpCUVVzN1FVRkJSU3h0UWtGQlN6dEJRVUZGTEcxQ1FVRkxPMEZCUVVVc1owSkJRVWtzU1VGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNN1FVRkJSU3huUWtGQlJTeEZRVUZETEVsQlFVY3NSVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhIUVVGRkxFbEJRVWNzUlVGQlJTeEpRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSeXhGUVVGRkxFbEJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNSMEZCUlN4SlFVRkhMRVZCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEhRVUZGTEVsQlFVY3NSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJ5eEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1IwRkJSU3hKUVVGSExFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVjc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVkQlFVVXNTVUZCUnl4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZITEVWQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhIUVVGRkxFbEJRVWNzU1VGQlJTeEZRVUZGTEVOQlFVTXNTVUZCUlN4SFFVRkZPMEZCUVVVc1owSkJRVVVzUlVGQlJTeERRVUZETzBGQlFVVXNaMEpCUVVVN1FVRkJRU3hqUVVGRExFMUJRVXM3UVVGQlFTeGpRVUYxUWl4TlFVRkxPMEZCUVVFc1kwRkJWeXhOUVVGTE8wRkJRVUVzWTBGQlZ5eE5RVUZMTzBGQlFVRXNZMEZCU3l4TlFVRkxPMEZCUVVFc1kwRkJZeXhOUVVGTE8wRkJRVUVzWTBGQlVTeE5RVUZMTzBGQlFVRXNZMEZCVnl4TlFVRkxPMEZCUVVFc1kwRkJWeXhOUVVGTE8wRkJRVUVzWTBGQlZ5eFBRVUZOTzBGQlFVRXNZMEZEYm1Zc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFWY3NUMEZCVFR0QlFVRkJMR05CUVZjc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMRmxCUVVrN1FVRkJSU3h4UWtGQlVTeExRVUZMTzBGQlFVVXNhMEpCUVVVc1JVRkJSU3hSUVVGUkxFbEJRVWtzVDBGQlR5eEhRVUZGTEVkQlFVY3NSMEZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVGRkxHZENRVUZKTEV0QlFVY3NNa1JCUVRKRUxFMUJRVTBzUjBGQlJ5eEhRVUZGTEV0QlFVY3NkMFpCUVhkR0xFMUJRVTBzUjBGQlJ6dEJRVUZGTEdkQ1FVRkZMRVZCUVVNc1RVRkJTeXhQUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVWQlFVVXNWVUZCVlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hOUVVGTExFOUJRVWNzUjBGQlJ5eEZRVUZGTEVWQlFVVXNSMEZCUlN4TlFVRkxMRTlCUTJ4bUxFZEJRVWNzUlVGQlJTeEZRVUZGTEVWQlFVVXNWVUZCVlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hOUVVGTExFOUJRVWNzUjBGQlJ5eEZRVUZGTEVWQlFVVXNSMEZCUlN4TlFVRkxMRTlCUVVjc1IwRkJSeXhGUVVGRkxFdEJRVWNzVVVGQlRTeE5RVUZKTEVkQlFVVXNRMEZCUXl4SFFVRkZMRTFCUVVzc1QwRkJSeXhGUVVGRkxFVkJRVVVzU1VGQlJ5eERRVUZETEVkQlFVVXNUVUZCU3l4UFFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGSExFZEJRVVVzUjBGQlJ5eEhRVUZGTEUxQlFVc3NUMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzVlVGQlZTeERRVUZETEVkQlFVVXNUVUZCU3l4UFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGRkxFMUJRVXNzVDBGQlJ5eEZRVUZGTEVWQlFVVXNTVUZCUnl4RFFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSE8wRkJRVU1zYTBKQlFVVXNSVUZCUlR0QlFVRkhMRzFDUVVGSExFbEJRVVVzU1VGQlJTeExRVUZITEV0QlFVY3NUVUZCU1N4TFFVRkhPMEZCUVVrc2NVSkJRVThzUlVGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSE8wRkJRVU1zZFVKQlFWRXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hMUVVGSExFVkJRVVVzUzBGQlJ5eEhRVUZGTEUxQlFVa3NSVUZCUlN4RlFVRkZMRXRCUVVjc1NVRkJTU3hKUVVGRkxFdEJRVWNzU1VGQlNTeEhRVUZITzBGQlFVVTdRVUZCUXl4eFFrRkJUeXhGUVVGRkxFVkJRVVVzUzBGQlJ5eEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzUlVGQlJTeExRVUZITEVkQlFVVXNRMEZCUXl4SFFVRkZMRTFCUVVzc1QwRkJSeXhGUVVGRkxFVkJRVVVzU1VGQlJ5eERRVUZETEVkQlFVVXNUVUZCU3l4TlFVRkpMRTFCUVVzc1RVRkJTeXhQUVVGSExFdEJRVWNzUlVGQlJTeE5RVUZKTEV0QlFVY3NSVUZCUlN4TFFVRkhMRTlCUVVzc1RVRkJTeXhOUVVGTExFOUJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVY3NRMEZCUXl4SFFVRkZMRTFCUVVzc1RVRkJTU3hMUVVGTExFMUJRVXNzVDBGQlJ5eEZRVUZGTEUxQlFVa3NSMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hMUVVGTExFOUJRVThzUlVGQlJTeExRVUZITEVsQlFVVXNSVUZCUlN4TlFVRkpMRU5CUVVNc1IwRkJSU3hEUVVGRExFZEJRVVVzVFVGQlN5eFBRVU55Wmp0QlFVRkRMR3RDUVVGSkxFbEJRVVVzUzBGQlN5eFBRVUZQTEVWQlFVVXNTMEZCUnl4TFFVRkhMRVZCUVVVc1MwRkJSeXhMUVVGSExFdEJRVWNzUTBGQlF6dEJRVUZGTEc5Q1FVRkpMRVZCUVVVc1MwRkJSeXhOUVVGSkxFVkJRVVVzUzBGQlJ5eExRVUZITEV0QlFVYzdRVUZCU1N4clFrRkJSenRCUVVGRkxITkNRVUZKTEUxQlFVa3NTMEZCUnl4RlFVRkZMRXRCUVVjc1RVRkJTU3hGUVVGRkxFMUJRVWtzUjBGQlJTeExRVUZITEV0QlFVY3NTMEZCUnl4TFFVRkhMRVZCUVVVc1JVRkJSU3hGUVVGRkxFMUJRVWtzU1VGQlJUdEJRVUZCTEcxQ1FVRlJPMEZCUVVNc2IwSkJRVVU3UVVGQlJ5eHZRa0ZCU1N4TFFVRkhMRVZCUVVVc1MwRkJSeXhKUVVGRkxFVkJRVVVzUzBGQlJ5eExRVUZITzBGQlFVVXNhVUpCUVVNc1MwRkJSeXhMUVVGSExFdEJRVWNzUzBGQlJ5eEZRVUZGTEVWQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1RVRkJTVHRCUVVGQkxHTkJRVWM3UVVGQlF5eHhRa0ZCVHl4RlFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zUjBGQlJTeE5RVUZMTEU5QlFVY3NSVUZCUlN4SlFVRkhMRTFCUVVzc1QwRkJSeXhGUVVGRkxFdEJRVXNzVDBGQlR5eEZRVUZGTEV0QlFVY3NTMEZCUnl4RlFVRkZMRXRCUVVjc1MwRkJSeXhMUVVGSExFTkJRVU1zUjBGQlJTeERRVUZETEVkQlFVVXNUVUZCU3l4UlFVRkpMRVZCUVVVc1MwRkJSeXhOUVVGTkxGTkJRVk1zUlVGQlJTeFZRVUZWTEVOQlFVTXNSMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hMUVVGSExFMUJRVXNzVFVGQlN5eFBRVUZITzBGQlFVTXNhMEpCUVVVc1JVRkJSVHRCUVVGSExHdENRVUZKTEVsQlFVVXNTMEZCUnp0QlFVRkZMR3RDUVVGRkxFdEJRVXNzU1VGQlNTeERRVUZETEVsQlFVVTdRVUZCUnl4elFrRkJUeXhKUVVGRkxFMUJRVWtzVDBGQlN5eFBRVUZQTEZWQlFWRXNTVUZCUlN4TFFVRkhMRTFCUVVrc1NVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeEZRVUZGTzBGQlFVRXNXVUZCUXl4SFFVRkZMRTFCUVVzc1QwRkJSeXhGUVVGRkxFbEJRVWNzVFVGQlN5eE5RVUZKTEVsQlFVYzdRVUZCUlN4blFrRkJSU3hGUVVGRkxGRkJRVkVzVDBGQlRTeE5RVUZWTzBGQlFVVXNhVUpCUVVrc1MwRkJTenRCUVVGRkxHZENRVUZGTEZOQlFWTXNRMEZCUXl4TlFVTnlaMElzU1VGQlJTeEZRVUZGTEZGQlFWRXNTVUZCU1N4UFFVRlBMRWRCUVVVc1IwRkJSeXhIUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVRkhMR2RDUVVGRkxFVkJRVVVzVVVGQlVTeFRRVUZSTEVkQlFVYzdRVUZCUlN4blFrRkJSU3hIUVVGSExFTkJRVU03UVVGQlJTeG5Ra0ZCUnl4RlFVRkZMRk5CUVU4N1FVRkJSU3h4UWtGQlR6dEJRVUZGTEdOQlFVVXNTVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJRenRCUVVGRkxHMUNRVUZQTEVWQlFVVXNVMEZCVHp0QlFVRkJMRlZCUVVNN1FVRkRha2tzWTBGQlNTeExRVUZITzBGQlFVRXNXVUZCUXl4SFFVRkZMRk5CUVZNc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHhRa0ZCU3p0QlFVRkZMR05CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUlVGQlJ5eEhRVUZITEUxQlFVa3NSMEZCUlN4TlFVRkpMRU5CUVVNN1FVRkJSU3h0UWtGQlJ6dEJRVUZGTzBGQlFVc3NiMEpCUVUwN1FVRkJRU3haUVVGSE8wRkJRVUVzV1VGQlJTeEhRVUZGTEZkQlFWVTdRVUZCUXl4eFFrRkJUenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVXNWMEZCVlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVjBGQlZUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWRCUVVVc1YwRkJWVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVXNWMEZCVlR0QlFVRkRMSEZDUVVGUE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNSMEZCUlN4WFFVRlZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeFhRVUZWTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1IwRkJSU3hYUVVGVk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNSMEZCUlN4WFFVRlZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeFhRVUZWTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1IwRkJSU3hYUVVGVk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNSMEZCUlN4WFFVRlZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeFhRVUZWTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVUVzV1VGQlJ5eEhRVUZGTEZOQlFWTXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhyUWtGQlJTeEpRVUZGTEZsQlFWVXNTVUZCUlN4VlFVRlJMRU5CUVVNc1EwRkJReXhMUVVGSExFMUJRVWtzUzBGQlJ5eGhRVUZYTEVsQlFVVTdRVUZCU1N4eFFrRkJTenRCUVVGRkxHdENRVUZGTEVsQlFVa3NTMEZCU3l4TlFVRkpMRU5CUVVNN1FVRkJSU3huUWtGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1kwRkJZenRCUVVGRkxHZENRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxHTkJRV003UVVGQlJTeG5Ra0ZCUlN4SlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFpRVUZaTzBGQlFVVXNaMEpCUVVVc1NVRkJSU3hOUVVGSkxFMUJRMnhtTEVOQlFVTXNTVUZCUlN4RlFVRkZMRmRCUVZjN1FVRkJSU3huUWtGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3haUVVGWk8wRkJRVVVzWjBKQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzWlVGQlpTeEpRVUZGTzBGQlFVc3NaMEpCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNWVUZCVlR0QlFVRkZMR2RDUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTMEZCUnl4RlFVRkZMRkZCUVZFc1NVRkJSU3hMUVVGTExFbEJRVWtzUlVGQlJTeGxRVUZsTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUzBGQlJ5eFJRVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1IwRkJSU3hUUVVGVExFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNhMEpCUVVVc1NVRkJSU3haUVVGVkxFbEJRVVVzVlVGQlVTeERRVUZETEVOQlFVTXNTMEZCUnl4TlFVRkpMRXRCUVVjc1lVRkJWeXhKUVVGRk8wRkJRVWtzY1VKQlFVczdRVUZCUlN4clFrRkJSU3hKUVVGSkxFdEJRVXNzVFVGQlNTeERRVUZETzBGQlFVVXNaMEpCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZkQlFWYzdRVUZCUlN4blFrRkJSU3hKUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4WFFVRlhPMEZCUVVVc1owSkJRVVVzU1VGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1UwRkJVenRCUVVGRkxHZENRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxGRkJRVkU3UVVGQlJTeG5Ra0ZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFRRVUZUTzBGQlFVVXNaMEpCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNXVUZCV1N4SlFVRkZPMEZCUVVzc1owSkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1QwRkJUenRCUVVGRkxHZENRVUZGTEVsQlFVVXNUVUZCU1N4TlFVTndaaXhEUVVGRExFdEJRVWNzUlVGQlJTeEZRVUZGTEZsQlFWa3NRMEZCUXl4SlFVRkZMRXRCUVVjc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eEpRVUZGTEVWQlFVVXNVVUZCVVN4SlFVRkZMRWxCUVVVN1FVRkJSU3huUWtGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hMUVVGSExFVkJRVVVzYTBKQlFXdENPMEZCUVVjc2EwSkJRVWNzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SFFVRkZMRWRCUVVVc1EwRkJReXhGUVVGSExHdENRVUZyUWp0QlFVRkZMR3RDUVVGSkxFbEJRVWNzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SFFVRkZMRWRCUVVVc1EwRkJReXhGUVVGSExHdENRVUZyUWp0QlFVRkZMR2RDUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTMEZCUnl4TFFVRkhMRXRCUVVjc1JVRkJSU3hyUWtGQmEwSXNTMEZCUnl4TFFVRkxMRWxCUVVrc1IwRkJSU3hEUVVGRExFdEJRVWM3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SFFVRkZMRk5CUVZNc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNhMEpCUVVrc1NVRkJSU3hKUVVGSkxFdEJRVXNzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1RVRkJTeXhGUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNSMEZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUjBGQlJTeEZRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1IwRkJSU3hGUVVGRkxFbEJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNSMEZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFZEJRVVVzUTBGQlF5eEhRVUZGTEVsQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJTeEZRVUZGTEd0Q1FVRnJRaXhIUVVGRkxFbEJRVWNzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SFFVRkZMRWRCUVVVc1EwRkJReXhGUVVGSExHdENRVUZyUWl4SFFVTndaaXhKUVVGSExFbEJRVWtzUzBGQlN5eEZRVUZGTEZsQlFWa3NSMEZCUlN4SFFVRkZMRU5CUVVNc1JVRkJSeXhyUWtGQmEwSXNSMEZCUlN4SlFVRkZMRXRCUVVzc1NVRkJTU3hIUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUlN4SlFVRkZMRVZCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEU5QlFVOHNTMEZCUnl4TFFVRkhMRXRCUVVjc1EwRkJReXhKUVVGRkxFbEJRVVVzVFVGQlNTeExRVUZITEU5QlFVc3NTVUZCUlN4TFFVRkxMRWxCUVVrc1IwRkJSU3hEUVVGRExFZEJRVVVzUlVGQlJTeFJRVUZSTEVWQlFVVXNVVUZCVVN4SlFVRkZMRkZCUVUwc1NVRkJSU3hKUVVGRkxFbEJRVVVzUzBGQlJ5eEZRVUZGTzBGQlFVY3NaMEpCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNUMEZCVHp0QlFVRkZMR2RDUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTMEZCUnl4RlFVRkZMRVZCUVVVc1dVRkJXU3hEUVVGRExFbEJRVVVzUzBGQlJ5eEpRVUZKTEVWQlFVVXNVMEZCVXl4RFFVRkRMRWxCUVVVc1JVRkJSU3hSUVVGUkxFbEJRVVVzU1VGQlJUdEJRVUZGTEdkQ1FVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFhRVUZYTzBGQlFVVXNaMEpCUVVVc1NVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNWMEZCVnp0QlFVRkZMR2RDUVVGRkxFbEJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMRk5CUVZNN1FVRkJSU3huUWtGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hSUVVGUk8wRkJRVVVzWjBKQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVTBGQlV6dEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZGQlFWRTdRVUZCUlN4clFrRkJSU3hGUVVGRkxGRkJRVkVzU1VGQlJUdEJRVUZKTEhGQ1FVRlBMRWxCUVVrc1NVRkJSU3hIUVVGRkxFdEJRVWNzUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SlFVRkZMRWxCUVVVc1NVRkJSU3hEUVVGRExFdEJRVXNzVFVGQlRTeEpRVU0xWml4VlFVRlZMRTFCUVVrc1NVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEUxQlFVMHNTVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhOUVVGSkxFMUJRVWtzVlVGQlZTeE5RVUZKTEVsQlFVVXNSVUZCUlN4SFFVRkZMRTFCUVVrN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEhRVUZGTEZkQlFWVTdRVUZCUXl4eFFrRkJUVHRCUVVGQkxGbEJRVWM3UVVGQlFTeFpRVUZGTEVkQlFVVXNWMEZCVlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVTBGQlV5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSFZDUVVGVExFVkJRVVVzUjBGQlJUdEJRVUZETEhkQ1FVRlBMRWxCUVVVc1JVRkJSU3hoUVVGaExFVkJRVVVzVFVGQlRTeHRRa0ZCYlVJc1MwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlJUdEJRVUZCTEdOQlFVczdRVUZCUXl4eFFrRkJTenRCUVVGRkxHdENRVUZKTEV0QlFVY3NiMEpCUVVrc1VVRkJUU3haUVVGWkxFZEJRVVVzU1VGQlJTeEpRVUZKTEV0QlFVc3NSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hKUVVGRkxFbEJRVWtzUzBGQlN5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGRkxFVkJRVVVzYTBKQlFXdENPMEZCUVVVc2EwSkJRVWtzU1VGQlJTeEZRVUZGTEd0Q1FVRnJRanRCUVVGRkxHZENRVUZGTEUxQlFVa3NTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hMUVVGSExFdEJRVXNzU1VGQlNTeEhRVUZGTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hOUVVGSkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNUMEZCVHl4TFFVRkhMRU5CUVVNN1FVRkJSU3hyUWtGQlJTeEZRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUlN4SFFVRkhMRU5CUVVNN1FVRkJSU3hyUWtGQlJTeEhRVUZITEVOQlFVTTdRVUZCUlN4clFrRkJSU3hMUVVGSExFVkJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlN4SFFVRkZMRVZCUVVVc1NVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTEUxQlFVa3NSVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhKUVVGRkxFZEJRVVVzUlVGQlJTeEpRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hGUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlF6Rm1MRWRCUVVVc1YwRkJWVHRCUVVGRExIRkNRVUZQTEV0QlFVc3NTVUZCU1R0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVjBGQlZUdEJRVUZETEhGQ1FVRlBPMEZCUVVFc1dVRkJWVHRCUVVGQkxGbEJRVVVzUjBGQlJTeE5RVUZKTEZsQlFWa3NTVUZCU1R0QlFVRkJMRmxCUVVVc1IwRkJSU3hUUVVGVExFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNjVUpCUVVzN1FVRkJSU3h4UWtGQlR5eEZRVUZGTEZkQlFWY3NUVUZCU1N4TlFVRkpMRWRCUVVVc1RVRkJTU3hIUVVGRkxFdEJRVWNzVFVGQlNTeFBRVUZMTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hIUVVGRkxGTkJRVk1zUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc2EwSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVOHNhMEpCUVVjc1lVRkJWenRCUVVGRkxIVkNRVUZOTzBGQlFVY3NkVUpCUVZFc1NVRkJSU3hIUVVGRkxFdEJRVWNzUjBGQlJTeExRVUZITEVkQlFVVTdRVUZCUXl4dlFrRkJTU3hKUVVGRkxFdEJRVWNzU1VGQlJTeE5RVUZITzBGQlFVY3NiMEpCUVVVc1MwRkJTeXhKUVVGSkxFZEJRVVVzU1VGQlJTeFRRVUZUTzBGQlFVVXNiMEpCUVVrc1NVRkJSVHRCUVVGTExHOUNRVUZGTEV0QlFVc3NTVUZCU1N4SFFVRkZMRU5CUVVNN1FVRkJSU3h0UWtGQlJUdEJRVUZETEhOQ1FVRkZMRVZCUVVVc1NVRkJTU3hMUVVGTExFZEJRVVVzV1VGQlZ5eExRVUZITEZGQlFVMHNTVUZCUlN4VFFVRlBMRXRCUVVzc1NVRkJSU3hGUVVGRkxFOUJRVThzWVVGQlZ5eFZRVUZSTzBGQlFVY3NjMEpCUVVjN1FVRkJReXh6UWtGQlJTeExRVUZMTEVOQlFVTTdRVUZCUlN4MVFrRkJSenRCUVVGRkxIZENRVUZKTEVsQlFVVTdRVUZCUlN3d1FrRkJUVHRCUVVGQkxHdENRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkJMR3RDUVVGRE8wRkJRVU1zYzBKQlFVVTdRVUZCUVN4blFrRkJUVHRCUVVGRExHOUNRVUZITzBGQlFVVXNlVUpCUVUwN1FVRkJRU3hqUVVGRk8wRkJRVU1zY1VKQlFVMDdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSU3hIUVVGRkxGTkJRVk1zUjBGQlJTeEhRVUZGTzBGQlFVTXNjVUpCUTJ4bU8wRkJRVVVzY1VKQlFVczdRVUZCUlN4clFrRkJTU3hKUVVGRk8wRkJRVVVzYVVKQlFVY3NSVUZCUlN4UlFVRlJMRk5CUVZNc1IwRkJSU3hIUVVGRk8wRkJRVU1zYjBKQlFVa3NTVUZCUlN4SlFVRkZPMEZCUVVVc2IwSkJRVVVzUlVGQlJTeEpRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGRkxIRkNRVUZKTEVsQlFVVXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUeXhGUVVGRk8wRkJRVVVzYjBKQlFVVXNUMEZCU3l4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxGZEJRVmNzUTBGQlF6dEJRVUZGTEd0Q1FVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlJTeHhRa0ZCUnl4RlFVRkZMRk5CUVU4N1FVRkJRU3hqUVVGRExFTkJRVU03UVVGQlJTeHhRa0ZCVHp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVTBGQlV5eEhRVUZGTEVkQlFVVTdRVUZCUXl4eFFrRkJTenRCUVVGRkxIRkNRVUZMTzBGQlFVVXNhMEpCUVVrc1NVRkJSU3hIUVVGSE8wRkJRVVVzWjBKQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRk8wRkJRVThzYTBKQlFVa3NTVUZCUlR0QlFVRkZMR2RDUVVGRkxGRkJRVkVzVTBGQlV5eEhRVUZGTzBGQlFVTXNjVUpCUVVjc1JVRkJSU3hUUVVGUE8wRkJRVUVzWTBGQlF5eERRVUZETzBGQlFVVXNaMEpCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zU1VGQlJUdEJRVUZGTEhGQ1FVRlBPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVRXNXVUZCUnl4SFFVRkZMRmRCUVZVN1FVRkJReXh4UWtGQlR6dEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZMRWRCUVVVc1YwRkJWVHRCUVVGRExIRkNRVUZQTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVc1IwRkJSU3hUUVVGVExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4eFFrRkJTenRCUVVGRkxIRkNRVUZMTzBGQlFVVXNjVUpCUVVzN1FVRkJSU3gxUWtGQlVTeEpRVUZGTEVkQlFVVXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hMUVVGSk8wRkJRVU1zYjBKQlFVa3NTVUZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJTeEZRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNN1FVRkJSU3h4UWtGQlJ6dEJRVUZGTEhsQ1FVRlJMRWxCUVVVc1IwRkJSU3hKUVVGRkxFZEJRVVVzUzBGQlNUdEJRVUZETEhOQ1FVRkpMRWxCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzUTBGQlF5eEhRVUZGTEVsQlEyNW1MRWRCUVVjc1EwRkJRenRCUVVGRkxIZENRVUZKTEV0QlFVY3NUMEZCU3l4TlFVRkpMRTFCUVVrc1NVRkJSU3hMUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkZMRVZCUVVVc1UwRkJUeXhMUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETzBGQlFVRXNaMEpCUVVNN1FVRkJReXh4UWtGQlJ6dEJRVUZCTEdOQlFVTTdRVUZCUXl4blFrRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVVXNjVUpCUVU4N1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEhRVUZGTzBGQlFVRXNXVUZCUnl4SFFVRkZMRk5CUVZNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhGQ1FVRlBMRWRCUVVjc1RVRkJTU3hIUVVGRkxFMUJRVWtzUjBGQlJTeE5RVUZKTEVkQlFVVXNUVUZCU1N4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRE1Vb3NWMEZCUXl4WFFVRlZPMEZCUVVNc2NVSkJRVk1zUlVGQlJTeEhRVUZGTzBGQlFVTXNhMEpCUVVVc1JVRkJSVHRCUVVGUkxHdENRVUZGTEVsQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc2EwSkJRVVVzUlVGQlJUdEJRVUZGTEdsQ1FVRkhPMEZCUVVVc2FVSkJRVWNzVVVGQlVTeEZRVUZGTEVOQlFVTTdRVUZCUlR0QlFVRkpMR2RDUVVGRkxEQkNRVUYzUWl4RlFVRkZMSFZDUVVGMVFpeERRVUZETzBGQlFVVXNhMEpCUVVjc1MwRkJSeXhOUVVGSkxGTkJRVThzVFVGQlNTeGpRVUZqTEVOQlFVTXNSMEZCUlN4SlFVRkZMRTlCUVUwc1NVRkJSenRCUVVGRExHOUNRVUZKTEVsQlFVVTdRVUZCUlN4dlFrRkJSVHRCUVVGTExHdENRVUZGTzBGQlFVRXNZMEZCUXp0QlFVRkRMSEZDUVVGUE8wRkJRVUVzV1VGQlF6dEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJReXhIUVVGRkxFZEJRVVU3UVVGQlJUdEJRVUZKTEdOQlFVVXNNRUpCUVhkQ0xFVkJRVVVzZFVKQlFYVkNMRU5CUVVNN1FVRkJSU3huUWtGQlJ5eEZRVUZGTzBGQlFXZENMR3RDUVVGSE8wRkJRVU1zZFVKQlFVOHNSVUZCUlN4blFrRkJaMElzUjBGQlJTeERRVUZETzBGQlFVRXNZMEZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhyUWtGQlJTeDNSRUZCYzBRc1EwRkJReXhIUVVGRkxFVkJRVVVzUTBGQlF6dEJRVUZCTEdOQlFVTTdRVUZCUXl4bFFVRkhMRWRCUVVVc1UwRkJVeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNSVUZCUlN4UlFVRlJPMEZCUVVFc1dVRkJReXhEUVVGRExFVkJRVVVzVFVGQlRTeERRVUZETzBGQlFVVXNiVUpCUVUwc1EwRkJRenRCUVVGQkxGVkJRVU1zUjBGQlJ6dEJRVU12WXl4WlFVRkZMRmRCUVZNc1EwRkJReXhIUVVGRkxFOUJRVXNzUlVGQlJTeFhRVUZUTEVWQlFVVXNSMEZCUnl4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxHMUNRVUZwUWl4RFFVRkRMRWRCUVVVc1QwRkJTeXhGUVVGRkxHMUNRVUZwUWl4RlFVRkZMRWRCUVVjc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTd3lRa0ZCZVVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzTWtKQlFYbENMRVZCUVVVc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTdzRRa0ZCTkVJc1EwRkJReXhIUVVGRkxFOUJRVXNzUlVGQlJTdzRRa0ZCTkVJc1JVRkJSU3hIUVVGSExFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNLMEpCUVRaQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN3clFrRkJOa0lzUlVGQlJTeEhRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc1dVRkJSU3cwUWtGQk1FSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxEUkNRVUV3UWl4RlFVRkZMRWRCUVVjc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTERSQ1FVRXdRaXhSUVVGSkxFVkJRVVVzTkVKQlFUQkNMRVZCUVVVc1IwRkJSeXhEUVVGRE8wRkJRekZtTEZsQlFVVXNiMEpCUVd0Q0xFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4dlFrRkJhMElzUlVGQlJTeEhRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc1dVRkJSU3h4UWtGQmJVSXNVVUZCU1N4RlFVRkZMSEZDUVVGdFFpeEZRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkZMRmxCUVVVc01FSkJRWGRDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3d3UWtGQmQwSXNSVUZCUlN4SFFVRkhMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeHRRa0ZCYVVJc1EwRkJReXhIUVVGRkxFOUJRVXNzUlVGQlJTeHRRa0ZCYVVJc1JVRkJSU3hIUVVGSExFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNiMEpCUVd0Q0xFTkJRVU1zUjBGQlJTeFBRVUZMTEVWQlFVVXNiMEpCUVd0Q0xFVkJRVVVzUjBGQlJ5eEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMRmRCUVZNc1VVRkJTU3hGUVVGRkxGZEJRVk1zUlVGQlJTeEhRVUZITEVOQlFVTTdRVUZCUlN4WlFVRkZMRzFDUVVGcFFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzYlVKQlFXbENMRVZCUVVVc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc2IwSkJRV3RDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzYjBKQlFXdENMRVZCUVVVc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZET1dRc1dVRkJSU3h2UWtGQmEwSXNVVUZCU1N4RlFVRkZMRzlDUVVGclFpeEZRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkZMRmxCUVVVc2RVSkJRWEZDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxIVkNRVUZ4UWl4RlFVRkZMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNkMEpCUVhOQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4M1FrRkJjMElzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc1dVRkJSU3gzUWtGQmMwSXNVVUZCU1N4RlFVRkZMSGRDUVVGelFpeEZRVUZGTEVsQlFVa3NRMEZCUXp0QlFVRkZMRmxCUVVVc2IwSkJRV3RDTEZGQlFVa3NSVUZCUlN4dlFrRkJhMElzUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZCUlN4WlFVRkZMR2RDUVVGakxFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4blFrRkJZeXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMR2xDUVVGbExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4RlFVRkZMR2xDUVVGbExFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc1dVRkJSU3gzUWtGQmMwSXNVVUZCU1N4RlFVRkZMSGRDUVVGelFpeEZRVUZGTEVsQlFVa3NRMEZCUXp0QlFVTndaU3haUVVGRkxIRkNRVUZ0UWl4UlFVRkpMRVZCUVVVc2NVSkJRVzFDTEVWQlFVVXNTVUZCU1N4RFFVRkRPMEZCUVVVc1dVRkJSU3h4UWtGQmJVSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUlVGQlJTeHhRa0ZCYlVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc1ZVRkJVU3hEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxGVkJRVkVzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNiVUpCUVdsQ0xGRkJRVWtzUlVGQlJTeHRRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFTkJRVU03UVVGQlJTeFpRVUZGTERaQ1FVRXlRaXhEUVVGRExFZEJRVVVzVDBGQlN5eEZRVUZGTERaQ1FVRXlRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4blEwRkJPRUlzVVVGQlNTeEZRVUZGTEdkRFFVRTRRaXhGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVUZGTEZsQlFVVXNORUpCUVRCQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzTkVKQlFUQkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkROMlVzV1VGQlJTdzBRa0ZCTUVJc1VVRkJTU3hGUVVGRkxEUkNRVUV3UWl4RlFVRkZMRWxCUVVrc1EwRkJRenRCUVVGRkxGbEJRVVVzTWtKQlFYbENMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN3eVFrRkJlVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTdzBRa0ZCTUVJc1EwRkJReXhIUVVGRkxFOUJRVXNzUlVGQlJTdzBRa0ZCTUVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNkVUpCUVhGQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3gxUWtGQmNVSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4blEwRkJPRUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNUMEZCU3l4RlFVRkZMR2REUVVFNFFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxIRkRRVUZ0UXl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUlVGQlJTeHhRMEZCYlVNc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZEY0dZc1dVRkJSU3gxUTBGQmNVTXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzZFVOQlFYRkRMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN3MlFrRkJNa0lzVVVGQlNTeEZRVUZGTERaQ1FVRXlRaXhGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVUZGTEdOQlFVa3NTMEZCUnl4RlFVRkZMRlZCUVZFc1VVRkJTU3hMUVVGSExFVkJRVVVzVlVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXp0QlFVRkZMRmxCUVVVc1VVRkJUU3hSUVVGSkxFVkJRVVVzVVVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXp0QlFVRkZMR05CUVVrc1MwRkJSeXhSUVVGSkxFdEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUlN4TFFVRkhMRTlCUVVzc1MwRkJSeXhGUVVGRkxFbEJRVWtzUjBGQlJTeExRVUZITEZGQlFVa3NTMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGRkxFdEJRVWNzVVVGQlNTeExRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRPMEZCUTNSVkxHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2RDUVVGRkxFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVVXNRMEZCUXp0QlFVRkZMR2RDUVVGSkxFbEJRVVVzVDBGQlJ5eE5RVUZKTEVWQlFVVXNUVUZCU1N4SFFVRkZMRWxCUVVVc1QwRkJSeXhQUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZKTzBGQlFVVXNZMEZCUlN4dFFrRkJhVUlzUlVGQlJTeEZRVUZGTEdkQ1FVRm5RanRCUVVGRkxHTkJRVVVzVTBGQlR5eEZRVUZGTEVWQlFVVXNUVUZCVFR0QlFVRkZMR05CUVVVc1dVRkJWU3hGUVVGRkxFVkJRVVVzVTBGQlV6dEJRVUZGTEdOQlFVVXNZVUZCVnl4RlFVRkZMRVZCUVVVc1ZVRkJWVHRCUVVGRkxHMUNRVUZQTzBGQlFVRXNWVUZCUXp0QlFVRkRMRmxCUVVVc1lVRkJWenRCUVVGSExGbEJRVVVzV1VGQlZUdEJRVUZITEZsQlFVVXNaVUZCWVR0QlFVRkhMRmxCUVVVc1pVRkJZVHRCUVVGRkxGbEJRVVVzWlVGQllTeERRVUZETEVkQlFVVXNSMEZCUlN4TlFVRkpMRVZCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNhMEpCUVdkQ08wRkJRVVVzWTBGQlNUdEJRVUZGTEdOQlFVVXNVMEZCVXl4TFFVRkpPMEZCUVVNc2FVSkJRVWNzUjBGQlJ6dEJRVUZGTEd0Q1FVRkpMRWxCUVVVN1FVRkJRU3hWUVVGSE8wRkJRekZYTEcxQ1FVRlRMRXRCUVVrN1FVRkJReXh4UWtGQlV5eEpRVUZITzBGQlFVTXNhMEpCUVVjc1EwRkJReXhOUVVGSkxFbEJRVVVzVFVGQlJ5eEZRVUZGTEZsQlFWVXNUVUZCUnl4RFFVRkRMRXRCUVVrN1FVRkJReXhyUWtGQlJTeEZRVUZGTzBGQlFVVXNhMEpCUVVVc1EwRkJRenRCUVVGRkxHOUNRVUZITEVWQlFVVTdRVUZCY1VJc2IwSkJRVVVzY1VKQlFYRkNPMEZCUVVVc2IwSkJRVWNzUlVGQlJUdEJRVUZSTEhWQ1FVRkpMR05CUVZrc1QwRkJUeXhGUVVGRkxGbEJRVlVzUlVGQlJTeFZRVUZSTEVOQlFVTXNSVUZCUlN4UFFVRlBMRWxCUVVjc1JVRkJSU3hSUVVGUkxGVkJRVkU3UVVGQlF5eDNRa0ZCU1N4SlFVRkZMRVZCUVVVc1VVRkJVU3hOUVVGTk8wRkJRVVVzZFVKQlFVY3NVVUZCVVN4RFFVRkRPMEZCUVVFc2EwSkJRVU03UVVGQlF5eHJRa0ZCUlN4RlFVRkZPMEZCUVVFc1kwRkJRenRCUVVGQkxGbEJRVU03UVVGQlF5eG5Ra0ZCUnl4RlFVRkZMRWxCUVVVc1NVRkJSenRCUVVGRExHdENRVUZITEVWQlFVVTdRVUZCVHl4eFFrRkJTU3hqUVVGWkxFOUJRVThzUlVGQlJTeFhRVUZUTEVWQlFVVXNVMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hKUVVGSExFVkJRVVVzVDBGQlR6dEJRVUZSTEhGQ1FVRkhPMEZCUVVVc1owSkJRVVVzUlVGQlJUdEJRVUZGTEd0Q1FVRkZMRTFCUVVrc1JVRkJSU3hoUVVGWExFVkJRVVVzVlVGQlZTeFpRVUZaTEVkQlFVVXNWMEZCVnl4WFFVRlZPMEZCUVVNc01rSkJRVmNzVjBGQlZUdEJRVUZETEc5Q1FVRkZMRlZCUVZVc1JVRkJSVHRCUVVGQkxHZENRVUZETEVkQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGRk8wRkJRVUVzWTBGQlF5eEhRVUZGTEVOQlFVTXNTMEZCUnl4RlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGVkJRVU03UVVGRGRtVXNZMEZCUnl4RlFVRkZPMEZCUVZFc2FVSkJRVWtzWTBGQldTeFBRVUZQTEVWQlFVVXNXVUZCVlN4RlFVRkZMRlZCUVZFc1EwRkJReXhGUVVGRkxFOUJRVThzU1VGQlJ5eEpRVUZGTEVWQlFVVXNVVUZCVVR0QlFVRlJMR2RDUVVGRkxGRkJRVkVzU1VGQlNTeEZRVUZGTzBGQlFVVXNZVUZCUnp0QlFVYzVSeXhwUWtGQlR5eFZRVUZWTzBGQlFVRXNVVUZEYmtJN1FVRkJRU3hOUVVkQkxFZEJRVWM3UVVGRFNDeFZRVUZKTEU5QlFVOHNXVUZCV1N4WlFVRlpMRTlCUVU4c1YwRkJWenRCUVVOdVJDeGxRVUZQTEZWQlFWVTdRVUZCUVN4bFFVTldMRTlCUVU4c1YwRkJWeXhqUVVGakxFOUJRVThzUzBGQlN6dEJRVU51UkN4bFFVRlBMRU5CUVVNc1IwRkJSeXhOUVVGTkxFOUJRVTg3UVVGQlFUdEJRVUZCT3pzN1FVTjJSREZDTzBGQlFVRTdRVUZCUVR0QlFVRkJPenM3UVVOQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVRzN08wRkRRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4TlFVRmhPMEZCUVdJN1FVRkJRVHRCUVVGUExFMUJRVTBzVDBGQlR6dEJRVUZCTzBGQlFVRTdPenRCUTBGd1FqdEJRVUZCTzBGQlFVRTdRVUZEUVN4VlFVRkpMRzFDUVVGdFFpeE5RVUZOTzBGQlF6TkNMRmxCUVVrc1lVRkJZU3hQUVVGUExHRkJRV0VzWlVGQlpTeFRRVUZUTEdkQ1FVRm5RaXhUUVVGVExHTkJRV01zVFVGQlRUdEJRVU14Unl4WlFVRkpMRTlCUVU4c1pVRkJaVHRCUVVGaExIVkNRVUZoTEdOQlFXTTdRVUZEYkVVc1pVRkRSaXhUUVVGVExGbEJRVmtzUTBGQlF5eEhRVUZITzBGQlJYcENMRzFDUVVGVExFdEJRVWs3UVVGQlF5eGpRVUZGTEZWQlFWRXNSVUZCUlN4VlFVRlJMRVZCUVVVN1FVRkJSU3h0UWtGQlR6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhKUVVGSE8wRkJRVU1zWTBGQlJTeFZRVUZSTEVWQlFVVXNWVUZCVVN4RlFVRkZPMEZCUVVVc2JVSkJRVTg3UVVGQlFTeFZRVUZGTzBGQlFVTXNiVUpCUVZNc1NVRkJSenRCUVVGRExHTkJRVVVzVlVGQlVTeEZRVUZGTEZWQlFWRXNSVUZCUlR0QlFVRkZMRzFDUVVGUE8wRkJRVUVzVlVGQlJUdEJRVUZETEcxQ1FVRlRMRWxCUVVjN1FVRkJReXhqUVVGRkxGVkJRVkVzUlVGQlJTeFZRVUZSTEVWQlFVVTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVVU3UVVGQlF5eHRRa0ZCVXl4TFFVRkpPMEZCUVVNc1kwRkJSU3hWUVVGUkxFVkJRVVVzVlVGQlVTeEZRVUZGTzBGQlFVVXNiVUpCUVU4N1FVRkJRU3hWUVVGRk8wRkJRVU1zWTBGQlNTeEpRVUZGTEZkQlFWVXNTVUZCUnp0QlFVRkZMRmxCUVVVc1VVRkJUU3hKUVVGSkxGRkJRVkVzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4cFFrRkJSenRCUVVGRkxHZENRVUZGTzBGQlFVRXNWVUZCUXl4RFFVRkRPMEZCUTNSVExHTkJRVWtzUzBGQlJ5eFBRVUZQTEU5QlFVOHNRMEZCUXl4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExHdENRVUZwUWl4SlFVRkZMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zYTBKQlFVMDdRVUZCUVN4VlFVRkZMRWRCUVVVc1MwRkJSeXhaUVVGVkxFOUJRVThzVVVGQlR5eEpRVUZGTEdOQlFWa3NUMEZCVHl4bFFVRmpMRWxCUVVVc1dVRkJWU3hQUVVGUExGZEJRVk1zV1VGQlZTeFBRVUZQTEZGQlFWRXNXVUZCVlN4WlFVRlZMRTlCUVU4c1VVRkJVU3hUUVVGVExFMUJRVXNzU1VGQlJTeEZRVUZGTERCQ1FVRjNRaXhQUVVGSExFbEJRVVU3UVVGQlJ5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXh0UWtGQlR5eEZRVUZGTEdGQlFWY3NSVUZCUlN4WFFVRlhMRWRCUVVVc1EwRkJReXhKUVVGRkxFbEJRVVU3UVVGQlFTeFZRVUZETzBGQlFVTXNZMEZCU1N4SlFVRkhMRWRCUVVVN1FVRkROMVVzWTBGQlJ5eEhRVUZGTzBGQlFVTXNaMEpCUVVrc1MwRkJSeXgxUTBGQll5eExRVUZITzBGQlFXZENMR2RDUVVGRkxFbEJRVVVzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCUlN4TlFVRkpMRmxCUVZVN1FVRkJTU3hwUWtGQlJ5eERRVUZETEVkQlFVVXNUVUZCU1R0QlFVRkRMR3RDUVVGRkxFVkJRVVVzVjBGQlZ5eFRRVUZUTEVsQlFVVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJSU3hIUVVGSExGVkJRVlVzUTBGQlF6dEJRVUZGTEhGQ1FVRlBMRWRCUVVjc1lVRkJZU3hIUVVGRkxFbEJRVVVzVTBGQlR5eE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkZMR2RDUVVGRkxFOUJRVWM3UVVGQlF5eHJRa0ZCUlN4SFFVRkhMRWRCUVVVc1NVRkJSVHRCUVVGRkxHZENRVUZGTEZkQlFWTXNTVUZCUlN4SlFVRkpMRmRCUVZjc1EwRkJRenRCUVVGSExIRkNRVUZQTzBGQlFVRXNXVUZCUXp0QlFVRkZMR2RDUVVGRkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNTVUZCUlN4VFFVRkxPMEZCUVVNc2EwSkJRVVVzUlVGQlJTeFhRVUZYTEZOQlFWTXNTVUZCUlN4SlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGRkxFZEJRVWNzVlVGQlZTeERRVUZETzBGQlFVVXNhVUpCUVVjc1UwRkJVeXhIUVVGRkxFbEJRVVVzVTBGQlR5eFJRVUZQTEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc2IwSkJRVVVzUlVGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4SlFVRkZMRVZCUVVVc1UwRkJUeXhEUVVGRE8wRkJRVUVzWTBGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkZMR0ZCUVVNc1JVRkJSU3hsUVVGaExFbEJRVVVzVVVGQlVTeExRVUZMTEZkQlFWTXNTMEZCUnl4UlFVRlJMRXRCUVVzc1EwRkJReXhGUVVGRkxGRkJRVkVzVDBGQlRTeEhRVUZITzBGQlFVY3NiMEpCUVZFc1MwRkJTeXhOUVVGTkxFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExITkNRVUZSTEZkQlEzSm1PMEZCUVVVc2IwSkJRVTA3UVVGQlFTeFpRVUZGTzBGQlFVVXNZMEZCUlN4VlFVRlJMRTFCUVVrN1FVRkJOa0lzWjBKQlFVazdRVUZCUlN4blFrRkJSenRCUVVGRExHdENRVUZGTzBGQlFVRXNXVUZCZVVJc1UwRkJUeXhIUVVGRk8wRkJRVU1zYjBKQlFVMHNVVUZCVVN4TlFVRk5MSGxIUVVGNVJ5eEhRVUZGTzBGQlFVRXNXVUZCUlR0QlFVRkRMRzFDUVVGUExGTkJRVThzUlVGQlJUdEJRVUZCTEZWQlFVMHNWMEZCVXl4TlFVRkpPMEZCUVVVc1owSkJRVVVzU1VGQlJTeExRVUZMTEZOQlFWTXNUMEZCU3l4bFFVRmhMRTlCUVU4c1dVRkJWU3hUUVVGVExHdENRVUZuUWl4SlFVRkZMRk5CUVZNc1kwRkJZeXhOUVVGTkxFOUJRVThzWlVGQlpTeGxRVUZsTEdWQlFXTXNTVUZCUlN4aFFVRlpMRTFCUVVrc1JVRkJSU3hSUVVGUkxFOUJRVThzU1VGQlJTeEpRVUZGTEVWQlFVVXNUMEZCVHl4SFFVRkZMRVZCUVVVc1VVRkJVU3hWUVVGVExFVkJRVVVzUlVGQlJTeFpRVUZaTEVkQlFVY3NTVUZCUlN4RFFVRkRMRWxCUVVVc1NVRkJSU3hKUVVGSExFMUJRVWtzUzBGQlJ5eFBRVUZITzBGQlFVTXNhMEpCUVVrc1NVRkRPV2hDTEVsQlFVazdRVUZCWlN4blFrRkJSU3hMUVVGTExFOUJRVTBzUjBGQlJTeExRVUZGTzBGQlFVVXNaMEpCUVVVc1MwRkJTeXhKUVVGSk8wRkJRVVVzY1VKQlFVOHNSVUZCUlR0QlFVRkJMRmxCUVZrc1IwRkJSU3hOUVVGSkxFbEJRVVVzVDBGQlJ6dEJRVUZETEd0Q1FVRkpMRWxCUVVVc1NVRkJTVHRCUVVGbExHZENRVUZGTEV0QlFVc3NUMEZCVFN4SFFVRkZMRXRCUVVVN1FVRkJSU3huUWtGQlJTeGxRVUZoTzBGQlFXTXNaMEpCUVVVc1MwRkJTeXhKUVVGSk8wRkJRVVVzY1VKQlFVOHNTVUZCU1N4WFFVRlhMRVZCUVVVc1VVRkJVVHRCUVVGQkxGbEJRVU1zU1VGQlJ5eEpRVUZGTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhyUWtGQlNTeEpRVUZGTEVsQlFVazdRVUZCWlN4blFrRkJSU3hMUVVGTExFOUJRVTBzUjBGQlJTeEpRVUZGTzBGQlFVVXNaMEpCUVVVc1pVRkJZVHRCUVVGakxHZENRVUZGTEZOQlFVOHNUVUZCU1R0QlFVRkRMSFZDUVVGTExFVkJRVVVzVlVGQlVTeExRVUZITEVWQlFVVXNWVUZCVVN4RlFVRkZMRmRCUVZNc1JVRkJSU3hGUVVGRkxGRkJRVkVzU1VGQlJTeEZRVUZGTzBGQlFVRXNZMEZCUXp0QlFVRkZMR2RDUVVGRkxGVkJRVkU3UVVGQlJTeG5Ra0ZCUlN4TFFVRkxMRWxCUVVrN1FVRkJRU3haUVVGRE8wRkJRVWNzWlVGQlJ5eGxRVUZoTEU5QlFVOHNaMEpCUVdNc1QwRkJUeXhqUVVGWkxIRkNRVUZ6UWp0QlFVTndaQ3hqUVVGSkxFdEJRVWNzVVVGQlVTeEpRVUZKTEV0QlFVc3NUMEZCVHl4SFFVRkZMRXRCUVVjc1VVRkJVU3hOUVVGTkxFdEJRVXNzVDBGQlR6dEJRVUZGTEdkQ1FVRkpMRXRCUVVjc1NVRkJTU3hOUVVGSkxFZEJRVWNzVlVGQlZTeEhRVUZGTEVWQlFVVXNTMEZCU3l4SFFVRkhMRWxCUVVVc1NVRkJTU3hIUVVGRkxFdEJRVWNzU1VGQlNTeE5RVUZKTEVkQlFVY3NWVUZCVlN4SFFVRkZMRVZCUVVVc1MwRkJTeXhIUVVGSExFbEJRVVVzU1VGQlNUdEJRVUZITEdOQlFVa3NTMEZCUnl4RlFVRkZMRk5CUVU4c1NVRkJSeXhKUVVGRkxFVkJRVVVzV1VGQlZUdEJRVUZITEdsQ1FVRlBMRTlCUVU4c1IwRkJSU3hGUVVGRk8wRkJRVVVzWlVGQlJ6dEJRVUZMTEZsQlFVVXNaMEpCUVdNc1MwRkJSeXhGUVVGRk8wRkJRV0VzV1VGQlJTeFRRVUZQTEVsQlFVVXNSVUZCUlR0QlFVRk5MR05CUVVrN1FVRkJSU3haUVVGRkxHVkJRV0VzU1VGQlJTeEZRVUZGTzBGQlFWa3NZMEZCU1N4blFrRkJZeXhGUVVGRkxHbENRVUZsTzBGQlFVY3NjMEpCUVZVc1QwRkJUeXhsUVVGaExFVkJRVVVzYVVOQlFXbERPMEZCUVVVc1kwRkJTU3hIUVVGRkxFZEJRVVVzU1VGQlJ5eEpRVUZGTEU5QlFVY3NSMEZCUlN4SFFVRkZMRWxCUVVjc1NVRkJSeXhKUVVGSE8wRkJRemRpTEcxQ1FVRlRMRWxCUVVjN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCVHl4alFVRkZMRkZCUVUwc1NVRkJSU3hKUVVGSkxGVkJRVlVzUTBGQlF6dEJRVUZGTEdOQlFVVXNVMEZCVHl4SlFVRkpMRmRCUVZjc1EwRkJRenRCUVVGRkxHTkJRVVVzVTBGQlR5eExRVUZITEVsQlFVa3NWMEZCVnl4RFFVRkRPMEZCUVVVc1kwRkJSU3hUUVVGUExFdEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTTdRVUZCUlN4alFVRkZMRlZCUVZFc1NVRkJTU3haUVVGWkxFTkJRVU03UVVGQlJTeGpRVUZGTEZWQlFWRXNTMEZCUnl4SlFVRkpMRmxCUVZrc1EwRkJRenRCUVVGRkxHTkJRVVVzVlVGQlVTeEpRVUZKTEdGQlFXRXNRMEZCUXp0QlFVRkZMR05CUVVVc1ZVRkJVU3hMUVVGSExFbEJRVWtzWVVGQllTeERRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMR05CUVVrc1NVRkJSU3hGUVVGRkxHdENRVUZuUWp0QlFVRlRMSEZDUVVGVExFdEJRVWNzUlVGQlJTd3dSRUZCZDBRc1NVRkJSU3gzUWtGQmQwSTdRVUZETTFrc1kwRkJSenRCUVVGRkxHZENRVUZGTEVWQlFVVTdRVUZCUVN4dFFrRkJiVUlzUlVGQlJUdEJRVUZYTEdkQ1FVRkZMRVZCUVVVN1FVRkJRU3h0UWtGQmJVSXNTVUZCUlN4SlFVRkpMRmxCUVZrc1QwRkJUeXhGUVVGRExGTkJRVkVzU1VGQlJTeFBRVUZOTEZOQlFWRXNUMEZCVFN4UlFVRlBMRXRCUVVVc1EwRkJReXhIUVVGRkxFVkJRVVVzUlVGQlJTeHJRa0ZCYTBJN1FVRkJiVUlzYTBKQlFVMHNSVUZCUlN3MlRrRkJOazRzUjBGQlJTeExRVUZITEVWQlFVVXNNa2RCUVRKSExFZEJRM0JuUWl4TlFVRk5MRmxCUVZrN1FVRkJSU3haUVVGRk8wRkJRVVVzWTBGQlJTeEZRVUZGTEU5QlFVODdRVUZCVnl4alFVRkpMRWxCUVVjc1MwRkJSeXhEUVVGRExFZEJRVVVzUzBGQlJ5eERRVUZETEVkQlFVVXNTMEZCUnl4RFFVRkRMRWRCUVVVc1MwRkJSenRCUVVGRkxHMUNRVUZUTEVsQlFVYzdRVUZCUXl4dFFrRkJUeXhwUWtGQlpTeEpRVUZGTzBGQlFVRXNWVUZCUlR0QlFVRkRMR05CUVVrc1NVRkJSU3hIUVVGRkxFdEJRVWNzVFVGQlN5eEpRVUZGTzBGQlFVc3NiVUpCUVZNc1MwRkJTVHRCUVVGRE8wRkJRVWtzWTBGQlJTd3dRa0ZCZDBJc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eExRVUZKTzBGQlFVTTdRVUZCU1N4alFVRkZMREJDUVVGM1FpeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRE8wRkJRVVVzWjBKQlFVY3NTMEZCUnl4TlFVRkpMRk5CUVU4c1QwRkJTeXhqUVVGakxFVkJRVVVzUjBGQlJTeExRVUZITEU5QlFVMHNTVUZCUnp0QlFVRkRMR3RDUVVGSkxFbEJRVVU3UVVGQlJTeHJRa0ZCUlR0QlFVRkxMR2RDUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZEYmxjc2JVSkJRVk1zUlVGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVjc1JVRkJSVHRCUVVGUkxHZENRVUZGTEZGQlFWRXNRMEZCUXp0QlFVRkZMR2RDUVVGRkxHRkJRVmNzU1VGQlJUdEJRVUZKTEdOQlFVVXNRMEZCUXp0QlFVRkZMR2RDUVVGRk8wRkJRVWNzWjBKQlFVVTdRVUZCUlN4blFrRkJSU3hKUVVGSkxGbEJRVmtzWVVGQllTeEpRVUZGTERCRFFVRXdRenRCUVVGRkxHTkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRk5PMEZCUVVFc1ZVRkJSVHRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMRzFDUVVGUExFVkJRVVVzVjBGQlZ5eDFRMEZCZFVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zWTBGQlNUdEJRVUZGTEdOQlFVVTdRVUZCZVVJc1lVRkJSeXhEUVVGRExFMUJRVWtzU1VGQlJTeEhRVUZITEVOQlFVTTdRVUZCUnl4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCUnl4TFFVRkhMRXRCUVVjN1FVRkJSU3h4UWtGQlR5eEpRVUZKTEZkQlFWY3NRMEZCUXp0QlFVRkZMR2RDUVVGSE8wRkJRVVVzY1VKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVXM3UVVGQlFTeFZRVUZyUkR0QlFVTTNXaXh0UWtGQlV5eEhRVUZITEVkQlFVVTdRVUZCUXl4blFrRkJSeXhEUVVGRExFMUJRVWtzVFVGQlNTeEpRVUZITzBGQlFVTXNhMEpCUVVjc1kwRkJXU3hQUVVGUExGTkJRVThzUTBGQlF5eEZRVUZGTEZkQlFWY3NVMEZCVXp0QlFVRkZMSFZDUVVGUExFMUJRVTBzUjBGQlJTeEZRVUZETEdGQlFWa3NZMEZCWVN4RFFVRkRMRVZCUVVVc1MwRkJTeXhQUVVGSE8wRkJRVU1zYzBKQlFVY3NRMEZCUXl4RlFVRkZPMEZCUVVjc01FSkJRVXNzZVVOQlFYVkRMRWxCUVVVN1FVRkJTU3g1UWtGQlR5eEZRVUZGTEZsQlFWazdRVUZCUVN4blFrRkJReXhEUVVGRExFVkJRVVVzVFVGQlRTeE5RVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUVVVc2EwSkJRVWM3UVVGQlJTeDFRa0ZCVHl4SlFVRkpMRkZCUVZFc1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eHZRa0ZCUlN4SFFVRkZMRTlCUVVjc1JVRkJSU3hKUVVGSkxGZEJRVmNzUTBGQlF5eERRVUZETEVkQlFVVXNRMEZCUXp0QlFVRkJMR2RDUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVTXNiVUpCUVU4c1VVRkJVU3hSUVVGUkxFVkJRVVVzUzBGQlN5eE5RVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXh0UWtGQlR5eEhRVUZITEVOQlFVTXNSVUZCUlN4TFFVRkxMRTlCUVVjc1dVRkJXU3haUVVGWkxFZEJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4UFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFZEJRVVVzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRFJEUVVFd1F5eERRVUZETzBGQlFVVXNaMEpCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZETVdVc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRk8wRkJRVVVzYlVKQlFVOHNTMEZCUnl4alFVRlpMRTlCUVU4c1dVRkJXU3gzUWtGQmMwSXNSMEZCUnl4RFFVRkRMRXRCUVVjc1JVRkJSU3hYUVVGWExGTkJRVk1zUzBGQlJ5eExRVUZITEdOQlFWa3NUMEZCVHl4UlFVRk5MRWRCUVVjc1IwRkJSU3hIUVVGRkxFTkJRVU1zU1VGQlJTeE5RVUZOTEVkQlFVVXNSVUZCUXl4aFFVRlpMR05CUVdFc1EwRkJReXhGUVVGRkxFdEJRVXNzVDBGQlJ5eFpRVUZaTEhGQ1FVRnhRaXhIUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVkQlFVVXNVMEZCVXl4SFFVRkZPMEZCUVVNc1owSkJRVVVzYjBOQlFXdERMRU5CUVVNN1FVRkJSU3huUWtGQlJTd3lRMEZCTWtNN1FVRkJSU3h4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhEUVVGRExFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNZMEZCU1R0QlFVRkZMRzFDUVVGVExFVkJRVVVzUjBGQlJUdEJRVUZETEdsQ1FVRkxMRTlCUVVzN1FVRkJZU3hwUWtGQlN5eFZRVUZSTEdkRFFVRm5ReXhEUVVGRE8wRkJRVWtzYVVKQlFVc3NVMEZCVHp0QlFVRkJMRlZCUVVNN1FVRkRlR1FzYlVKQlFWTXNSMEZCUnl4SFFVRkZPMEZCUVVNc1kwRkJSU3hWUVVGVk8wRkJRVVVzWTBGQlJTeFpRVUZWTEUxQlFVazdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR0ZCUVVNc1NVRkJSU3hGUVVGRkxFZEJRVWNzUTBGQlF5eE5RVUZKTEVWQlFVVTdRVUZCUlN4alFVRkZMRWRCUVVjc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVXNSMEZCUnp0QlFVRkZMR2RDUVVGSExFTkJRVU03UVVGQlJTeHhRa0ZCVHp0QlFVRkZMR05CUVVVc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGQlJTeGpRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRWxCUVVVN1FVRkJSU3hqUVVGRkxFdEJRVWNzUlVGQlJUdEJRVUZITEdkQ1FVRkpMRWxCUVVVc1JVRkJReXhMUVVGSkxFOUJRVTBzWlVGQll5eEZRVUZGTEVsQlFVY3NTMEZCU1N4RlFVRkZMRWxCUVVjc1lVRkJXU3hGUVVGRkxFZEJRVVU3UVVGQlJTeHBRa0ZCUnl4RlFVRkZMRTFCUVUwN1FVRkJSU3hqUVVGRkxGbEJRVmtzUjBGQlJTeEZRVUZGTEVWQlFVVTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVU03UVVGRGFsSXNZMEZCU1N4TFFVRkhMR1ZCUVdFc1QwRkJUeXhqUVVGWkxFbEJRVWtzV1VGQldTeE5RVUZOTEVsQlFVVXNVVUZCVHl4TFFVRkhMRU5CUVVNc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eHRRa0ZCU3p0QlFVRkZMR2RDUVVGSkxFbEJRVVVzU1VGQlJUdEJRVUZGTEdsQ1FVRkpMRWxCUVVVc1IwRkJSU3hGUVVGRkxFTkJRVU1zUzBGQlJ5eEZRVUZGTEV0QlFVYzdRVUZCU1N4blFrRkJSVHRCUVVGRkxHZENRVUZITEV0QlFVY3NTVUZCUlN4TFFVRkhMRVZCUVVVc1ZVRkJVVHRCUVVGSExIRkNRVUZQTEVkQlFVY3NUMEZCVHl4RlFVRkZMR3RDUVVGclFpeHZRa0ZCYTBJc1JVRkJSU3hOUVVGTkxFZEJRVVVzUTBGQlF5eEpRVUZGTEVWQlFVVXNVMEZCVXl4SFFVRkZMRU5CUVVNc1EwRkJRenRCUVVGRkxHbENRVUZKTEVsQlFVVXNTVUZCUnl4SlFVRkZMRXRCUVVjN1FVRkJReXhyUWtGQlNTeEpRVUZGTEVWQlFVVXNSMEZCUnp0QlFVRkZMR3RDUVVGSExFbEJRVVVzUzBGQlNUdEJRVUZETEc5Q1FVRkpMRWxCUVVVc1JVRkJSU3hIUVVGSExFbEJRVVU3UVVGQlJ5eHZRa0ZCUnl4UlFVRk5MRWxCUVVVN1FVRkJTeXgxUWtGQlJ5eFBRVUZQTEdOQlFXTXNTVUZCUlN4UFFVRkxMRWxCUVVVc1EwRkJRenRCUVVGQkxIRkNRVUZOTzBGQlFVTXNjMEpCUVVrc1NVRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlJUdEJRVUZITEhOQ1FVRkZMRkZCUVUwc1NVRkJSU3hSUVVGTkxFbEJRVVVzVDBGQlN5eExRVUZITEV0QlFVY3NTVUZCUlN4TFFVRkhMRWxCUVVVc1RVRkJTU3hMUVVGSExFdEJRVWNzUzBGQlJ5eExRVUZITEVsQlFVVXNSVUZCUlN4SFFVRkhMRWxCUVVVN1FVRkJSeXd3UWtGQlRTeEpRVUZGTEV0QlFVY3NUMEZCVHl4aFFVRmhMRU5CUVVNc1MwRkJSeXhMUVVGSExFOUJRVTBzUzBGQlJ5eFBRVUZQTEdGQlFXRXNVVUZCVFN4TFFVTndaaXhKUVVGSExGRkJRVTBzU1VGQlJTeEpRVUZKTzBGQlFVRXNaMEpCUVVVN1FVRkJRU3hqUVVGRE8wRkJRVTBzY1VKQlFVY3NUMEZCVHl4aFFVRmhMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVU1zYlVKQlFVODdRVUZCUVN4VlFVRkRMRWRCUVVVc1MwRkJSeXhEUVVGRExFZEJRVVVzVDBGQlN5eFBRVUZMTEV0QlFVY3NSMEZCUnl4RlFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFbEJRVVU3UVVGQlJ5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhuUWtGQlJ6dEJRVUZGTEhGQ1FVRlBMRVZCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeG5Ra0ZCUlR0QlFVRkZMR2RDUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVVc1IwRkJSenRCUVVGRkxHdENRVUZITEVWQlFVVTdRVUZCVHl4clFrRkJSU3hQUVVGUExFTkJRVU03UVVGQlJTeHJRa0ZCUlR0QlFVRkJMRmxCUVVVN1FVRkJReXhqUVVGRkxFZEJRVVVzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkRhRTBzWTBGQlNTeExRVUZITEU5QlFVYzdRVUZCUXl4blFrRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVVXNiMEpCUVUwc1IwRkJSeXhEUVVGRExFZEJRVVU3UVVGQlV5eGxRVUZITEVOQlFVTTdRVUZCUVN4VlFVRkRMRWRCUVVVc1NVRkJSVHRCUVVGQkxGbEJRVU1zU1VGQlJ5eERRVUZETzBGQlFVRXNXVUZCUlN4SlFVRkhMRU5CUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzUTBGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4RFFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGZEJRVlU3UVVGQlF5eHJRa0ZCUlN4RlFVRkZMRWRCUVVjc1NVRkJSU3hGUVVGRkxFZEJRVWM3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SlFVRkhMRmRCUVZVN1FVRkJReXhwUWtGQlJ5eFJRVUZSTEUxQlFVazdRVUZCUXl4dFFrRkJSenRCUVVGRkxHdENRVUZGTEVkQlFVY3NUVUZCU1N4SFFVRkhMRU5CUVVNN1FVRkJRU3hqUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SlFVRkhMRmRCUVZVN1FVRkJReXhuUWtGQlJTeDNRa0ZCYzBJc1JVRkJSVHRCUVVGSExHZENRVUZGTEdkQ1FVRmpMRVZCUVVVN1FVRkJSeXhuUWtGQlJTeG5Ra0ZCWXl4RlFVRkZPMEZCUVVjc09FSkJRV003UVVGQlFTeFpRVUZGTzBGQlFVRXNXVUZCUlN4SlFVRkhMRk5CUVZNc1IwRkJSVHRCUVVGRExHdENRVUZGTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhEUVVGRExHdENRVUZyUWp0QlFVRkJMRmxCUVVVc1NVRkJSeXhYUVVGVk8wRkJRVU1zZFVKQlFWRXNTMEZCU3l4RlFVRkZPMEZCUVVjc2JVSkJRVWNzUTBGQlF6dEJRVUZGTEcxQ1FVRkpMRXRCUVVzc1JVRkJSVHRCUVVGSExHMUNRVUZITEVOQlFVTTdRVUZCUlN4blFrRkJSU3hMUVVGSExFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4TFFVRkhMRU5CUVVNN1FVRkJSU3huUWtGQlJTeExRVUZITEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGTkJRVk1zUjBGQlJUdEJRVUZETEd0Q1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGSExIRkNRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc1owSkJRVVVzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hIUVVGSExFOUJRVThzUlVGQlJTeEhRVUZITEZGQlFWRXNRMEZCUXl4SFFVRkZMRU5CUVVNN1FVRkJSU3huUWtGQlJTeExRVUZITzBGQlFVVXNhVUpCUVVjc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NWMEZCVlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVOMFppeEpRVUZITEZkQlFWVTdRVUZCUXl4blFrRkJSU3hIUVVGSExGRkJRVkVzVDBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExFOUJRVWNzU1VGQlNTeFJRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3haUVVGVkxFOUJRVWM3UVVGQlF5eHZRa0ZCUlN4RlFVRkZPMEZCUVVzc2IwSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVa3NiMEpCUVVjc1JVRkJSU3huUWtGQll5eEZRVUZGTEdkQ1FVRmpMRVZCUVVVc1IwRkJSVHRCUVVGRExITkNRVUZKTEVsQlFVVXNSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSVHRCUVVGRkxITkNRVUZGTEVWQlFVVXNXVUZCV1N4SFFVRkZMRVZCUVVVc1dVRkJXU3hKUVVGRkxFVkJRVVVzTkVOQlFUQkRMRWxCUVVVc2VVSkJRWFZDTEVWQlFVVXNaVUZCWVN4eFEwRkJjVU03UVVGQlFTeG5Ra0ZCUXl4WFFVRlRMRzFDUVVGcFFqdEJRVUZGTEc5Q1FVRkZPMEZCUVVFc2VVSkJRVlVzYTBKQlFXZENPMEZCUVVVc2NVSkJRVWNzUTBGQlF6dEJRVUZCTEhsQ1FVRlZMRzlDUVVGclFqdEJRVUZGTEhGQ1FVRkhMRVZCUVVVc1RVRkJUVHRCUVVGQkxIbENRVUZWTEdsQ1FVRmxPMEZCUVVVc2MwSkJRVVVzUlVGQlJTeFJRVUZQTEVsQlFVVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1IwRkJSU3hQUVVGUExFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVVc1IwRkJSeXhEUVVGRExFZEJRVVVzUlVGQlJTeEhRVUZITzBGQlFVRXNiMEpCUVU4c1JVRkJSU3hIUVVGSExGRkJRVkVzUTBGQlF6dEJRVUZCTEc5Q1FVTm9aMEk3UVVGQlFTeHJRa0ZCUXl4SFFVRkZMRVZCUVVVc1MwRkJSenRCUVVGQkxIbENRVUZWTEcxQ1FVRnBRanRCUVVGRkxHOUNRVUZGTEVkQlFVY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1dVRkJXU3hGUVVGRExFdEJRVWtzVTBGQlVTeERRVUZETzBGQlFVRXNlVUpCUVZVc1lVRkJWenRCUVVGRkxHOUNRVUZGTEZOQlFVOHNUVUZCUnl4RlFVRkZMRU5CUVVNN1FVRkJRU3g1UWtGQlZTeFpRVUZWTzBGQlFVVXNkMEpCUVUwc1dVRkJWU3hGUVVGRkxGZEJRVk1zVDBGQlN5eEZRVUZGTEVsQlFVazdRVUZCUVN4NVFrRkJWU3h0UWtGQmFVSXNSVUZCUlR0QlFVRlBMRzlDUVVGRkxGbEJRVmtzUTBGQlF6dEJRVUZCTEhsQ1FVRlZMR3RDUVVGblFqdEJRVUZGTEc5Q1FVRkZMRVZCUVVVc1QwRkJUeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTzBGQlFVRTdRVUZCVHl4MVFrRkJSeXhGUVVGRkxHOURRVUZyUXl4RFFVRkRPMEZCUVVFc1kwRkJRenRCUVVGRkxHZENRVUZGTEZWQlFWRXNUMEZCUnp0QlFVRkRMR3RDUVVGRkxESkNRVUY1UWl4RlFVRkZMRmRCUVZNc1RVRkJTU3hGUVVGRkxGTkJRVThzVDBGQlN5eEZRVUZGTEU5QlFVODdRVUZCUlN4elFrRkJUVHRCUVVGQkxHTkJRVVU3UVVGQlJTeHZRa0ZCU1N4RlFVRkZMRWRCUVVjc1YwRkJWU3hUUVVGVExFZEJRVVU3UVVGQlF5eHJRa0ZCUlN4VlFVRlZMRVZCUVVNc1RVRkJTeXhGUVVGRExFTkJRVU03UVVGQlFTeGpRVUZETEVOQlFVTXNSMEZCUlN4RlFVRkZMRWRCUVVjc1UwRkJVU3hUUVVGVExFZEJRVVU3UVVGQlF5eHJRa0ZCUlN4UlFVRlJMRU5CUVVNN1FVRkJRU3hqUVVGRExFTkJRVU03UVVGREwyWXNhMEpCUVVrc1NVRkJSU3hEUVVGRExFZEJRVVVzU1VGQlJTeERRVUZETEZWQlFWTXNWMEZCVlN4VFFVRlJMRlZCUVZVc1IwRkJSVHRCUVVGRkxHMUNRVUZKTEV0QlFVczdRVUZCUlN4clFrRkJSU3hsUVVGbExFTkJRVU1zUzBGQlJ5eEZRVUZGTEV0QlFVc3NRMEZCUXp0QlFVRkZMR2RDUVVGRkxGbEJRVmtzUlVGQlF5eExRVUZKTEZGQlFVOHNWVUZCVXl4SFFVRkZMRmRCUVZVc1JVRkJSU3gxUWtGQmNVSXNXVUZCVnl4WlFVRlhMRWRCUVVVc1dVRkJWeXhIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkZMRWxCUVVjc1UwRkJVeXhIUVVGRk8wRkJRVU1zWjBKQlFVVTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGZEJRVlU3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRWRCUVVjc05rSkJRVFpDTzBGQlFVVXNhMEpCUVVVc1NVRkJTU3hQUVVGUExFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NWMEZCVlR0QlFVRkRMRzFDUVVGSExFVkJRVVVzUjBGQlJ5eFhRVUZUTEVWQlFVVXNSMEZCUnl4SFFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzBGQlFVY3NjVUpCUVU4c1JVRkJSU3hIUVVGSExFbEJRVWs3UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkZMRmxCUVVVc1ZVRkJVVHRCUVVGRkxHTkJRVWtzUzBGQlJ5eFBRVUZITzBGQlFVTXNiVUpCUVVzc1NVRkJSU3hGUVVGRk8wRkJRVkVzWjBKQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRM0JpTEZsQlFVVXNjMEpCUVc5Q0xGZEJRVlU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVc1IwRkJSU3hKUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNN1FVRkJSU3hsUVVGSExFZEJRVVVzU1VGQlJTeERRVUZETzBGQlFVVXNaVUZCUnl4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRkxHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2RDUVVGSE8wRkJRVVVzY1VKQlFVOHNSVUZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGRkxHVkJRVWNzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4alFVRkpMRXRCUVVjc1EwRkJRenRCUVVGRkxGbEJRVVVzYlVKQlFXbENMRk5CUVZNc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4SFFVRkhMRU5CUVVNN1FVRkJSU3hyUWtGQlNTeExRVUZITEVkQlFVY3NWMEZCVXl4SFFVRkhMRk5CUVU4c1NVRkJSU3hKUVVGSExFZEJRVWNzUTBGQlF5eEpRVUZGTEVsQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkJSeXhuUWtGQlJTeEZRVUZGTEVOQlFVTTdRVUZCUlN4alFVRkZMRWxCUVVVc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlJTeEhRVUZITEVOQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVVc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTzBGQlFVTXNhVUpCUVVzc1MwRkJSeXhKUVVGRk8wRkJRVWNzYVVKQlFVc3NTMEZCUnl4VFFVRlRMRWRCUVVVN1FVRkJReXhuUWtGQlJTeEZRVUZGTEV0QlFVc3NTMEZCUnl4TFFVRkhMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZGTEdsQ1FVRkxMRXRCUVVjc1UwRkJVeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNSVUZCUlN4TFFVRkxMRXRCUVVjc1MwRkJSeXhOUVVGSkxFTkJRVU1zU1VGQlJUdEJRVUZCTEZsQlFVTTdRVUZCUlN4cFFrRkJTeXhMUVVGSExGTkJRVk1zUjBGQlJTeEhRVUZGTzBGQlFVTXNiVUpCUVVzc1IwRkJSenRCUVVGRkxHMUNRVUZMTEVkQlFVY3NRMEZCUXp0QlFVRkZMRzFDUVVGTExFZEJRVWNzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUlN4cFFrRkJTeXhMUVVGSExGZEJRVlU3UVVGQlF5eG5Ra0ZCUlN4RlFVRkZMRXRCUVVzc1MwRkJSeXhOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkRNMlVzWTBGQlNTeExRVUZITEVkQlFVVXNTMEZCUnp0QlFVRkZMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMRzFDUVVGUExFbEJRVVVzUlVGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhKUVVGRkxFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXh0UWtGQlN6dEJRVUZGTEcxQ1FVRkxPMEZCUVVVc2JVSkJRVXM3UVVGQlJTeHRRa0ZCU3p0QlFVRkZMR2RDUVVGSExHVkJRV0VzVDBGQlR6dEJRVUZyUWl4eFFrRkJUeXhGUVVGRkxIRkdRVUZ4Uml4SFFVRkZPMEZCUVVVc1owSkJRVWtzU1VGQlJTeERRVUZETzBGQlFVVXNaMEpCUVVjc1MwRkJSeXhOUVVGSkxFVkJRVVU3UVVGQlR5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4RlFVRkRMRWxCUVVjc1IwRkJSU3hKUVVGSExFZEJRVVVzU1VGQlJ5eEhRVUZGTEVsQlFVY3NSVUZCUXp0QlFVRkZMRzFDUVVGUExFdEJRVWNzUlVGQlJTeExRVUZITEdWQlFXTXNXVUZCV1N4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFZEJRVWNzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNiVUpCUVU4c1NVRkJSU3hGUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SlFVRkZPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWM3UVVGQlJTeHhRa0ZCVHl4RlFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFZRVUZETzBGQlEyNWtMR05CUVVrc1MwRkJSeXhQUVVGSE8wRkJRVU1zY1VKQlFWRXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hKUVVGRkxFVkJRVVVzVVVGQlR5eEZRVUZGTEVkQlFVVTdRVUZCUXl4clFrRkJTU3hKUVVGRkxFVkJRVVVzVjBGQlZ5eERRVUZETzBGQlFVVXNjVUpCUVVzc1NVRkJSU3hOUVVGSkxGRkJRVTBzU1VGQlJTeExRVUZITEVsQlFVVXNVMEZCVHl4TFFVRkhMRk5CUVU4c1MwRkJSeXhMUVVGSExFZEJRVVVzUlVGQlJTeExRVUZITEV0QlFVYzdRVUZCUVN4WlFVRkRPMEZCUVVNc2JVSkJRVTg3UVVGQlFTeFZRVUZETEVkQlFVVXNTMEZCUnl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eHRRa0ZCU3p0QlFVRkZMR2RDUVVGSExFVkJRVVVzU1VGQlJUdEJRVUZITEhGQ1FVRlBPMEZCUVVVc1owSkJRVWtzU1VGQlJUdEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1NVRkJSVHRCUVVGRkxIRkNRVUZSTEVsQlFVVXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUeXhGUVVGRkxFZEJRVVU3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRVZCUVVVc1YwRkJWeXhEUVVGRE8wRkJRVVVzYTBKQlFVY3NVMEZCVHl4TFFVRkhMRk5CUVU4c1IwRkJSVHRCUVVGRExHOUNRVUZKTEVsQlFVVXNSVUZCUlN4WFFVRlhMRVZCUVVVc1EwRkJRenRCUVVGRkxHOUNRVUZGTEZWQlFWRXNTVUZCUlN4VFFVRlBMRTFCUVVrc1NVRkJSVHRCUVVGQkxHTkJRVWs3UVVGQlF5eHJRa0ZCUnl4UFFVRkxMRWRCUVVVN1FVRkJReXh2UWtGQlJ5eExRVUZITzBGQlFVVTdRVUZCVFN4clFrRkJSU3hSUVVGTkxFTkJRVU1zU1VGQlJUdEJRVUZCTEdOQlFVTXNUMEZCU3p0QlFVRkRMRzlDUVVGSExGRkJRVTBzUjBGQlJUdEJRVUZETEhOQ1FVRkhMRWxCUVVVc1MwRkJSenRCUVVGRk8wRkJRVTBzYjBKQlFVVXNVVUZCVFN4RFFVRkRMRWxCUVVVc1RVRkJTU3hMUVVGSE8wRkJRVUVzWjBKQlFVTXNUMEZCU3p0QlFVRkRMSE5DUVVGSExGTkJRVThzUjBGQlJUdEJRVUZETEhkQ1FVRkhMRWxCUVVVc1MwRkJSenRCUVVGRk8wRkJRVTBzYzBKQlFVVXNVVUZCVFN4RFFVRkRMRWxCUVVVc1RVRkJTU3hMUVVGSE8wRkJRVUVzYTBKQlFVVXNUMEZCU3p0QlFVRkRMSGRDUVVGSExFbEJRVVVzUzBGQlJ6dEJRVUZGTzBGQlFVMHNjMEpCUVVVc1VVRkJUU3hEUVVGRExFbEJRVVVzVFVGQlNTeExRVU53Wmp0QlFVRkhMSE5DUVVGRkxGRkJRVTBzUTBGQlF5eEpRVUZGTEUxQlFVa3NTMEZCUnl4TFFVRkhPMEZCUVVFc2EwSkJRVVU3UVVGQlF5eHZRa0ZCUlN4UlFVRk5MRU5CUVVNc1NVRkJSU3hOUVVGSkxFdEJRVWNzU1VGQlJUdEJRVUZCTEdkQ1FVRkZPMEZCUVVNc2EwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVXNUVUZCU1N4SlFVRkZPMEZCUVVFc1kwRkJSVHRCUVVGQkxGbEJRVU03UVVGQlF5eGpRVUZGTEUxQlFVa3NRMEZCUXl4SlFVRkZPMEZCUVVVc2JVSkJRVThzU1VGQlJUdEJRVUZCTEZWQlFVTXNSMEZCUlN4TFFVRkhMRU5CUVVNc1IwRkJSU3hIUVVGRkxFMUJRVWtzUjBGQlJ5eEhRVUZGTEVWQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3h0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSE8wRkJRVVVzY1VKQlFVOHNSVUZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCUnp0QlFVRkZMSEZDUVVGUExFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXh0UWtGQlR5eEpRVUZGTEVWQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFbEJRVVU3UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCUnp0QlFVRkZMSEZDUVVGUExFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWM3UVVGQlJTeHhRa0ZCVHl4RlFVRkZMRWxCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJSenRCUVVGRkxIRkNRVUZQTEVWQlFVVXNTVUZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVjN1FVRkJSU3h4UWtGQlR5eEZRVUZGTEVsQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkhPMEZCUVVVc2NVSkJRVThzUlVGQlJTeEpRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGRE9XUXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zWjBKQlFVYzdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFbEJRVWNzUjBGQlJTeERRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVjN1FVRkJSU3h4UWtGQlR5eEZRVUZGTEVsQlFVY3NSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZITzBGQlFVVXNjVUpCUVU4c1JVRkJSU3hKUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc1kwRkJTU3hMUVVGSExFOUJRVWM3UVVGQlF5eG5Ra0ZCUnl4RFFVRkRPMEZCUVVVc2EwSkJRVWM3UVVGQlF5eHZRa0ZCUnl4RlFVRkZMRWRCUVVVc1EwRkJReXhGUVVGRk8wRkJRVVVzYzBKQlFVYzdRVUZCUXl4M1FrRkJSU3hIUVVGSExFTkJRVU1zU1VGQlJTeEhRVUZITEVOQlFVTTdRVUZCUVN4clFrRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eHBRMEZCWVN4TFFVRkhMRmxCUVZVc1MwRkJSeXhGUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEd0Q1FVRkRPMEZCUVVFc1kwRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5dzJRa0ZCWVN4TFFVRkhMRmxCUVZVc1MwRkJSeXhGUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEdOQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVVc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTzBGQlFVTXNiVUpCUVVzN1FVRkJSU3d5UWtGQllTeFBRVUZQTEZGQlFWRXNUMEZCU3l4UlFVRlJMRWRCUVVjc1JVRkJSU3hIUVVGRkxFdEJRVWNzUjBGQlJTeERRVUZETEVWQlFVVXNUVUZCVFN4TFFVRkxMRU5CUVVNc1IwRkJSU3hMUVVGSExFdEJRVWtzVVVGQlVTeE5RVUZOTEVWQlFVVXNSMEZCUlN4TFFVRkhMRWRCUVVVc1EwRkJRenRCUVVGQkxGVkJRVVU3UVVGQlF5eFpRVUZGTEc5RFFVRnJRenRCUVVGSExHMUNRVUZUTEVsQlFVYzdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeHJRa0ZCU1N4SFFVRkhMRU5CUVVNc1IwRkJSU3hIUVVGSExFMUJRVWtzUjBGQlJ5eERRVUZETzBGQlFVRXNWVUZCUlR0QlFVRkRMRmxCUVVVc1pVRkJZVHRCUVVNNVpTeGpRVUZKTEVsQlFVVXNUMEZCUnl4TlFVRkpMRWxCUVVVc1RVRkJTU3hOUVVGSkxFbEJRVVVzVDBGQlN5eE5RVUZKTEVsQlFVVXNUVUZCU3l4TFFVRkhMRU5CUVVNc1IwRkJSU3hKUVVGSExFbEJRVWNzU1VGQlJ5eExRVUZKTEV0QlFVa3NTMEZCU1N4TFFVRkpMRXRCUVVrc1MwRkJTU3hMUVVGSkxFZEJRVWNzUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4SlFVRkhMRWxCUVVjc1NVRkJSeXhMUVVGSkxFdEJRVWtzUzBGQlNTeExRVUZKTEV0QlFVa3NTMEZCU1N4TFFVRkpMRWRCUVVjN1FVRkJSU3h0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEcxQ1FVRlBMRWxCUVVVc1JVRkJSU3hKUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFbEJRVVU3UVVGQlFTeFZRVUZITzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWM3UVVGQlJTeHhRa0ZCVHl4RlFVRkZMRWxCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHTkJRVWtzUzBGQlJ5eFBRVUZITzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc2FVSkJRVWNzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRzFDUVVGUE8wRkJRVUVzVlVGQlF5eEhRVUZGTEV0QlFVY3NUMEZCUnp0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUjBGQlJ6dEJRVUZGTEdkQ1FVRkZMRVZCUVVVN1FVRkJSU3hsUVVGSExFTkJRVU03UVVGQlJTeHRRa0ZCVHp0QlFVRkJMRlZCUVVNN1FVRkRkRmNzYlVKQlFWTXNSVUZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEZWQlFWVXNVMEZCVHl4SFFVRkZMRWxCUVVVN1FVRkJWU3h0UWtGQlR5eEhRVUZITEUxQlFVazdRVUZCUXl4MVFrRkJVU3hKUVVGRkxFZEJRVWNzU1VGQlJTeERRVUZETEVkQlFVVXNTVUZCUlN4TFFVRkhMRWRCUVVVc1NVRkJSU3hIUVVGRkxFbEJRVVVzUjBGQlJTeExRVUZKTzBGQlFVTXNiMEpCUVVrc1NVRkJSU3hGUVVGRkxFbEJRVVVzUTBGQlF6dEJRVUZGTEcxQ1FVRkhMRVZCUVVVc1NVRkJSU3hOUVVGSkxFTkJRVU1zU1VGQlJUdEJRVUZCTEdOQlFVTTdRVUZCUXl4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRek5LTEdOQlFVa3NTMEZCUnl4RFFVRkRMRWRCUVVVc1MwRkJSeXhEUVVGRExFZEJRVVVzUzBGQlJ5eE5RVUZKTzBGQlFVTXNaMEpCUVVjc1EwRkJReXhKUVVGSE8wRkJRVU1zYTBKQlFVa3NTVUZCUlN4RlFVRkRMRTFCUVVzc1dVRkJWeXhUUVVGUkxGbEJRVmNzVFVGQlN5eExRVUZKTEV0QlFVa3NTMEZCU1N4TlFVRkxMR3RDUVVGcFFpeFBRVUZOTEZsQlFWVXNUMEZCVHl4aFFVRlhMRlZCUVZVc1lVRkJWeXhWUVVGVkxGVkJRVlVzUTBGQlF5eExRVUZITEV0QlFVc3NVVUZCVVN4TFFVRkpMRWRCUVVjc1NVRkJSU3hWUVVGVExFZEJRVVVzVFVGQlNTeHBRa0ZCWjBJc1IwRkJSVHRCUVVGRkxHMUNRVUZKTEV0QlFVczdRVUZCUnl3eVFrRkJVeXhIUVVGSExFTkJRVU1zU1VGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXl4SlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGRkxFZEJRVWNzUTBGQlF6dEJRVUZGTEd0Q1FVRkpMRWxCUVVVc1EwRkJRenRCUVVGRkxHMUNRVUZKTEV0QlFVczdRVUZCUlN4clFrRkJSU3hMUVVGTExFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVN1FVRkJSU3h0UWtGQlJ6dEJRVUZCTEZsQlFVTTdRVUZCUXl4dFFrRkJUenRCUVVGQkxGVkJRVVVzUjBGQlJUdEJRVU4wVnl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkhPMEZCUVVVc2NVSkJRVThzUlVGQlJTeEpRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc2JVSkJRVXM3UVVGQlJTeHRRa0ZCU3p0QlFVRkZMR2RDUVVGSkxFbEJRVVU3UVVGQlJTeGxRVUZITEVWQlFVVXNVVUZCVVN4VFFVRlRMRWRCUVVVc1IwRkJSVHRCUVVGRExHdENRVUZKTEVsQlFVVXNTVUZCUlR0QlFVRkZMR3RDUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGRkxHMUNRVUZKTEVsQlFVVXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUeXhGUVVGRk8wRkJRVVVzYlVKQlFVY3NSVUZCUlN4UFFVRkxMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVjBGQlZ5eERRVUZETzBGQlFVVXNhVUpCUVVjc1JVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVVXNiVUpCUVVjc1JVRkJSU3hUUVVGUE8wRkJRVUVzV1VGQlF5eERRVUZETzBGQlFVVXNiVUpCUVU4N1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlJ6dEJRVUZGTEhGQ1FVRlBMRVZCUVVVc1NVRkJSeXhIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEcxQ1FVRkxPMEZCUVVVc2JVSkJRVXM3UVVGQlJTeG5Ra0ZCU1N4SlFVRkZMRWRCUVVjN1FVRkJSU3hqUVVGRkxFVkJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZPMEZCUVU4c1owSkJRVWtzU1VGQlJUdEJRVUZGTEdOQlFVVXNVVUZCVVN4VFFVRlRMRWRCUVVVN1FVRkJReXh0UWtGQlJ5eEZRVUZGTEZOQlFVODdRVUZCUVN4WlFVRkRMRU5CUVVNN1FVRkJSU3hqUVVGRkxFVkJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlR0QlFVRkZMRzFDUVVGUE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHMUNRVUZQTEVsQlFVVXNSVUZCUlN4SlFVRkhMRWRCUVVVc1EwRkJReXhKUVVGRk8wRkJRVUVzVlVGQlJUdEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEcxQ1FVRlBMRWxCUVVVc1JVRkJSU3hKUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SlFVRkZPMEZCUVVFc1ZVRkJSVHRCUVVOcVpDeHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEcxQ1FVRlBMRWxCUVVVc1JVRkJSU3hKUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWxCUVVVN1FVRkJRU3hWUVVGRk8wRkJRVU1zWTBGQlNTeExRVUZITEVOQlFVTXNUVUZCU3l4RFFVRkRMRWRCUVVVc1EwRkJReXhEUVVGRE8wRkJRVVVzYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVYzdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFbEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc2JVSkJRVXM3UVVGQlJTeHRRa0ZCU3p0QlFVRkZMRzFDUVVGTE8wRkJRVVVzY1VKQlFWRXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hKUVVGRkxFZEJRVVVzUzBGQlNUdEJRVUZETEd0Q1FVRkpMRWxCUVVVc1JVRkJSU3hGUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVkQlFVVXNTVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF6dEJRVUZGTEcxQ1FVRkhPMEZCUVVVc2RVSkJRVkVzU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUlN4TFFVRkpPMEZCUVVNc2IwSkJRVWtzU1VGQlJTeEZRVUZGTEVWQlFVVXNTVUZCUlN4TlFVRkpMRU5CUVVNc1IwRkJSU3hKUVVGRkxFZEJRVWNzUTBGQlF6dEJRVUZGTEhOQ1FVRkpMRXRCUVVjc1QwRkJTeXhOUVVGSkxFMUJRVWtzU1VGQlJTeExRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkZMRU5CUVVNc1EwRkJReXhIUVVGRkxFVkJRVVVzVTBGQlR5eExRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRPMEZCUVVFc1kwRkJRenRCUVVGRExHMUNRVUZITzBGQlFVRXNXVUZCUXp0QlFVRkRMR05CUVVVc1JVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVVXNiVUpCUVU4N1FVRkJRU3hWUVVGRE8wRkJRVU1zWTBGQlNTeExRVUZITEVOQlFVTXNTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRVZCUVVVc1IwRkJSU3hMUVVGSExFTkJRVU1zU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVWQlFVVTdRVUZCUlN4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVVVzUTBGQlF6dEJRVUZGTEdWQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1JVRkJSU3hOUVVGTk8wRkJRVVVzYlVKQlFVODdRVUZCUVN4VlFVRkRPMEZCUTJwbUxHTkJRVWtzUzBGQlJ5eERRVUZETEVkQlFVVXNUVUZCU1R0QlFVRkRMR1ZCUVVjc1JVRkJSU3hKUVVGSkxFZEJRVVVzVFVGQlNTeERRVUZETzBGQlFVRXNWVUZCUXp0QlFVTm9ReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXh4UWtGQlV5eEZRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc2JVSkJRVWtzU1VGQlJTeFpRVUZWTEU5QlFVOHNTVUZCUlN4RlFVRkZMRk5CUVZNc1NVRkJSU3hMUVVGSExFbEJRVWNzUlVGQlJTeFRRVUZQTzBGQlFVY3NiMEpCUVVVc1JVRkJSU3hEUVVGRExFbEJRVVU3UVVGQlJTeHhRa0ZCVHp0QlFVRkJMRmxCUVVNN1FVRkJReXh4UWtGQlV5eEZRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGUExFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVYzdRVUZCUVN4WlFVRkRPMEZCUVVNc2NVSkJRVk1zUlVGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4MVFrRkJVeXhGUVVGRkxFbEJRVWM3UVVGQlF5eDFRa0ZCVHl4SlFVRkZMRXRCUVVjc1MwRkJSeXhKUVVGRkxFdEJRVWNzU1VGQlJUdEJRVUZCTEdOQlFVTTdRVUZCUXl4clFrRkJTVHRCUVVGRkxIRkNRVUZMTEVsQlFVVXNSVUZCUlN4RlFVRkZMRmxCUVZrc1NVRkJSU3hGUVVGRkxGbEJRVmtzUTBGQlF5eE5RVUZKTEU5QlFVc3NTVUZCUlN4RlFVRkZMRVZCUVVVc1UwRkJVeXhKUVVGRkxFVkJRVVVzVTBGQlV5eERRVUZETEU5QlFVc3NTVUZCUlN4RlFVRkZMRVZCUVVVc1VVRkJVU3hKUVVGRkxFVkJRVVVzVVVGQlVTeERRVUZETzBGQlFVY3NjVUpCUVU4N1FVRkJRU3haUVVGRE8wRkJRVU1zY1VKQlFWTXNSVUZCUlN4SFFVRkZPMEZCUVVNc2MwSkJRVThzUlVGQlJTeFBRVUZQTEVkQlFVVTdRVUZCUVN4blFrRkJReXhMUVVGTE8wRkJRVVVzZVVKQlFVOHNTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hKUVVGRkxFZEJRVVVzU1VGQlJ5eEZRVUZGTzBGQlFVRXNaMEpCUVVVc1MwRkJTenRCUVVGRkxIbENRVUZQTzBGQlFVRXNaMEpCUVVVc1MwRkJTenRCUVVGRkxIbENRVUZQTEVsQlFVa3NTMEZCU3l4RlFVRkZMRmxCUVZrc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVThzU1VGQlNUdEJRVUZCTEc5Q1FVRkxMRVZCUVVVc1dVRkJXVHRCUVVGQkxHOUNRVU0xWmp0QlFVRkJMRzlDUVVGRk8wRkJRVUVzYTBKQlFVTTdRVUZCUVN4blFrRkJSU3hMUVVGTE8wRkJRVVVzZVVKQlFVOHNTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEdkQ1FVRkZMRXRCUVVzN1FVRkJSU3g1UWtGQlR5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWxCUVVVc1IwRkJSU3hKUVVGSExFVkJRVVU3UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVThzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SlFVRkZMRWRCUVVVc1NVRkJSeXhGUVVGRk8wRkJRVUVzWTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUXl4eFFrRkJVeXhGUVVGRkxFZEJRVVU3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSeXh0UWtGQlNTeEpRVUZGTEVsQlFVa3NTMEZCVFN4SlFVRkpMRXRCUVVzc1JVRkJSU3hMUVVGSExFMUJRVXNzUjBGQlJTeERRVUZETEVWQlFVY3NVVUZCVVN4RFFVRkRMRWRCUVVVc1NVRkJSU3hMUVVGSE8wRkJRVU1zYjBKQlFVa3NTVUZCUlN4RlFVRkZMRk5CUVZNc1IwRkJSU3hMUVVGSExFVkJRVVVzUlVGQlJTeFpRVUZaTEVOQlFVTXNTVUZCUlN4TFFVRkhMRWxCUVVrc1EwRkJRenRCUVVGRkxHOUNRVUZITEVsQlFVVXNTVUZCUlN4RlFVRkZMRkZCUVZFN1FVRkJSU3gxUWtGQlJ5eEpRVUZGTEVWQlFVVXNVVUZCVVN4SlFVRkZMRWRCUVVVc1JVRkJSU3hSUVVGUkxFTkJRVU1zUjBGQlJTeExRVUZITEVsQlFVVXNSVUZCUlN4VFFVRlRMRWxCUVVVc1EwRkJReXhMUVVGSExFVkJRVVVzVTBGQlV5eERRVUZETEVkQlFVVXNSVUZCUlN4WlFVRlpMRVZCUVVVc1dVRkJXU3hKUVVGRkxFTkJRVU03UVVGQlFTeHhRa0ZCVHp0QlFVRkRMRzlDUVVGRkxGRkJRVkVzUlVGQlJTeFJRVUZSTEVsQlFVVXNRMEZCUXp0QlFVRkZPMEZCUVVFc1owSkJRVXM3UVVGQlFTeGpRVUZETzBGQlFVTXNhMEpCUVVVc1NVRkJTU3hMUVVGTExFVkJRVVVzV1VGQldTeEpRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVVVzUlVGQlJTeEpRVUZKTzBGQlFVRXNaMEpCUVVzc1JVRkJSU3haUVVGWk8wRkJRVUVzWjBKQlEyNW1PMEZCUVVFc1owSkJRVVU3UVVGQlFTeGpRVUZETEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxFTkJRVU03UVVGQlJTeHhRa0ZCVHl4TFFVRkhMRVZCUVVVc1IwRkJSU3hEUVVGRExFbEJRVVVzUzBGQlJ5eEZRVUZGTEVkQlFVVXNRMEZCUXl4SlFVRkZMRVZCUVVVc1dVRkJXU3hKUVVGRkxFbEJRVVVzUlVGQlJTeFpRVUZaTEVsQlFVVXNSVUZCUlN4WlFVRlpMRWxCUVVVN1FVRkJRU3haUVVGRE8wRkJRVU1zYlVKQlFVczdRVUZCUlN4dFFrRkJTenRCUVVGRkxHMUNRVUZMTzBGQlFVVXNiVUpCUVVzN1FVRkJSU3huUWtGQlNTeEpRVUZGTEVWQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRE8wRkJRVVVzWjBKQlFVVXNSVUZCUXl4SlFVRkhMRVZCUVVVc1JVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEhRVUZGTEVsQlFVY3NSVUZCUlN4RlFVRkZMRWxCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZITEVWQlFVVXNSVUZCUlN4SlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJ5eEZRVUZGTEVWQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhIUVVGRkxFbEJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1IwRkJSU3hKUVVGSExFVkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSeXhGUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNSMEZCUlN4SlFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVkQlFVVXNTVUZCUnl4RlFVRkZMRVZCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEhRVUZGTEVsQlFVY3NTVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJSU3hIUVVGRk8wRkJRVVVzWjBKQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc1owSkJRVVU3UVVGQlFTeGpRVUZETEUxQlFVczdRVUZCUVN4alFVRjFRaXhOUVVGTE8wRkJRVUVzWTBGQlZ5eE5RVUZMTzBGQlFVRXNZMEZCVnl4TlFVRkxPMEZCUVVFc1kwRkJTeXhOUVVGTE8wRkJRVUVzWTBGQll5eE5RVUZMTzBGQlFVRXNZMEZCVVN4TlFVRkxPMEZCUVVFc1kwRkJWeXhOUVVGTE8wRkJRVUVzWTBGRE1XVXNUVUZCU3p0QlFVRkJMR05CUVZjc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVZjc1QwRkJUVHRCUVVGQkxHTkJRVmNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxHTkJRVXNzVDBGQlRUdEJRVUZCTEdOQlFVc3NUMEZCVFR0QlFVRkJMR05CUVVzc1QwRkJUVHRCUVVGQkxGbEJRVWs3UVVGQlJTeHhRa0ZCVVN4TFFVRkxPMEZCUVVVc2EwSkJRVVVzUlVGQlJTeFJRVUZSTEVsQlFVa3NUMEZCVHl4SFFVRkZMRWRCUVVjc1IwRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVUZGTEdkQ1FVRkpMRXRCUVVjc01rUkJRVEpFTEUxQlFVMHNSMEZCUnl4SFFVRkZMRXRCUVVjc2QwWkJRWGRHTEUxQlFVMHNSMEZCUnp0QlFVRkZMR2RDUVVGRk8wRkJRVUVzWTBGQlF5eE5RVUZMTEU5QlFVY3NSMEZCUnl4RlFVRkZMRVZCUVVVc1JVRkJSU3hWUVVGVkxFZEJRVVVzUTBGQlF6dEJRVUZCTEdOQlEzSm1MRTFCUVVzc1QwRkJSeXhIUVVGSExFVkJRVVVzUlVGQlJUdEJRVUZCTEdOQlFVVXNUVUZCU3l4UFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFVkJRVVVzVlVGQlZTeEhRVUZGTEVOQlFVTTdRVUZCUVN4alFVRkZMRTFCUVVzc1QwRkJSeXhIUVVGSExFVkJRVVVzUlVGQlJUdEJRVUZCTEdOQlFVVXNUVUZCU3l4UFFVRkhMRWRCUVVjc1JVRkJSU3hMUVVGSExGRkJRVTBzVFVGQlNTeEhRVUZGTEVOQlFVTTdRVUZCUVN4alFVRkZMRTFCUVVzc1QwRkJSeXhGUVVGRkxFVkJRVVVzU1VGQlJ5eERRVUZETzBGQlFVRXNZMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWNzUjBGQlJTeEhRVUZITzBGQlFVRXNZMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEZWQlFWVXNRMEZCUXp0QlFVRkJMR05CUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzUTBGQlF6dEJRVUZCTEdOQlFVVXNUVUZCU3l4UFFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGSExFTkJRVU03UVVGQlFTeGpRVUZGTEUxQlFVc3NUMEZCUnp0QlFVRkRMRzlDUVVGRkxFVkJRVVU3UVVGQlJ5eHhRa0ZCUnl4SlFVRkZMRWxCUVVVc1MwRkJSeXhMUVVGSExFMUJRVWtzUzBGQlJ6dEJRVUZKTEhWQ1FVRlBMRVZCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzWTBGQlF6dEJRVUZCTEdOQlFVVXNUVUZCU3l4UFFVRkhPMEZCUVVNc2VVSkJRVkVzU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUlN4TFFVRkhMRVZCUVVVc1MwRkJSeXhIUVVGRkxFMUJRVWtzUlVGQlJTeEZRVUZGTEV0QlFVY3NTVUZCU1N4SlFVRkZMRXRCUVVjc1NVRkJTU3hIUVVGSE8wRkJRVVU3UVVGQlF5eDFRa0ZCVHl4RlFVRkZMRVZCUVVVc1MwRkJSeXhIUVVGRkxFTkJRVU03UVVGQlFTeGpRVUZETzBGQlFVRXNZMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hGUVVGRkxFdEJRVWNzUjBGQlJTeERRVUZETzBGQlFVRXNZMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWNzUTBGQlF6dEJRVUZCTEdOQlFVVXNUVUZCU3l4TlFVRkpPMEZCUVVFc1kwRkJTeXhOUVVGTExFOUJRVWNzUzBGQlJ5eEZRVUZGTEUxQlFVa3NTMEZCUnl4RlFVRkZMRXRCUVVjc1QwRkJTenRCUVVGQkxHTkJRVXNzVFVGQlN5eFBRVUZITEVWQlFVVXNSVUZCUlN4SlFVRkhMRU5CUVVNN1FVRkJRU3hqUVVGRkxFMUJRVXNzVFVGQlNUdEJRVUZCTEdOQlFVc3NUVUZCU3l4UFFVRkhMRVZCUVVVc1RVRkJTVHRCUVVGQkxHTkJRVVVzVFVGQlN5eFBRVUZITEVWQlFVVXNTMEZCU3l4UFFVRlBMRVZCUVVVc1MwRkRlR1lzU1VGQlJTeEZRVUZGTEUxQlFVa3NRMEZCUXl4SFFVRkZMRU5CUVVNN1FVRkJRU3hqUVVGRkxFMUJRVXNzVDBGQlJ6dEJRVUZETEc5Q1FVRkpMRWxCUVVVc1MwRkJTeXhQUVVGUExFVkJRVVVzUzBGQlJ5eExRVUZITEVWQlFVVXNTMEZCUnl4TFFVRkhMRXRCUVVjc1EwRkJRenRCUVVGRkxITkNRVUZKTEVWQlFVVXNTMEZCUnl4TlFVRkpMRVZCUVVVc1MwRkJSeXhMUVVGSExFdEJRVWM3UVVGQlNTeHZRa0ZCUnp0QlFVRkZMSGRDUVVGSkxFMUJRVWtzUzBGQlJ5eEZRVUZGTEV0QlFVY3NUVUZCU1N4RlFVRkZMRTFCUVVrc1IwRkJSU3hMUVVGSExFdEJRVWNzUzBGQlJ5eExRVUZITEVWQlFVVXNSVUZCUlN4RlFVRkZMRTFCUVVrc1NVRkJSVHRCUVVGQkxIRkNRVUZSTzBGQlFVTXNjMEpCUVVVN1FVRkJSeXh6UWtGQlNTeExRVUZITEVWQlFVVXNTMEZCUnl4SlFVRkZMRVZCUVVVc1MwRkJSeXhMUVVGSE8wRkJRVVVzYlVKQlFVTXNTMEZCUnl4TFFVRkhMRXRCUVVjc1MwRkJSeXhGUVVGRkxFVkJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNUVUZCU1R0QlFVRkJMR2RDUVVGSE8wRkJRVU1zZFVKQlFVOHNSVUZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3hqUVVGRE8wRkJRVUVzWTBGQlJTeE5RVUZMTEU5QlFVY3NSVUZCUlR0QlFVRkJMR05CUVVjc1RVRkJTeXhQUVVGSExFVkJRVVVzUzBGQlN5eFBRVUZQTEVWQlFVVXNTMEZCUnl4TFFVRkhMRVZCUVVVc1MwRkJSeXhMUVVGSExFdEJRVWNzUTBGQlF5eEhRVUZGTEVOQlFVTTdRVUZCUVN4alFVRkZMRTFCUVVzc1VVRkJTU3hGUVVGRkxFdEJRVWNzVFVGQlRTeFRRVUZUTEVWQlFVVXNWVUZCVlN4RFFVRkRPMEZCUVVFc1kwRkJSU3hOUVVGTExFOUJRVWNzUlVGQlJTeExRVUZITzBGQlFVRXNZMEZCU3l4TlFVRkxMRTlCUVVjN1FVRkJReXh2UWtGQlJTeEZRVUZGTzBGQlFVY3NiMEpCUVVrc1NVRkJSU3hMUVVGSE8wRkJRVVVzYjBKQlFVVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGSExIZENRVUZQTEVsQlFVVXNUVUZCU1N4UFFVRkxMRTlCUVU4c1ZVRkJVU3hKUVVGRkxFdEJRVWNzVFVGQlNTeEpRVUZGTEVkQlFVY3NSVUZCUlN4TlFVRk5MRVZCUVVVN1FVRkJRU3hqUVVGRE8wRkJRVUVzWTBGQlJTeE5RVUZMTEU5QlFVY3NSVUZCUlR0QlFVRkJMR05CUVVjc1RVRkJTeXhOUVVGSk8wRkJRVUVzV1VGQlJ6dEJRVUZGTEdkQ1FVRkZMRVZCUVVVN1FVRkJRU3hqUVVGUk8wRkJRVUVzWTBGRGJtWTdRVUZCUVN4WlFVRlZPMEZCUVVVc2FVSkJRVWtzUzBGQlN6dEJRVUZGTEdkQ1FVRkZMRk5CUVZNc1EwRkJReXhOUVVGSkxFbEJRVVVzUlVGQlJTeFJRVUZSTEVsQlFVa3NUMEZCVHl4SFFVRkZMRWRCUVVjc1IwRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZCUnl4blFrRkJSU3hGUVVGRkxGRkJRVkVzVTBGQlVTeEhRVUZITzBGQlFVVXNaMEpCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzWjBKQlFVY3NSVUZCUlN4VFFVRlBPMEZCUVVVc2NVSkJRVTg3UVVGQlJTeGxRVUZITEVkQlFVVXNRMEZCUXp0QlFVRkZMRzFDUVVGUExFVkJRVVVzVTBGQlR6dEJRVUZCTEZWQlFVTTdRVUZCUXl4WlFVRkZMRWRCUVVjN1FVRkRkRXNzWTBGQlNTeExRVUZITEVOQlFVTXNUVUZCU3l4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzUlVGQlJTeEhRVUZGTEV0QlFVYzdRVUZCUVN4WlFVRkRMRWRCUVVVc1UwRkJVeXhIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc1kwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZITEVkQlFVY3NUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJRenRCUVVGRkxHMUNRVUZITzBGQlFVVTdRVUZCU3l4dlFrRkJUVHRCUVVGQkxGbEJRVWM3UVVGQlFTeFpRVUZGTEVkQlFVVXNVMEZCVXl4SFFVRkZPMEZCUVVNc2FVSkJRVWNzVFVGQlNTeEhRVUZGTEVOQlFVTXNSMEZCUlN4SFFVRkZMRU5CUVVNc1NVRkJSeXhSUVVGUExFdEJRVVU3UVVGQlJTeG5Ra0ZCUlN4SFFVRkhPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeFRRVUZUTEVkQlFVVTdRVUZCUXl4eFFrRkJTenRCUVVGRkxHdENRVUZGTEZsQlFWa3NSVUZCUXl4TFFVRkpMR2xDUVVGblFpeFJRVUZQTEVWQlFVTXNRMEZCUXl4SlFVRkZMRWRCUVVjc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVVzVFVGQlNUdEJRVUZCTEZsQlFVY3NSMEZCUlN4VFFVRlRMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNiVUpCUVVjc1RVRkJTU3hKUVVGRkxGZEJRVmNzVFVGQlNTeEZRVUZGTEVOQlFVTXNTVUZCUlN4SlFVRkZMRmxCUVZrc1JVRkJReXhqUVVGaExFZEJRVVVzUzBGQlNTeGxRVUZqTEVOQlFVTXNTMEZCUnl4SlFVRkZMRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVWtzUlVGQlJTeFpRVUZaTEVWQlFVTXNTMEZCU1N4bFFVRmpMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGRGRtZENMRWRCUVVVc1YwRkJWVHRCUVVGRExIRkNRVUZOTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVc1IwRkJSVHRCUVVGQkxGbEJRVWNzUjBGQlJTeFRRVUZUTEVkQlFVVTdRVUZCUXl4dFFrRkJSeXhGUVVGRkxFZEJRVWNzVFVGQlNTeERRVUZETEVWQlFVVXNTVUZCU1R0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVTBGQlV5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR3RDUVVGRkxFbEJRVVVzV1VGQlZTeEpRVUZGTEZWQlFWRXNRMEZCUXl4RFFVRkRMRXRCUVVjc1RVRkJTU3hMUVVGSExHRkJRVmNzU1VGQlJUdEJRVUZKTEhGQ1FVRkxPMEZCUVVVc2EwSkJRVVVzU1VGQlNTeExRVUZMTEUxQlFVa3NRMEZCUXp0QlFVRkZMR2RDUVVGRkxFVkJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMR05CUVdNN1FVRkJSU3huUWtGQlJTeEZRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxHTkJRV003UVVGQlJTeG5Ra0ZCUlN4RlFVRkZMRWxCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZsQlFWazdRVUZCUlN4blFrRkJSU3hGUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMRmRCUVZjN1FVRkJSU3huUWtGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxGbEJRVms3UVVGQlJTeG5Ra0ZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEdWQlFXVXNTVUZCUlR0QlFVRkxMR2RDUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1ZVRkJWVHRCUVVGRkxHMUNRVUZITEVWQlFVVXNVVUZCVVN4SlFVRkZMRXRCUVVzc1NVRkJTU3hGUVVGRkxHVkJRV1VzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhMUVVGSExGRkJRVTA3UVVGQlJTeG5Ra0ZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWRCUVVVc1UwRkJVeXhIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEd0Q1FVRkZMRWxCUTNCbUxGbEJRVlVzU1VGQlJTeFZRVUZSTEVOQlFVTXNRMEZCUXl4TFFVRkhMRTFCUVVrc1MwRkJSeXhoUVVGWExFbEJRVVU3UVVGQlNTeHhRa0ZCU3p0QlFVRkZMR3RDUVVGRkxFbEJRVWtzUzBGQlN5eE5RVUZKTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hGUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4WFFVRlhPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hYUVVGWE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFRRVUZUTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4UlFVRlJPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hUUVVGVE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFpRVUZaTEVsQlFVVTdRVUZCU3l4blFrRkJSU3hGUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMRTlCUVU4N1FVRkJSU3h0UWtGQlJ5eEZRVUZGTEVWQlFVVXNXVUZCV1N4RFFVRkRMRWxCUVVVc1MwRkJSeXhKUVVGSkxFVkJRVVVzVTBGQlV5eERRVUZETEVsQlFVVXNSVUZCUlN4UlFVRlJMRWxCUVVVc1NVRkJSVHRCUVVGRkxHZENRVUZGTEVWQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeExRVUZITEVWQlFVVXNhMEpCUVd0Q08wRkJRVWNzYTBKQlFVY3NTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEZRVUZITEd0Q1FVRnJRanRCUVVGRkxHdENRVUZKTEVsQlFVY3NTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEZRVUZITEd0Q1FVRnJRanRCUVVONlowSXNiVUpCUVVjc1MwRkJSeXhMUVVGSExFVkJRVVVzYTBKQlFXdENMRXRCUVVjc1MwRkJTeXhKUVVGSkxFZEJRVVVzUTBGQlF5eExRVUZITzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hIUVVGRkxGTkJRVk1zUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc2EwSkJRVWtzU1VGQlJTeEpRVUZKTEV0QlFVc3NSVUZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeE5RVUZMTEVWQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFZEJRVVVzUlVGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1IwRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SFFVRkZMRVZCUVVVc1JVRkJSU3hKUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVkQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFZEJRVVVzUTBGQlF5eEhRVUZGTEVsQlFVVXNSVUZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZGTEVWQlFVVXNhMEpCUVd0Q0xFZEJRVVVzU1VGQlJ5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWRCUVVVc1IwRkJSU3hEUVVGRExFVkJRVWNzYTBKQlFXdENMRWRCUVVVc1NVRkJSeXhKUVVGSkxFdEJRVXNzUlVGQlJTeFpRVUZaTEVkQlFVVXNSMEZCUlN4RFFVRkRMRVZCUVVjc2EwSkJRV3RDTEVkQlFVVXNTVUZCUlN4TFFVRkxMRWxCUVVrc1IwRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVVXNTVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEU5QlFVOHNTMEZCUnl4TFFVRkhMRXRCUVVjc1EwRkJReXhKUVVGRkxFbEJRVVVzVFVGQlNTeExRVUZITEU5QlFVc3NTVUZCUlN4TFFVRkxMRWxCUVVrc1IwRkJSU3hEUVVGRExFZEJRVVVzUlVGQlJTeFJRVUZSTEVWQlFVVXNVVUZCVVN4SlFVRkZMRkZCUVUwc1NVRkJSU3hKUVVGRkxFbEJRVVVzUzBGQlJ5eEZRVUZGTzBGQlFVY3NaMEpCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGRGJtWXNRMEZCUXl4SlFVRkZMRVZCUVVVc1QwRkJUenRCUVVGRkxHMUNRVUZITEVWQlFVVXNSVUZCUlN4WlFVRlpMRU5CUVVNc1NVRkJSU3hMUVVGSExFbEJRVWtzUlVGQlJTeFRRVUZUTEVOQlFVTXNTVUZCUlN4RlFVRkZMRkZCUVZFc1NVRkJSU3hKUVVGRk8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlJTeG5Ra0ZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFhRVUZYTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4WFFVRlhPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hUUVVGVE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFJRVUZSTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4VFFVRlRPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hSUVVGUk8wRkJRVVVzYTBKQlFVVXNSVUZCUlN4UlFVRlJMRWxCUVVVN1FVRkJTU3h4UWtGQlR5eEpRVUZKTEVsQlFVVXNSMEZCUlN4TFFVRkhMRU5CUVVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zU1VGQlJTeEpRVUZGTEVsQlFVVXNRMEZCUXl4TFFVRkxMRTFCUVUwc1NVRkJSU3hWUVVGVkxFMUJRVWtzU1VGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRTFCUVUwc1NVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eE5RVUZKTEUxQlFVa3NWVUZCVlN4TlFVRkpMRWxCUVVVc1JVRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEhRVUZGTEZOQlFWTXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXgxUWtGQlV5eEZRVUZGTEVkQlFVVTdRVUZCUXl4M1FrRkJUeXhKUVVGRkxFVkJRVVVzWVVGQllTeEZRVUZGTEUxQlFVMHNiVUpCUVcxQ0xFdEJRM0JtTEVWQlFVVXNRMEZCUXl4SlFVRkZPMEZCUVVFc1kwRkJTenRCUVVGRExIRkNRVUZMTzBGQlFVVXNjVUpCUVVzN1FVRkJSU3h4UWtGQlN6dEJRVUZGTEd0Q1FVRkpMRXRCUVVjc2IwSkJRVWtzVVVGQlRTeFpRVUZaTEVkQlFVVXNTVUZCUlN4SlFVRkpMRXRCUVVzc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeEpRVUZGTEVsQlFVa3NTMEZCU3l4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZGTEVWQlFVVXNhMEpCUVd0Q08wRkJRVVVzYTBKQlFVa3NTVUZCUlN4RlFVRkZMR3RDUVVGclFpeEhRVUZGTEVsQlFVVXNTMEZCU3l4SlFVRkpMRWRCUVVVc1EwRkJRenRCUVVGRkxHZENRVUZGTEVWQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hMUVVGSE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhKUVVGRkxFOUJRVThzUzBGQlJ5eERRVUZETzBGQlFVVXNhMEpCUVVVc1JVRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVVXNSVUZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVVVzUjBGQlJ5eERRVUZETzBGQlFVVXNhMEpCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzYTBKQlFVVXNTMEZCUnl4RlFVRkZMRVZCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zU1VGQlJTeEhRVUZGTEVWQlFVVXNSVUZCUlN4SlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzVFVGQlNTeEZRVUZGTEVWQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hIUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hGUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNSMEZCUlN4WFFVRlZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeFhRVUZWTzBGQlFVTXNjVUpCUVU4c1MwRkJTeXhKUVVGSk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc2IwSkJRVWs3UVVGQlJTeHZRa0ZCU3p0QlFVRkJMRmxCUVZNN1FVRkJRU3haUVVGRkxFZEJRVVVzVjBGQlZUdEJRVUZETEhGQ1FVRlBPMEZCUVVFc1dVRkJWVHRCUVVGQkxGbEJRVVVzUjBGQlJTeE5RVUZKTEZsQlFWa3NZVUZCVnl4WlFVRlpMRWxCUVVrN1FVRkJRU3haUVVGRkxFZEJRVVVzVjBGQlZUdEJRVUZETEhGQ1FVRlBMRWxCUXpkbUxITkRRVUZqTEV0QlFVc3NSVUZCUlN4VFFVRlBMRlZCUVZVN1FVRkJRU3haUVVGdFFqdEJRVUZCTEZsQlFVVXNSMEZCUlN4VFFVRlRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4TFFVRkhMRTFCUVVrN1FVRkJSU3hwUWtGQlJ5eFRRVUZQTzBGQlFVVXNhMEpCUVVVc1RVRkJTU3hMUVVGSE8wRkJRVVVzYlVKQlFVa3NTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSVHRCUVVGSkxHMUNRVUZITEVOQlFVTXNTVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJSU3hOUVVGSkxFTkJRVU03UVVGQlJTeHhRa0ZCVHl4SFFVRkhMRU5CUVVNc1JVRkJSU3hOUVVGTkxFMUJRVXNzUlVGQlJUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWRCUVVVc1UwRkJVeXhIUVVGRk8wRkJRVU1zY1VKQlFVczdRVUZCUlN4clFrRkJTU3hKUVVGRkxFVkJRVVVzUlVGQlJUdEJRVUZQTEd0Q1FVRkhMRXRCUVVjc1MwRkJSeXhoUVVGWE8wRkJRVVVzZFVKQlFVMDdRVUZCUnl4MVFrRkJVU3hKUVVGRkxFZEJRVVVzUzBGQlJ5eEhRVUZGTEV0QlFVY3NSMEZCUlR0QlFVRkRMRzlDUVVGSkxFbEJRVVVzUzBGQlJ5eEpRVUZGTEUxQlFVYzdRVUZCUnl4dlFrRkJSU3hMUVVGTExFbEJRVWtzUjBGQlJTeEpRVUZGTEZOQlFWTTdRVUZCUlN4dlFrRkJTU3hKUVVGRk8wRkJRVXNzYjBKQlFVVXNTMEZCU3l4SlFVRkpMRWRCUVVVc1EwRkJRenRCUVVGRkxHMUNRVUZGTzBGQlFVTXNjMEpCUVVVc1JVRkJSU3hKUVVGSkxFdEJRVXNzUjBGQlJTeFpRVUZYTEV0QlFVY3NVVUZCVFN4SlFVRkZMRk5CUVU4c1MwRkJTeXhKUVVGRkxFVkJRVVVzVDBGQlR5eGhRVUZYTEZWQlFWRTdRVUZCUnl4elFrRkJSenRCUVVGRExITkNRVUZGTEV0QlFVc3NRMEZCUXp0QlFVRkZMSE5DUVVGRk8wRkJRVVVzZDBKQlFVa3NTVUZCUlR0QlFVRkZMREJDUVVGTk8wRkJRVUVzYTBKQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVFc2EwSkJRVU03UVVGQlF5eHpRa0ZCUlR0QlFVRkJMR2RDUVVGTk8wRkJRVU1zYjBKQlFVYzdRVUZCUlN4NVFrRkJUVHRCUVVGQkxHTkJRVVU3UVVGQlF5eHhRa0ZCVFR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVOd1ppeEhRVUZGTzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SFFVRkZMRXRCUVVjc1JVRkJSVHRCUVVGQkxGbEJRVmNzUjBGQlJUdEJRVUZCTEZsQlFVY3NSMEZCUlN4VFFVRlRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRTFCUVVrc1IwRkJSU3hOUVVGSkxFZEJRVVVzVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVVVzVjBGQlF5eFhRVUZWTzBGQlFVTXNjVUpCUVZNc1JVRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHJRa0ZCUlN4RlFVRkZPMEZCUVZFc2EwSkJRVVVzU1VGQlJTeEhRVUZITEVOQlFVTTdRVUZCUlN4blFrRkJSU3hIUVVGSExFdEJRVXNzUlVGQlJTeEZRVUZGTzBGQlFVVXNiVUpCUVVjc1JVRkJSVHRCUVVGSExHbENRVUZITEZGQlFWRXNSVUZCUlN4RFFVRkRPMEZCUVVVc2JVSkJRVWM3UVVGQlJTeHBRa0ZCUnp0QlFVRkZMSEZDUVVGUE8wRkJRVUVzV1VGQlF6dEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJReXhIUVVGRkxFZEJRVVU3UVVGQlJTeGxRVUZITzBGQlFVVXNaMEpCUVVjc1JVRkJSVHRCUVVGblFpeHJRa0ZCUnp0QlFVRkRMSFZDUVVGUExFVkJRVVVzWjBKQlFXZENMRWRCUVVVc1EwRkJRenRCUVVGQkxHTkJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNhMEpCUVVVc2QwUkJRWE5FTEVOQlFVTXNSMEZCUlN4RlFVRkZMRU5CUVVNN1FVRkJRU3hqUVVGRE8wRkJRVU1zWlVGQlJ5eEhRVUZGTEZOQlFWTXNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFVkJRVVVzVlVGQlV5eEZRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFTkJRVU03UVVGQlJTeHRRa0ZCVFN4RFFVRkRPMEZCUVVFc1ZVRkJReXhIUVVGSE8wRkJRVVVzV1VGQlJTeFhRVUZUTEVOQlFVTXNSMEZCUlN4UFFVRkxMRVZCUVVVc1YwRkJVeXhGUVVGRkxFZEJRVWNzUjBGQlJTeERRVUZETzBGQlEzaGtMRmxCUVVVc2JVSkJRV2xDTEVOQlFVTXNSMEZCUlN4UFFVRkxMRVZCUVVVc2JVSkJRV2xDTEVWQlFVVXNSMEZCUnl4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxESkNRVUY1UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3d5UWtGQmVVSXNSVUZCUlN4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxEaENRVUUwUWl4RFFVRkRMRWRCUVVVc1QwRkJTeXhGUVVGRkxEaENRVUUwUWl4RlFVRkZMRWRCUVVjc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTd3JRa0ZCTmtJc1EwRkJReXhIUVVGRkxFZEJRVVVzVDBGQlN5eEZRVUZGTEN0Q1FVRTJRaXhGUVVGRkxFZEJRVWNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMRFJDUVVFd1FpeERRVUZETEVkQlFVVXNSMEZCUlN4UFFVRkxMRVZCUVVVc05FSkJRVEJDTEVWQlFVVXNSMEZCUnl4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGRkxGbEJRVVVzTkVKQlFUQkNMRkZCUVVrc1JVRkJSU3cwUWtGQk1FSXNSVUZCUlN4SlFVRkpMRU5CUVVNN1FVRkRibVFzV1VGQlJTeHZRa0ZCYTBJc1EwRkJReXhIUVVGRkxFZEJRVVVzVDBGQlN5eEZRVUZGTEc5Q1FVRnJRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMSEZDUVVGdFFpeFJRVUZKTEVWQlFVVXNjVUpCUVcxQ0xFVkJRVVVzU1VGQlNTeERRVUZETzBGQlFVVXNXVUZCUlN3d1FrRkJkMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNUMEZCU3l4RlFVRkZMREJDUVVGM1FpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxHMUNRVUZwUWl4RFFVRkRMRWRCUVVVc1QwRkJTeXhGUVVGRkxHMUNRVUZwUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeHZRa0ZCYTBJc1EwRkJReXhIUVVGRkxFOUJRVXNzUlVGQlJTeHZRa0ZCYTBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNWMEZCVXl4UlFVRkpMRVZCUVVVc1YwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVUZGTEZsQlFVVXNiVUpCUVdsQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3h0UWtGQmFVSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4dlFrRkJhMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3h2UWtGQmEwSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVU4wWlN4WlFVRkZMRzlDUVVGclFpeFJRVUZKTEVWQlFVVXNiMEpCUVd0Q0xFVkJRVVVzU1VGQlNTeERRVUZETzBGQlFVVXNXVUZCUlN4MVFrRkJjVUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRVZCUVVVc2RVSkJRWEZDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeDNRa0ZCYzBJc1EwRkJReXhIUVVGRkxFZEJRVVVzVDBGQlN5eEZRVUZGTEhkQ1FVRnpRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMSGRDUVVGelFpeFJRVUZKTEVWQlFVVXNkMEpCUVhOQ0xFVkJRVVVzU1VGQlNTeERRVUZETzBGQlFVVXNXVUZCUlN4dlFrRkJhMElzVVVGQlNTeEZRVUZGTEc5Q1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVUZGTEZsQlFVVXNaMEpCUVdNc1EwRkJReXhIUVVGRkxFZEJRVVVzVDBGQlN5eEZRVUZGTEdkQ1FVRmpMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNhVUpCUVdVc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEVWQlFVVXNhVUpCUVdVc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMSGRDUVVGelFpeFJRVUZKTEVWQlFVVXNkMEpCUVhOQ0xFVkJRVVVzU1VGQlNTeERRVUZETzBGQlEzUmxMRmxCUVVVc2NVSkJRVzFDTEZGQlFVa3NSVUZCUlN4eFFrRkJiVUlzUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZCUlN4WlFVRkZMSEZDUVVGdFFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxIRkNRVUZ0UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4VlFVRlJMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRVZCUVVVc1ZVRkJVU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeHRRa0ZCYVVJc1VVRkJTU3hGUVVGRkxHMUNRVUZwUWl4RlFVRkZMRWxCUVVrc1EwRkJRenRCUVVGRkxHTkJRVWtzU1VGQlJTeEZRVUZGTEdkQ1FVRmpMRTlCUVVzc1NVRkJSU3hGUVVGRkxHZENRVUZqTEVWQlFVVXNTVUZCU1N4SFFVRkZMRXRCUVVjc1JVRkJSU3hWUVVGUkxGRkJRVWtzUzBGQlJ5eEZRVUZGTEZWQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNN1FVRkJSU3haUVVGRkxGRkJRVTBzVVVGQlNTeEZRVUZGTEZGQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNN1FVRkJSU3haUVVGRkxIZENRVUZ6UWl4UFFVRkxMRVZCUVVVc2QwSkJRWE5DTEVWQlFVVXNTVUZCU1R0QlFVTjBZU3hqUVVGSkxFdEJRVWNzUlVGQlJTd3lRa0ZCZVVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc01rSkJRWGxDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNPRUpCUVRSQ0xFOUJRVXNzUlVGQlJTdzRRa0ZCTkVJc1JVRkJSU3hKUVVGSk8wRkJRVVVzWTBGQlNTeExRVUZITEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhSUVVGSkxFdEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc01rSkJRWGxDTEZGQlFVa3NTMEZCUnl4RlFVRkZMREpDUVVGNVFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3cyUWtGQk1rSXNUMEZCU3l4TFFVRkhMRVZCUVVVc05rSkJRVEpDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRXRCUVVjc1VVRkJTU3hMUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVVXNTMEZCUnl4RFFVRkRMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzU1VGQlNTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRTlCUVVzc1MwRkJSeXhGUVVGRkxFbEJRVWtzUjBGQlJTeExRVUZITEZGQlFVa3NTMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGRkxFdEJRVWNzVVVGQlNTeExRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRPMEZCUXpka0xHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2RDUVVGRkxFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVVXNRMEZCUXp0QlFVRkZMR2RDUVVGSkxFbEJRVVVzVDBGQlJ5eE5RVUZKTEVWQlFVVXNUVUZCU1N4SFFVRkZMRWxCUVVVc1QwRkJSeXhQUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZKTzBGQlFVVXNZMEZCUlN4dFFrRkJhVUlzUlVGQlJTeEZRVUZGTEdkQ1FVRm5RanRCUVVGRkxHTkJRVVVzWlVGQllTeEZRVUZGTEVWQlFVVXNXVUZCV1R0QlFVRkZMR05CUVVVc1UwRkJUeXhGUVVGRkxFVkJRVVVzVFVGQlRUdEJRVUZGTEdOQlFVVXNXVUZCVlN4RlFVRkZMRVZCUVVVc1UwRkJVenRCUVVGRkxHTkJRVVVzWVVGQlZ5eEZRVUZGTEVWQlFVVXNWVUZCVlR0QlFVRkZMRzFDUVVGUE8wRkJRVUVzVlVGQlF6dEJRVUZETEZsQlFVVXNiVUpCUVdsQ08wRkJRVVVzV1VGQlJTeGhRVUZYTzBGQlFVVXNXVUZCUlN4aFFVRlhPMEZCUVVjc1dVRkJSU3haUVVGVk8wRkJRVWNzV1VGQlJTeGxRVUZoTzBGQlFVY3NXVUZCUlN4bFFVRmhPMEZCUVVjc1dVRkJSU3hsUVVGaE8wRkJRVWNzV1VGQlJTeHJRa0ZCWjBJN1FVRkJSeXhaUVVGRkxHRkJRVmM3UVVGQlJTeFpRVUZGTEZWQlFWRTdRVUZCUlN4alFVRkpPMEZCUVVjc1kwRkJSU3hUUVVGVExFdEJRVWs3UVVGQlF5eHJRa0ZCU1N4SFFVRkhPMEZCUVVVc2JVSkJRVXNzU1VGQlJUdEJRVUZCTEZWQlFVYzdRVUZET1dJc2JVSkJRVk1zUzBGQlNUdEJRVUZETEhGQ1FVRlRMRWxCUVVjN1FVRkJReXhyUWtGQlJ5eERRVUZETEU5QlFVc3NTMEZCUnl4TlFVRkhMRVZCUVVVc1dVRkJWU3hOUVVGSExFTkJRVU1zU1VGQlJ6dEJRVUZETEhGQ1FVRkhMRWRCUVVjc1JVRkJSVHRCUVVGRkxHMUNRVUZITEVOQlFVTTdRVUZCUlN4dlFrRkJSeXhGUVVGRk8wRkJRWEZDTEc5Q1FVRkZMSEZDUVVGeFFqdEJRVUZGTEc5Q1FVRkhMRU5CUVVNc1IwRkJSVHRCUVVGRExITkNRVUZITEVWQlFVVTdRVUZCVVN4NVFrRkJTU3hqUVVGWkxFOUJRVThzUlVGQlJTeFpRVUZWTEVWQlFVVXNWVUZCVVN4RFFVRkRMRVZCUVVVc1QwRkJUeXhKUVVGSExFVkJRVVVzVVVGQlVTeFZRVUZSTzBGQlFVTXNNRUpCUVVrc1NVRkJSU3hGUVVGRkxGRkJRVkVzVFVGQlRUdEJRVUZGTEhsQ1FVRkhMRkZCUVZFc1EwRkJRenRCUVVGQkxHOUNRVUZETzBGQlFVTXNjVUpCUVVjc1JVRkJSVHRCUVVGQkxHZENRVUZETzBGQlFVRXNZMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJReXhuUWtGQlJ5eEZRVUZGTEVsQlFVVTdRVUZCUnl4clFrRkJSenRCUVVGRkxHMUNRVUZITEVOQlFVTXNSMEZCUlN4TFFVRkhMRWRCUVVjc1JVRkJSU3hIUVVGRkxGbEJRVmtzUTBGQlF6dEJRVUZCTEcxQ1FVRk5PMEZCUVVNc2IwSkJRVWNzUlVGQlJUdEJRVUZQTEhWQ1FVRkpMR05CUVZrc1QwRkJUeXhGUVVGRkxGZEJRVk1zUlVGQlJTeFRRVUZQTEVOQlFVTXNSVUZCUlN4TlFVRk5MRWxCUVVjc1JVRkJSU3hQUVVGUE8wRkJRVkVzZFVKQlFVY3NVVUZCVVN4RlFVRkZMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRVVVzYlVKQlFVY3NSVUZCUlR0QlFVRkZMRzlDUVVGRkxFMUJRVWtzUlVGQlJTeGhRVUZYTEVWQlFVVXNWVUZCVlN4WlFVRlpMRWRCUVVVc1YwRkJWeXhYUVVGVk8wRkJRVU03UVVGQlFTeHZRa0ZCVnl4WFFVRlZPMEZCUVVNc2QwSkJRVVVzVlVGQlZTeEZRVUZGTzBGQlFVRXNiMEpCUVVNN1FVRkJRU3h2UWtGRGNHbENPMEZCUVVFc2EwSkJRVU03UVVGQlJTeHZRa0ZCUlR0QlFVRkJMR2RDUVVGRExFZEJRVVVzUTBGQlF5eExRVUZITEVWQlFVVTdRVUZCUVN4alFVRkZPMEZCUVVFc1ZVRkJRenRCUVVGRExHTkJRVWNzUlVGQlJUdEJRVUZSTEdsQ1FVRkpMR05CUVZrc1QwRkJUeXhGUVVGRkxGbEJRVlVzUlVGQlJTeFZRVUZSTEVOQlFVTXNSVUZCUlN4UFFVRlBMRWxCUVVjc1NVRkJSU3hGUVVGRkxGRkJRVkU3UVVGQlVTeG5Ra0ZCUlN4UlFVRlJMRWxCUVVrc1JVRkJSVHRCUVVGRkxHRkJRVWM3UVVGSGFFa3NhVUpCUVU4c1ZVRkJWVHRCUVVGQkxGRkJRMjVDTzBGQlFVRXNUVUZIUVN4SFFVRkhPMEZCUTBnc1ZVRkJTU3hQUVVGUExGbEJRVmtzV1VGQldTeFBRVUZQTEZkQlFWYzdRVUZEYmtRc1pVRkJUeXhWUVVGVk8wRkJRVUVzWlVGRFZpeFBRVUZQTEZkQlFWY3NZMEZCWXl4UFFVRlBMRXRCUVVzN1FVRkRia1FzWlVGQlR5eERRVUZETEVkQlFVY3NUVUZCVFN4bFFVRmxPMEZCUVVFN1FVRkJRVHM3TzBGRGRFVnNRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCT3pzN1FVTkJUeXhOUVVGTkxFOUJRVTg3T3p0QlExVndRaXhOUVVGSk8wRkJSVW9zVFVGQlNTeE5RVUU0UWp0QlFVTm9ReXh4UWtGQmFVSTdRVUZCUVN4RlFVTnVRaXhQUVVGUE8wRkJRMHdzY1VKQlEwa3NUMEZCTkVJc1QwRkJiVU03UVVGQlFTeEZRVU55UlR0QlFVVkJMRTFCUVUwc2VVSkJRV2xGTEU5QlEyeEZMRTlCUVRSQ0xEaENRVU5CTEU5QlF6ZENPMEZCUjBvc1RVRkJTVHRCUVVOS0xFMUJRVWtzWTBGQll6dEJRVU5zUWl4TlFVRkpMR1ZCUVdVN1FVRkRia0lzVFVGQlNTeFZRVUZWTzBGQlJXUXNUVUZCVFN4NVFrRkJlVUlzUTBGQlF5eGxRVUZuUXp0QlFVVTVSQ3hSUVVGSkxHVkJRV1VzUjBGQlJ6dEJRVU53UWl4aFFVRlBPMEZCUVVFc1NVRkRWRHRCUVVkQkxGRkJRVWtzVDBGQlR5eHpRa0ZCYzBJc1lVRkJZVHRCUVVNMVF5eFZRVUZKTEU5QlFVOHNVMEZCVXl4bFFVRmxMRU5CUVVNc1MwRkJTeXh4UWtGQmNVSTdRVUZGTlVRc1owSkJRVkU3UVVGQlFTeFZRVU5LTEcxRFFVRnRReXhoUVVOdVF6dEJRVUZCTEZGQlEydEZPMEZCUVVFc1RVRkRlRVU3UVVGRFFTeGhRVUZQTzBGQlFVRXNTVUZEVkR0QlFVZEJMRkZCUVVrc1QwRkJUeXhaUVVGWkxHVkJRV1VzVVVGQlVTeFpRVUZaTEZGQlFWRXNVMEZCVXl4TlFVRk5PMEZCUlM5RkxHTkJRVkU3UVVGQlFTeFJRVU5LTEcxRFFVRnRReXhoUVVOdVF6dEJRVUZCTEUxQlF6UkZPMEZCUVVFc1NVRkRiRVk3UVVGRlFTeFJRVUZKTzBGQlIwWXNWVUZCU1N4UFFVRlBMRzFDUVVGdFFpeGhRVUZoTzBGQlEzcERMRmxCUVVrc1pVRkJaU3hGUVVGRkxFMUJRVTBzV1VGQldTeEpRVUZKTEd0Q1FVRnJRaXhEUVVGRExFTkJRVU03UVVGQlFTeE5RVU5xUlR0QlFVbEJMR0ZCUVU4c1dVRkJXU3hUUVVGVExFbEJRVWtzVjBGQlZ6dEJRVUZCTEZGQlEzcERPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWs3UVVGQlFTeFJRVUZMTzBGQlFVRXNVVUZCU3p0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGSk8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWs3UVVGQlFTeFJRVUZKTzBGQlFVRXNVVUZCU3p0QlFVRkJMRkZCUVVrN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVazdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkRia1U3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCU1R0QlFVRkJMRkZCUVVzN1FVRkJRU3hSUVVGTE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVazdRVUZCUVN4UlFVRkpPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCU1R0QlFVRkJMRkZCUVVrN1FVRkJRU3hSUVVGTE8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJTVHRCUVVGQkxFMUJRMnhGTEVOQlFVTXNRMEZCUXp0QlFVRkJMRWxCUTBvc1UwRkJVeXhIUVVGSE8wRkJRMVlzWVVGQlR6dEJRVUZCTEVsQlExUTdRVUZCUVN4RlFVTkdPMEZCUlVFc1RVRkJUU3hyUWtGQmEwSXNUVUZCWlR0QlFVTnlReXhSUVVGSk8wRkJaVVlzWVVGQlR5eFpRVUZaTEZOQlFWTXNTVUZCU1N4WFFVRlhPMEZCUVVFc1VVRkRla003UVVGQlFTeFJRVUZMTzBGQlFVRXNVVUZCU1R0QlFVRkJMRkZCUVVzN1FVRkJRU3hSUVVGTE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVrN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZKTzBGQlFVRXNVVUZCU1R0QlFVRkJMRkZCUVVzN1FVRkJRU3hSUVVGTE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVazdRVUZCUVN4UlFVTjJSanRCUVVGQkxGRkJRVXM3UVVGQlFTeFJRVUZKTzBGQlFVRXNVVUZCU3p0QlFVRkJMRkZCUVVzN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCU1R0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWs3UVVGQlFTeFJRVUZKTzBGQlFVRXNVVUZCU3p0QlFVRkJMRkZCUVVzN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlNUdEJRVUZCTEUxQlEzcEdMRU5CUVVNc1EwRkJRenRCUVVGQkxFbEJRMG9zVTBGQlV5eEhRVUZITzBGQlExWXNZVUZCVHp0QlFVRkJMRWxCUTFRN1FVRkJRU3hGUVVOR08wRkJSVUVzVFVGQlRTeHJRa0ZCYTBJc1EwRkJReXhUUVVGclFpeGxRVUYzUWp0QlFVTnFSU3hSUVVGSkxGTkJRVk03UVVGRFdDeFZRVUZKTEUxQlFUaENPMEZCUTJoRExHVkJRVTg3UVVGQlFTeE5RVU5VTzBGQlEwRXNZVUZCVHl4aFFVRmhMR2REUVVGblF6dEJRVUZCTEVsQlEzUkVMRTlCUVU4N1FVRkRUQ3hoUVVGUExHRkJRV0VzTWtKQlFUSkNPMEZCUVVFc1NVRkRha1E3UVVGQlFTeEZRVU5HTzBGQlJVOHNUVUZCVFN4M1FrRkJkMElzVDBGQlRTeFZRVUVyUXp0QlFVTjRSaXhSUVVGSkxHRkJRV0U3UVVGRFppeGhRVUZQTEZGQlFWRXNVVUZCVVR0QlFVRkJMRWxCUTNwQ08wRkJRMEVzVVVGQlNTeGpRVUZqTzBGQlEyaENMRmxCUVUwc1NVRkJTU3hOUVVGTkxIVkVRVUY1UkR0QlFVRkJMRWxCUXpORk8wRkJRMEVzVVVGQlNTeFRRVUZUTzBGQlExZ3NXVUZCVFN4SlFVRkpMRTFCUVUwc2IwUkJRWE5FTzBGQlFVRXNTVUZEZUVVN1FVRkZRU3h0UWtGQlpUdEJRVWRtTEZWQlFVMHNWVUZCVlN4TlFVRk5PMEZCUTNSQ0xGVkJRVTBzWVVGQllTeE5RVUZOTzBGQlEzcENMRlZCUVUwc1QwRkJUeXhOUVVGTk8wRkJSVzVDTEZWQlFVMHNZVUZCWVN4MVFrRkJkVUlzVlVGQlZUdEJRVU53UkN4VlFVRk5MRlZCUVZVc1VVRkJVU3huUWtGQlowSTdRVUZGZUVNc1ZVRkJUU3haUVVGWkxFMUJRVTA3UVVGRGVFSXNWVUZCVFN4eFFrRkJjVUlzVDBGQlR5eGpRVUZqTEZkQlFWY3NXVUZCV1R0QlFVTjJSU3hWUVVGTkxHVkJRV1VzWjBKQlFXZENMRk5CUVZNc1ZVRkJWVHRCUVVONFJDeFZRVUZOTEcxQ1FVRnRRaXhQUVVGUExHTkJRV01zVjBGQlZ5eFZRVUZWTEZsQlFWa3NTVUZCU1R0QlFVVnVSaXhSUVVGSkxGbEJRVms3UVVGRmFFSXNWVUZCVFN4UlFVRTRRaXhEUVVGRE8wRkJSM0pETEZGQlFVa3NWVUZCVlN4SFFVRkhPMEZCUTJZc1dVRkJUU3hMUVVGTExFbEJRVWtzVVVGQlVTeERRVUZETEZsQlFWazdRVUZEYkVNc2JVSkJRVmNzVFVGQlRUdEJRVU5tTEhOQ1FVRlpPMEZCUTFvc2EwSkJRVkU3UVVGQlFTeFJRVU5XTEVkQlFVY3NUMEZCVHp0QlFVRkJMRTFCUTFvc1EwRkJReXhEUVVGRE8wRkJRVUVzU1VGRFNqdEJRVWRCTEZWQlFVMHNTMEZCU3l4SlFVRkpMRkZCUVZFc1EwRkJReXhUUVVGVExGZEJRVmM3UVVGRE1VTXNXVUZCVFN4VlFVRlZMR0ZCUVdFc2VVSkJRWGxDTzBGQlEzUkVMRmxCUVUwc1UwRkJhVU03UVVGQlFTeFJRVU55UXl4WlFVRlpMRU5CUVVNc1ZVRkJhMElzYjBKQlFUUkNPMEZCUTNwRUxHTkJRWFZETEdOQlFXTXNVMEZCVXl4VFFVRlRMRmxCUVZrc1MwRkRMMFVzVDBGQlR5eFRRVUZUTEdGQlFXRTdRVUZETDBJc2JVSkJRVThzU1VGQlNTeG5Ra0ZCWjBJc1NVRkJTVHRCUVVGQkxHTkJRek5DTzBGQlFVRTdRVUZCUVR0QlFVRkJMR2RDUVVkRk8wRkJRVUVzWTBGRFJqdEJRVUZCTEdOQlEwRXNSVUZCUXl4TlFVRk5MR3RDUVVGcFFqdEJRVUZCTEZsQlFVTXNRMEZCUXp0QlFVRkJMRlZCUTJoRE8wRkJSVUVzWTBGQlNTeFRRVUZUTEZOQlFWTXNUMEZCVHl4SFFVRkhPMEZCUXpsQ0xHZENRVUZKTEd0Q1FVRnJRanRCUVVOd1FpeHhRa0ZCVHp0QlFVRkJMRmxCUTFRN1FVRkZRU3hyUWtGQlRTeFRRVUZUTEhOQ1FVRnpRanRCUVVWeVF5eG5Ra0ZCU1N4UFFVRTBRanRCUVVNNVFpeHJRa0ZCU1N4cFFrRkJhVUlzYzBKQlFYTkNPMEZCUTNwRExIVkNRVUZQTEZOQlFWTTdRVUZCUVN4alFVTnNRaXhYUVVGWExHbENRVUZwUWl3clFrRkJLMEk3UVVGRGVrUXNkVUpCUVU4c1UwRkJVenRCUVVGQkxHTkJRMnhDTzBGQlFVRXNXVUZEUmp0QlFVVkJMRzFDUVVGUExGTkJRVk03UVVGQlFTeFZRVU5zUWp0QlFVVkJMR2xDUVVGUExHdENRVUZyUWp0QlFVRkJMRkZCUXpOQ08wRkJRVUVzVFVGRFJqdEJRVVZCTEZWQlFYVkRMRmxCUVZrN1FVRkRha1FzWlVGQlR5eGhRVUZoTzBGQlEzQkNMRmxCUVVrc1QwRkJUeXhUUVVGVExHRkJRV0U3UVVGREwwSXNhVUpCUVU4c2MwSkJRVEpDTEV0QlFVc3NWMEZCVnl4elFrRkJjMEk3UVVGQlFTeFJRVU14UlN4UFFVRlBPMEZCUTB3c1owSkJRVTBzYlVKQlFXMUNMSFZDUVVGMVFpeFJRVUZSTEZOQlFWTXNRMEZCUXp0QlFVTnNSU3hwUWtGQlR5eHpRa0ZCYzBJc1NVRkJTU3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRWRCUVVjc1JVRkJReXhOUVVGTkxHdENRVUZwUWl4RFFVRkRPMEZCUVVFc1VVRkRja1k3UVVGQlFTeE5RVU5HTzBGQlJVRXNZMEZCVVN4TlFVRk5MRVZCUVVVN1FVRkJRVHRCUVVGQkxGRkJSVm9zV1VGQlZUdEJRVU5TTEhsQ1FVRmxPMEZCUTJZc2QwSkJRV003UVVGRFpDeHBRa0ZCVHp0QlFVTlFMR3RDUVVGUk8wRkJRVUVzVVVGRFZqdEJRVUZCTzBGQlFVRXNVVUZGUVN4RFFVRkRMRk5CUVZNN1FVRkRVaXg1UWtGQlpUdEJRVU5tTEc5Q1FVRlZPMEZCUTFZc2FVSkJRVThzU1VGQlNUdEJRVUZCTEZGQlEySTdRVUZCUVN4TlFVRkRPMEZCUVVFc1NVRkRVQ3hEUVVGRExFTkJRVU03UVVGRlJpeFZRVUZOTEZGQlFWRXNTMEZCU3l4TFFVRkxPMEZCUlhoQ0xGRkJRVWtzVjBGQlZ6dEJRVU5pTEZsQlFVMHNTVUZCU1N4TlFVRk5MREpFUVVFeVJDeFBRVUZQTEVsQlFVazdRVUZCUVN4SlFVTjRSanRCUVVGQkxFVkJRMFk3UVVGRlR5eE5RVUZOTEdOQlFXTXNUVUZCY1VJN1FVRkRPVU1zVVVGQlNTeGxRVUZsTEUxQlFVMDdRVUZEZGtJc1lVRkJUenRCUVVGQkxFbEJRMVE3UVVGRlFTeFZRVUZOTEVsQlFVa3NUVUZCVFN4eFEwRkJjVU03UVVGQlFTeEZRVU4yUkRzN08wRkRMMDVQTEUxQlFVMHNhMEpCUVd0Q0xFTkJRVU1zVFVGQll5eFhRVUUyUWp0QlFVTjZSU3hWUVVGTlF5eFJRVUZQTEZsQlFWazdRVUZGZWtJc1ZVRkJUU3hoUVVGaFFTeE5RVUZMTEdkQ1FVRm5RaXhKUVVGSkxFbEJRVWs3UVVGRGFFUXNWVUZCVFN4aFFVRmhRU3hOUVVGTExGRkJRVkVzVlVGQlZUdEJRVU14UXl4SlFVRkJRU3hOUVVGTExHRkJRV0VzVFVGQlRTeFpRVUZaTEZWQlFWVTdRVUZET1VNc1YwRkJUeXhMUVVGTExGVkJRVlU3UVVGRmRFSXNWMEZCVHp0QlFVRkJMRVZCUTFRN1FVRk5UeXhOUVVGTkxITkNRVU5VTEVOQlFVTXNVMEZCYTBNc1VVRkJaMElzVFVGRGJFUXNXVUZCZFVNN1FVRkRkRU1zVVVGQlNTeFBRVUZQTEZkQlFWY3NXVUZCV1N4WlFVRlpMRTFCUVUwN1FVRkRiRVFzVlVGQlNTeExRVUZMTEVsQlFVa3NUMEZCVHl4SFFVRkhPMEZCUTNKQ0xHTkJRVTBzU1VGQlNTeE5RVUZOTEN0Q1FVRXJRanRCUVVGQkxFMUJRMnBFTEU5QlFVODdRVUZEVEN4aFFVRkxMRWxCUVVrc1QwRkJUenRCUVVGQkxFMUJRMnhDTzBGQlFVRXNTVUZEUmp0QlFVVkJMRmRCUVU4c1VVRkJVU3hQUVVGUExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNTMEZCU3l4TFFVRkxMRTFCUVUwN1FVRkRhRVFzV1VGQlRTeFBRVUZSTEZOQlFWVXNVMEZCVXl4TlFVRk5PMEZCUTNaRExGVkJRVWtzVDBGQlR5eFZRVUZWTEZWQlFWVTdRVUZETjBJc05FSkJRVzlDTEU5QlFXdERMRTlCUVU4c1MwRkJTeXhOUVVGTkxFOUJRVTg3UVVGQlFTeE5RVU5xUml4WFFVRlhMRTlCUVU4c1ZVRkJWU3haUVVGWkxFOUJRVThzVlVGQlZTeFZRVUZWTzBGQlEycEZMR2RDUVVGUkxFMUJRVTBzVFVGQlRTeFRRVUZUTEVOQlFVTTdRVUZCUVN4TlFVTm9ReXhYUVVGWExFOUJRVThzVlVGQlZTeFhRVUZYTzBGQlEzSkRMR2RDUVVGUkxFMUJRVThzVVVGQlV5eE5RVUZOTEVkQlFVYzdRVUZCUVN4TlFVTnVReXhQUVVGUE8wRkJRMHdzWTBGQlRTeEpRVUZKTEUxQlFVMHNiVU5CUVcxRExFOUJRVThzUzBGQlN5eEZRVUZGTzBGQlFVRXNUVUZEYmtVN1FVRkJRU3hKUVVOR0xFTkJRVU03UVVGQlFTeEZRVU5JTzBGQlRVY3NUVUZCVFN4cFFrRkJhVUlzUTBGQlF5eFpRVUV3UWp0QlFVTjJSQ3hWUVVGTlFTeFJRVUZQTEZsQlFWazdRVUZGZWtJc1ZVRkJUU3hSUVVGUlFTeE5RVUZMTEZWQlFWVTdRVUZETjBJc1VVRkJTVHRCUVVOR0xGbEJRVTBzWlVGQlpVRXNUVUZCU3l4WFFVRlhMRU5CUVVNN1FVRkRkRU1zVFVGQlFVRXNUVUZCU3l4cFFrRkJhVUlzWTBGQll5eGxRVUZsTEVOQlFVTTdRVUZEY0VRc1dVRkJUU3haUVVGWlFTeE5RVUZMTEU5QlFVOHNaVUZCWlN4RFFVRkRPMEZCUXpsRExGbEJRVTBzYzBKQlFYTkNRU3hOUVVGTExGRkJRVkVzWlVGQlpTeEpRVUZKTEVOQlFVTTdRVUZETjBRc1dVRkJUU3hsUVVGbExITkNRVUZ6UWtFc1RVRkJTeXhoUVVGaExHMUNRVUZ0UWl4SlFVRkpPMEZCUTNCR0xGbEJRVTBzU1VGQlNTeE5RVUZOTEVkQlFVY3NUMEZCVHl4blFrRkJaMElzVTBGQlV5eHZRa0ZCYjBJc1dVRkJXU3hGUVVGRk8wRkJRVUVzU1VGRGRrWXNWVUZCUlR0QlFVTkJMRTFCUVVGQkxFMUJRVXNzWVVGQllTeExRVUZMTzBGQlFVRXNTVUZEZWtJN1FVRkJRU3hGUVVOR096czdRVU4yUkU4c1RVRkJUU3huUWtGQlowSXNRMEZCUXl4WlFVRTJSRHRCUVVONlJpeFZRVUZOUXl4UlFVRlBMRmxCUVZrN1FVRkRla0lzVVVGQlNTeHRRa0ZCYlVJN1FVRkRka0lzVlVGQlRTeFRRVUZ0UWl4RFFVRkRPMEZCUlRGQ0xGVkJRVTBzWVVGQk1FTXNWMEZCVnl4RFFVRkRPMEZCUlRWRUxGRkJRVWs3UVVGRFJpeFZRVUZKTEZOQlFWTXNjVUpCUVhGQ0xGRkJRVmM3UVVGRE0wTXNiVUpCUVZjc2JVSkJRVzFDTzBGQlFVRXNUVUZEYUVNc1YwRkRTU3hQUVVGUExGRkJRVkVzY1VKQlFYRkNMRmxCUVZrc1EwRkJReXhQUVVGUExGVkJRVlVzVVVGQlVTeG5Ra0ZCWjBJc1MwRkRNVVlzVVVGQlVTeHRRa0ZCYlVJc1MwRkJTeXhSUVVGUkxHMUNRVUZ0UWl4SFFVRkhPMEZCUTJoRkxHTkJRVTBzU1VGQlNTeE5RVUZOTEhGRFFVRnhReXhSUVVGUkxHZENRVUZuUWl4RlFVRkZPMEZCUVVFc1RVRkRha1k3UVVGRlFTeFZRVUZKTEZOQlFWTXNjMEpCUVhOQ0xGRkJRVmM3UVVGRE5VTXNiVUpCUVZjc2IwSkJRVzlDTzBGQlFVRXNUVUZEYWtNc1YwRkJWeXhQUVVGUExGRkJRVkVzYzBKQlFYTkNMRmxCUVZrc1EwRkJReXhQUVVGUExGVkJRVlVzVVVGQlVTeHBRa0ZCYVVJc1IwRkJSenRCUVVONFJ5eGpRVUZOTEVsQlFVa3NUVUZCVFN4eFEwRkJjVU1zVVVGQlVTeHBRa0ZCYVVJc1JVRkJSVHRCUVVGQkxFMUJRMnhHTzBGQlJVRXNWVUZCU1N4VFFVRlRMR05CUVdNc1VVRkJWenRCUVVOd1F5eHRRa0ZCVnl4WlFVRlpPMEZCUVVFc1RVRkRla0k3UVVGRlFTeFZRVUZKTEdkQ1FVRm5RanRCUVVOd1FpeFZRVUZKTEZOQlFWTXNVVUZCVVN4UlFVRlhPMEZCUXpsQ0xIZENRVUZuUWl4blFrRkJaMElzVVVGQlVTeExRVUZMTEUxQlFVMDdRVUZCUVN4TlFVTnlSRHRCUVVWQkxIbENRVUZ0UWtFc1RVRkJTenRCUVVGQkxGRkJRM0JDTEZkQlFWYzdRVUZCUVN4UlFVRnRRaXhYUVVGWE8wRkJRVUVzVVVGQmIwSXNRMEZCUXl4RFFVRkRMRmRCUVZjN1FVRkJRU3hSUVVGWk8wRkJRVUVzVFVGQllUdEJRVU4yUnl4VlFVRkpMSEZDUVVGeFFpeEhRVUZITzBGQlF6RkNMSFZDUVVGbExESkNRVUUwUWp0QlFVRkJMRTFCUXpkRE8wRkJSVUVzVlVGQlNTeFRRVUZUTEZWQlFWVXNVVUZCVnp0QlFVTm9ReXcwUWtGQmIwSXNVVUZCVVN4UFFVRlBMRWxCUVVrc2IwSkJRVWtzVVVGQmFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1ZVRkJWVHRCUVVNM1JpeG5Ra0ZCVFN4blFrRkJaMElzWjBKQlFXZENMRXRCUVVzc1RVRkJUVHRCUVVOcVJDeG5Ra0ZCVFN4clFrRkJhMElzWjBKQlFXZENMRTlCUVU4c1RVRkJUVHRCUVVWeVJDeGpRVUZKUVN4TlFVRkxMSE5DUVVGelFpeHJRa0ZCYTBJc1pVRkJaU3hsUVVGbExFMUJRVTBzUjBGQlJ6dEJRVU4wUml3eVFrRkJaU3hwUTBGQmFVTXNSMEZCUnl4TlFVRk5MRXRCUVVzc1IwRkJSenRCUVVGQkxGVkJRMjVGTzBGQlFVRXNVVUZEUml4RFFVRkRPMEZCUVVFc1RVRkRTRHRCUVVWQkxHRkJRVThzUTBGQlF5eHJRa0ZCYTBJc1RVRkJUVHRCUVVGQkxFbEJRMnhETEZOQlFWTXNSMEZCUnp0QlFVTldMRlZCUVVrc2NVSkJRWEZDTEVkQlFVYzdRVUZETVVJc1VVRkJRVUVzVFVGQlN5eHpRa0ZCYzBJc1owSkJRV2RDTzBGQlFVRXNUVUZETjBNN1FVRkRRU3hoUVVGUExGRkJRVkVzVjBGQlUwRXNUVUZCU3l4TlFVRk5MRXRCUVVzc1EwRkJRenRCUVVONlF5eFpRVUZOTzBGQlFVRXNTVUZEVWp0QlFVRkJMRVZCUTBZN096dEJRM2hFUVN4TlFVRk5MREpDUVVFeVFpeERRVUZETERKQ1FVRnRSRHRCUVVOdVJpeFpRVUZSTEhkQ1FVRjNRanRCUVVGQkxFMUJRemxDTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUXNTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVOVUxFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkR0QlFVTkZMR05CUVUwc1NVRkJTU3hOUVVGTkxIbERRVUY1UXl4elFrRkJjMElzUlVGQlJUdEJRVUZCTEVsQlEzSkdPMEZCUVVFc1JVRkRSanRCUVVWQkxFMUJRVTBzYlVKQlFXMUNMRU5CUVVNc2EwSkJRVzFFTzBGQlF6TkZMRmxCUVZFc1pVRkJaVHRCUVVGQkxFMUJRM0pDTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZEUlN4alFVRk5MRWxCUVVrc1RVRkJUU3dyUWtGQkswSXNZVUZCWVN4RlFVRkZPMEZCUVVFc1NVRkRiRVU3UVVGQlFTeEZRVU5HTzBGQlJVRXNUVUZCVFN4MVFrRkJkVUlzUTBGQlF5eFpRVUZ0UkR0QlFVTXZSU3hSUVVGSkxFTkJRVU1zVVVGQlVTeFBRVUZQTzBGQlEyeENMR05CUVZFc1VVRkJVU3hEUVVGRE8wRkJRVUVzU1VGRGJrSTdRVUZEUVN4UlFVRkpMRU5CUVVNc1VVRkJVU3hOUVVGTkxGTkJRVk03UVVGRE1VSXNZMEZCVVN4TlFVRk5MRlZCUVZVc1EwRkJRenRCUVVGQkxFbEJRek5DTzBGQlEwRXNWVUZCVFN4VlFVRlZMRkZCUVZFc1RVRkJUVHRCUVVNNVFpeFJRVUZKTEVOQlFVTXNVVUZCVVN3NFFrRkJPRUk3UVVGRmVrTXNZMEZCVVN3clFrRkJLMEk3UVVGQlFTeEpRVU42UXp0QlFVZEJMRkZCUVVrc1VVRkJVU3h6UWtGRFVpeFJRVUZSTEcxQ1FVRnRRaXhMUVVGTExGTkJRVThzVDBGQlR5eFBRVUZQTEZkQlFWY3NTMEZCU3l4SFFVRkhMRlZCUVZVc1VVRkJVU3hIUVVGSE8wRkJReTlHTEdOQlFWRXNiVUpCUVcxQ08wRkJRVUVzU1VGRE4wSTdRVUZCUVN4RlFVTkdPMEZCUlVFc1RVRkJUU3gzUWtGRFJpeERRVUZETEhOQ1FVRTRRaXh2UWtGRE9VSXNWMEZCTWtJN1FVRkRNVUlzWlVGQlZ5eE5RVUZOTEc5Q1FVRnZRanRCUVVOdVF5eFZRVUZKTEZOQlFWTXNUMEZCVHl4UFFVRlBMRmRCUVZjc1MwRkJTeXhIUVVGSE8wRkJSemxETEdOQlFWRXNVVUZCVVR0QlFVRkJMRkZCUTJRc1MwRkJTenRCUVVOSUxHMUNRVUZUTzBGQlExUXNZMEZCU1N4UFFVRlBMRTlCUVU4c1ZVRkJWVHRCUVVNeFFpeHJRa0ZCVFN4bFFVRmxPMEZCUTNKQ0xHZENRVUZKTEdOQlFXTXNXVUZCV1R0QlFVTTFRaXh2UWtGQlRTeG5Ra0ZCWjBJc1owSkJRV2RDTEdOQlFXTXNUVUZCVFR0QlFVTXhSQ3h2UWtGQlRTeHJRa0ZCYTBJc1owSkJRV2RDTEdGQlFXRXNXVUZCV1N4TlFVRk5PMEZCUTNaRkxHdENRVUZKTEZsQlFWa3NSVUZCUlN3d1FrRkJNRUlzYzBKQlFYTkNMR1ZCUVdVc1pVRkJaU3hOUVVNMVJpeEhRVUZITzBGQlEwd3NLMEpCUVdVc2IwUkJRVzlFTEdGQlFXRXNWVUZCVlN4SFFVRkhPMEZCUVVFc1kwRkRMMFk3UVVGQlFTeFpRVU5HTzBGQlEwRXNaMEpCUVVrc1kwRkJZeXhaUVVGWk8wRkJRelZDTEd0Q1FVRkpMR0ZCUVdFc1lVRkJZVHRCUVVVNVFpeHJRa0ZCU1N4UFFVRlBMR05CUVdNc1dVRkJXU3hEUVVGRExFOUJRVThzVlVGQlZTeFZRVUZWTEV0QlFVc3NZVUZCWVN4SFFVRkhPMEZCUTNCR0xEWkNRVUZoTzBGQlFVRXNZMEZEWmp0QlFVTkJMRzlDUVVGTkxHZENRVUZuUWl4blFrRkJaMElzWTBGQll5eE5RVUZOTzBGQlF6RkVMRzlDUVVGTkxHdENRVUZyUWl4blFrRkJaMElzVjBGQlZ5eFRRVUZUTEVkQlFVY3NUVUZCVFR0QlFVTnlSU3hyUWtGQlNTeFpRVUZaTEVWQlFVVXNNRUpCUVRCQ0xITkNRVUZ6UWl4bFFVRmxMR1ZCUVdVc1RVRkROVVlzUjBGQlJ6dEJRVU5NTEN0Q1FVRmxMRzlFUVVGdlJDeGhRVUZoTEZWQlFWVXNSMEZCUnp0QlFVRkJMR05CUXk5R08wRkJRVUVzV1VGRFJqdEJRVU5CTEdkQ1FVRkpMR05CUVdNc2FVSkJRV2xDTzBGQlEycERMRzlDUVVGTkxHZENRVUZuUWl4blFrRkJaMElzYlVKQlFXMUNMRTFCUVUwN1FVRkRMMFFzYjBKQlFVMHNhMEpCUVd0Q0xHZENRVUZuUWl4aFFVRmhMR2xDUVVGcFFpeE5RVUZOTzBGQlF6VkZMR3RDUVVGSkxGbEJRVmtzUlVGQlJTd3dRa0ZCTUVJc2MwSkJRWE5DTEdWQlFXVXNaVUZCWlN4TlFVTTFSaXhIUVVGSE8wRkJRMHc3UVVGQlFTeHJRa0ZEU1N4NVJFRkJlVVFzWVVGQllTeGxRVUZsTzBGQlFVRXNaMEpCUVVjN1FVRkJRU3hqUVVNNVJqdEJRVUZCTEZsQlEwWTdRVUZCUVN4VlFVTkdPMEZCUTBFN1FVRkJRU3hSUVVOR0xFdEJRVXM3UVVGRFNDeHRRa0ZCVXp0QlFVTlVMR05CUVVrc1QwRkJUeXhQUVVGUExGVkJRVlU3UVVGRE1VSXNhMEpCUVUwc1owSkJRV2RDTzBGQlEzUkNMR2RDUVVGSkxHVkJRV1VzYVVKQlFXbENPMEZCUTJ4RExHdENRVUZKTEdOQlFXTXNiMEpCUVc5Q0xGVkJRVlVzWTBGQll5eHZRa0ZCYjBJc1VVRkJVVHRCUVVONFJpeHpRa0ZCVFN4SlFVRkpMRTFCUVUwc2IwUkJRVzlFTEdOQlFXTXNaVUZCWlN4RlFVRkZPMEZCUVVFc1kwRkRja2M3UVVGRFFTeHZRa0ZCVFN4blFrRkJaMElzWjBKQlFXZENMRzFDUVVGdFFpeE5RVUZOTzBGQlF5OUVMRzlDUVVGTkxHdENRVUZyUWl4blFrRkJaMElzWTBGQll5eHBRa0ZCYVVJc1RVRkJUVHRCUVVNM1JTeHJRa0ZCU1N4WlFVRlpMRVZCUVVVc01FSkJRVEJDTEhOQ1FVRnpRaXhsUVVGbExHVkJRV1VzVFVGRE5VWXNSMEZCUnp0QlFVTk1PMEZCUVVFc2EwSkJRMGtzZVVSQlFYbEVMR05CUVdNc1pVRkJaVHRCUVVGQkxHZENRVUZITzBGQlFVRXNZMEZETDBZN1FVRkJRU3haUVVOR08wRkJRVUVzVlVGRFJqdEJRVU5CTzBGQlFVRXNVVUZEUml4TFFVRkxPMEZCUVVFc1VVRkRUQ3hMUVVGTE8wRkJRMGc3UVVGQlFTeFJRVU5HTzBGQlEwVXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxIRkRRVUZ4UXl4TlFVRk5MRVZCUVVVN1FVRkJRU3hOUVVOcVJUdEJRVVZCTEZsQlFVMHNiVUpCUVcxQ0xHZENRVUZuUWl4UlFVRlJMRTFCUVUwN1FVRkRka1FzVlVGQlNTeFpRVUZaTEVWQlFVVXNORUpCUVRSQ0xITkNRVUZ6UWl4blFrRkJaMElzVFVGQlRTeEhRVUZITzBGQlF6TkdMSFZDUVVGbExHOURRVUZ2UXl4TlFVRk5MRWRCUVVjN1FVRkJRU3hOUVVNNVJEdEJRVUZCTEVsQlEwWTdRVUZCUVN4RlFVTkdPMEZCUlVjc1RVRkJUU3h2UWtGQmIwSXNRMEZCUXl4WlFVRnJSVHRCUVVOc1J5eFZRVUZOUXl4UlFVRlBMRmxCUVZrN1FVRkRla0lzVVVGQlNTeDFRa0ZCZFVJN1FVRkRNMElzVlVGQlRTeFRRVUZ0UWl4RFFVRkRPMEZCUlRGQ0xGVkJRVTBzYVVKQlFXdEVMRmRCUVZjc1EwRkJRenRCUVVOd1JTeDVRa0ZCY1VJc1kwRkJZenRCUVVWdVF5eFJRVUZKTzBGQlEwWXNXVUZCVFN4NVFrRkJlVUlzZVVKQlFYbENMR1ZCUVdVc01FSkJRVEJDTEV0QlFVczdRVUZEZEVjc1dVRkJUU3huUWtGQlowSXNhVUpCUVdsQ0xHVkJRV1VzYVVKQlFXbENMRmxCUVZrN1FVRkRia1lzV1VGQlRTeHJRa0ZEUml4UFFVRlBMR1ZCUVdVc1ZVRkJWU3hYUVVGWExHZENRVUZuUWl4bFFVRmxMRTlCUVU4c1RVRkJUU3hKUVVGSk8wRkJSUzlHTEZsQlFVMHNiVUpCUVcxQ0xHVkJRV1VzYjBKQlFXOUNPMEZCUXpWRUxGVkJRVWtzUTBGQlF5eFBRVUZQTEZWQlFWVXNaMEpCUVdkQ0xFdEJRVXNzYlVKQlFXMUNMRXRCUVVzc2JVSkJRVzFDTEVkQlFVYzdRVUZEZGtZc1kwRkJUU3hKUVVGSkxFMUJRVTBzY1VOQlFYRkRMR2RDUVVGblFpeEZRVUZGTzBGQlFVRXNUVUZEZWtVN1FVRkZRU3haUVVGTkxHOUNRVUZ2UWl4bFFVRmxMSEZDUVVGeFFqdEJRVU01UkN4VlFVRkpMRU5CUVVNc1QwRkJUeXhWUVVGVkxHbENRVUZwUWl4TFFVRkxMRzlDUVVGdlFpeExRVUZMTEc5Q1FVRnZRaXhIUVVGSE8wRkJRekZHTEdOQlFVMHNTVUZCU1N4TlFVRk5MSEZEUVVGeFF5eHBRa0ZCYVVJc1JVRkJSVHRCUVVGQkxFMUJRekZGTzBGQlJVRXNXVUZCVFN3clFrRkJLMElzVDBGQlR5eGxRVUZsTERKQ1FVRXlRaXhYUVVOc1JpeG5Ra0ZCWjBJc1pVRkJaU3gzUWtGQmQwSXNUVUZCVFN4SlFVTTNSRHRCUVVWS0xEWkNRVUYxUWtFc1RVRkJTenRCUVVGQkxGRkJRM2hDTzBGQlFVRXNVVUZCZDBJc1EwRkJReXhEUVVGRExHVkJRV1U3UVVGQlFTeFJRVUZ0UWl4RFFVRkRMRU5CUVVNc1pVRkJaVHRCUVVGQkxGRkJRV3RDTzBGQlFVRXNVVUZETDBZc1EwRkJReXhEUVVGRExHVkJRV1U3UVVGQlFTeFJRVUZwUWp0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGcFFqdEJRVUZCTEZGQlFXdENPMEZCUVVFc1VVRkRlRVU3UVVGQlFTeE5RVUUwUWp0QlFVTm9ReXhWUVVGSkxIbENRVUY1UWl4SFFVRkhPMEZCUXpsQ0xIVkNRVUZsTEN0Q1FVRm5RenRCUVVGQkxFMUJRMnBFTzBGQlJVRXNWVUZCU1N4bFFVRmxMRzlDUVVGdlFqdEJRVU55UXl3NFFrRkJjMElzYzBKQlFYTkNMR1ZCUVdVc2IwSkJRVzlDTEUxQlFVMDdRVUZCUVN4TlFVTjJSanRCUVVWQkxGVkJRVWtzWlVGQlpTeDFRa0ZCZFVJc1VVRkJWenRCUVVOdVJDeFpRVUZKTEU5QlFVOHNaVUZCWlN4MVFrRkJkVUlzVjBGQlZ6dEJRVU14UkN4blFrRkJUU3hKUVVGSkxFMUJRVTBzSzBOQlFTdERMR1ZCUVdVc2EwSkJRV3RDTEVWQlFVVTdRVUZCUVN4UlFVTndSenRCUVVOQkxHTkJRVTBzWjBKQlFXZENMR2RDUVVGblFpeHpRa0ZCYzBJc1RVRkJUVHRCUVVOc1JTeGpRVUZOTEd0Q1FVRnJRaXhuUWtGQlowSXNaVUZCWlN4dFFrRkJiVUlzVTBGQlV5eEhRVUZITEUxQlFVMDdRVUZETlVZc1dVRkJTVUVzVFVGQlN5d3dRa0ZCTUVJc2MwSkJRWE5DTEdWQlFXVXNaVUZCWlN4TlFVRk5MRWRCUVVjN1FVRkRPVVk3UVVGQlFTeFpRVU5KTERSRVFVRTBSQ3hsUVVGbExHdENRVUZyUWp0QlFVRkJMRlZCUVVjN1FVRkJRU3hSUVVOMFJ6dEJRVUZCTEUxQlEwWTdRVUZGUVN4VlFVRkpMR1ZCUVdVc2QwSkJRWGRDTzBGQlEzcERMRzFDUVVGWExFTkJRVU1zVFVGQlRTeExRVUZMTEV0QlFVc3NUMEZCVHl4UlFVRlJMR1ZCUVdVc2MwSkJRWE5DTEVkQlFVYzdRVUZEYWtZc1kwRkJTU3hQUVVGUExGTkJRVk1zVlVGQlZUdEJRVU0xUWl4clFrRkJUU3hKUVVGSkxFMUJRVTBzYTBSQlFXdEVMRWxCUVVrc1JVRkJSVHRCUVVGQkxGVkJRekZGTzBGQlEwRXNZMEZCU1N4UFFVRlBMRlZCUVZVc1dVRkJXU3hEUVVGRExFOUJRVThzVlVGQlZTeExRVUZMTEV0QlFVc3NVVUZCVVN4SFFVRkhPMEZCUTNSRkxHdENRVUZOTEVsQlFVa3NUVUZCVFN4cFJVRkJhVVVzUzBGQlN5eEZRVUZGTzBGQlFVRXNWVUZETVVZN1FVRkRRU3huUWtGQlRTeGhRVUZoTEdkQ1FVRm5RaXhOUVVGTkxFMUJRVTA3UVVGREwwTXNZMEZCU1VFc1RVRkJTeXcyUWtGQk5rSXNjMEpCUVhOQ0xGbEJRVmtzUzBGQlN5eE5RVUZOTEVkQlFVYzdRVUZEY0VZc01rSkJRV1VzZDBOQlFYZERMRWxCUVVrc1RVRkJUU3hMUVVGTExFZEJRVWM3UVVGQlFTeFZRVU16UlR0QlFVRkJMRkZCUTBZN1FVRkJRU3hOUVVOR08wRkJSVUVzVlVGQlNTeGxRVUZsTEZWQlFWVXNVVUZCVnp0QlFVTjBReXcwUWtGQmIwSXNaVUZCWlN4UFFVRlBMRWxCUVVrc2IwSkJRVWtzVVVGQmFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1ZVRkJWVHRCUVVOd1J5eG5Ra0ZCVFN4blFrRkJaMElzWjBKQlFXZENMRXRCUVVzc1RVRkJUVHRCUVVOcVJDeG5Ra0ZCVFN4clFrRkJhMElzWjBKQlFXZENMRTlCUVU4c1RVRkJUVHRCUVVWeVJDeGpRVUZKUVN4TlFVRkxMREJDUVVFd1FpeHpRa0ZCYzBJc1pVRkJaU3hsUVVGbExFMUJRVTBzUjBGQlJ6dEJRVU01Uml3eVFrRkJaU3h4UTBGQmNVTXNSMEZCUnl4TlFVRk5MRXRCUVVzc1IwRkJSenRCUVVGQkxGVkJRM1pGTzBGQlFVRXNVVUZEUml4RFFVRkRPMEZCUVVFc1RVRkRTRHRCUVVWQkxHRkJRVThzUTBGQlF5eHpRa0ZCYzBJc1RVRkJUVHRCUVVGQkxFbEJRM1JETEZOQlFWTXNSMEZCUnp0QlFVTldMRlZCUVVrc2VVSkJRWGxDTEVkQlFVYzdRVUZET1VJc1VVRkJRVUVzVFVGQlN5d3dRa0ZCTUVJc2IwSkJRVzlDTzBGQlFVRXNUVUZEY2tRN1FVRkRRU3hoUVVGUExGRkJRVkVzVjBGQlUwRXNUVUZCU3l4TlFVRk5MRXRCUVVzc1EwRkJRenRCUVVONlF5eFpRVUZOTzBGQlFVRXNTVUZEVWp0QlFVRkJMRVZCUTBZN096dEJRMnBNVHl4TlFVRk5MRFpDUVVFMlFpeERRVUZETEZOQlFUSkNPMEZCUTNCRkxGbEJRVkVzVFVGQlRUdEJRVUZCTEUxQlExb3NTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVOVUxFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkN4TFFVRkxPMEZCUTBnc1pVRkJUenRCUVVGQkxFMUJRMVFzUzBGQlN6dEJRVU5JTEdWQlFVODdRVUZCUVN4TlFVTlVMRXRCUVVzN1FVRkRTQ3hsUVVGUE8wRkJRVUVzVFVGRFZDeExRVUZMTzBGQlEwZ3NaVUZCVHp0QlFVRkJMRTFCUTFRc1MwRkJTenRCUVVOSUxHVkJRVTg3UVVGQlFTeE5RVU5VTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUXNTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVOVUxFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkN4TFFVRkxPMEZCUTBnc1pVRkJUenRCUVVGQkxFMUJRMVFzUzBGQlN6dEJRVU5JTEdWQlFVODdRVUZCUVN4TlFVVlVPMEZCUTBVc1kwRkJUU3hKUVVGSkxFMUJRVTBzTUVKQlFUQkNMRWxCUVVrc1JVRkJSVHRCUVVGQkxFbEJRM0JFTzBGQlFVRXNSVUZEUmp0QlFVdFBMRTFCUVUwc05rSkJRVFpDTEVOQlFVTXNZMEZCY1VNN1FVRkRPVVVzV1VGQlVTeFhRVUZYTzBGQlFVRXNUVUZEYWtJc1MwRkJTenRCUVVOSUxHVkJRVTg3UVVGQlFTeE5RVU5VTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUXNTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVOVUxFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkN4TFFVRkxPMEZCUTBnc1pVRkJUenRCUVVGQkxFMUJRMVFzUzBGQlN6dEJRVU5JTEdWQlFVODdRVUZCUVN4TlFVTlVMRXRCUVVzN1FVRkRTQ3hsUVVGUE8wRkJRVUVzVFVGRFZDeExRVUZMTzBGQlEwZ3NaVUZCVHp0QlFVRkJMRTFCUTFRc1MwRkJTenRCUVVOSUxHVkJRVTg3UVVGQlFTeE5RVU5VTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUXNTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVWVU8wRkJRMFVzWTBGQlRTeEpRVUZKTEUxQlFVMHNNRUpCUVRCQ0xGTkJRVk1zUlVGQlJUdEJRVUZCTEVsQlEzcEVPMEZCUVVFc1JVRkRSanRCUVUxUExFMUJRVTBzZFVKQlFYVkNMRU5CUVVNc1lVRkRjRUlzUTBGQlF5eFJRVUZYTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzVVVGQlZ5eEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1VVRkJWeXhSUVVGWExFMUJRVk1zUlVGQlJTeFJRVUZSTzBGQlN6bEhMRTFCUVUwc2IwTkJRVzlETEVOQlFVTXNVMEZGYjBRN1FVRkRhRWNzV1VGQlVTeE5RVUZOTzBGQlFVRXNUVUZEV2l4TFFVRkxPMEZCUlVnc1pVRkJUeXhQUVVGUExHbENRVUZwUWl4bFFVRmxMR0ZCUVdFc1QwRkJUeXhsUVVGbE8wRkJRVUVzVFVGRGJrWXNTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVOVUxFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkN4TFFVRkxPMEZCUTBnc1pVRkJUenRCUVVGQkxFMUJRMVFzUzBGQlN6dEJRVU5JTEdWQlFVODdRVUZCUVN4TlFVTlVMRXRCUVVzN1FVRkRTQ3hsUVVGUE8wRkJRVUVzVFVGRFZDeExRVUZMTzBGQlEwZ3NaVUZCVHp0QlFVRkJMRTFCUTFRc1MwRkJTenRCUVVOSUxHVkJRVTg3UVVGQlFTeE5RVU5VTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUXNTMEZCU3p0QlFVTklMR1ZCUVU4N1FVRkJRU3hOUVVOVUxFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkR0QlFVTkZMR05CUVUwc1NVRkJTU3hOUVVGTkxIRkNRVUZ4UWl4SlFVRkpMRVZCUVVVN1FVRkJRU3hKUVVNdlF6dEJRVUZCTEVWQlEwWTdRVUZMUnl4TlFVRk5MSFZDUVVGMVFpeERRVUZETEdGQlFXdEZPMEZCUTNKSExGbEJRVkVzVlVGQlZUdEJRVUZCTEUxQlEyaENMRXRCUVVzN1FVRkRTQ3hsUVVGUE8wRkJRVUVzVFVGRFZDeExRVUZMTzBGQlEwZ3NaVUZCVHp0QlFVRkJMRTFCUTFRc1MwRkJTenRCUVVOSUxHVkJRVTg3UVVGQlFTeE5RVU5VTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZEUlN4alFVRk5MRWxCUVVrc1RVRkJUU3c0UWtGQk9FSXNVVUZCVVN4RlFVRkZPMEZCUVVFc1NVRkROVVE3UVVGQlFTeEZRVU5HTzBGQlMwOHNUVUZCVFN3eVFrRkJNa0lzUTBGQlF5eFRRVUY1UkN4VFFVRlRMR0ZCUTNaSExGTkJRVk1zWVVGQllTeFRRVUZUTEZkQlFWY3NVMEZCVXl4WFFVRlhMRk5CUVZNc1dVRkJXU3hUUVVGVExGZEJRelZHTEZOQlFWTTdRVUZMVGl4TlFVRk5MREpDUVVFeVFpeERRVUZETEdGQlFUQkRPMEZCUTJwR0xGbEJRVkVzVlVGQlZUdEJRVUZCTEUxQlEyaENMRXRCUVVzN1FVRkRTQ3hsUVVGUE8wRkJRVUVzVFVGRFZDeExRVUZMTzBGQlEwZ3NaVUZCVHp0QlFVRkJMRTFCUTFRc1MwRkJTenRCUVVOSUxHVkJRVTg3UVVGQlFTeE5RVU5VTEV0QlFVczdRVUZEU0N4bFFVRlBPMEZCUVVFc1RVRkRWQ3hMUVVGTE8wRkJRMGdzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZEUlN4alFVRk5MRWxCUVVrc1RVRkJUU3c0UWtGQk9FSXNVVUZCVVN4RlFVRkZPMEZCUVVFc1NVRkROVVE3UVVGQlFTeEZRVU5HT3pzN1FVTndUVUU3T3p0QlEwaFBMRTFCUVUxRExGbEJRVmM3T3p0QlJGbHFRaXhOUVVGTkxGZEJRVmNzVDBGQlRTeFRRVUZ6UlR0QlFVTnNSeXhSUVVGSkxFOUJRVThzVTBGQlV5eFZRVUZWTzBGQlF6VkNMRlZCUVVrc1QwRkJUeXhaUVVGWkxHVkJRV1VzVVVGQlVTeFpRVUZaTEZGQlFWRXNVMEZCVXl4TlFVRk5PMEZCUlM5RkxGbEJRVWs3UVVGRFJpeHBRa0ZCVHl4SlFVRkpMRmRCUVZjc1RVRkJUVU1zVlVGQlV5eEpRVUZKTEVOQlFVTTdRVUZCUVN4UlFVTTFReXhUUVVGVExFZEJRVWM3UVVGRFZpeGpRVUZKTEVWQlFVVXNVMEZCVXl4NVFrRkJlVUk3UVVGRmRFTXNhMEpCUVUwc1UwRkJXU3hwUWtGQmFVSXNTVUZCU1R0QlFVTjJReXhyUWtGQlRTeFRRVUYxUWl4RFFVRkRPMEZCUXpsQ0xEWkNRVUZwUWl4VFFVRlRMRkZCUVZFN1FVRkRhRU1zY1VKQlFVOHNTMEZCU3l4TFFVRkxPMEZCUVVFc1dVRkRia0k3UVVGRFFTeHRRa0ZCVHl4SlFVRkpMRmRCUVZjc1QwRkJUeXhQUVVGUExFMUJRVTBzUTBGQlF6dEJRVUZCTEZWQlF6ZERPMEZCUTBFc1owSkJRVTA3UVVGQlFTeFJRVU5TTzBGQlFVRXNUVUZEUml4UFFVRlBPMEZCUlV3c1kwRkJUU3hYUVVGWExFMUJRVTBzVFVGQlRTeEpRVUZKTzBGQlEycERMRmxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWs3UVVGRGFFSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxITkRRVUZ6UXl4SlFVRkpMRVZCUVVVN1FVRkJRU3hSUVVNNVJEdEJRVU5CTEdOQlFVMHNjMEpCUVhOQ0xGTkJRVk1zVVVGQlVTeEpRVUZKTEdkQ1FVRm5RanRCUVVOcVJTeGpRVUZOTEZkQlFWY3NjMEpCUVhOQ0xGTkJRVk1zY1VKQlFYRkNMRVZCUVVVc1NVRkJTVHRCUVVNelJTeFpRVUZKTEZkQlFWY3NXVUZCYzBJN1FVRkhia01zYVVKQlFVOHNTVUZCU1N4WFFVRlhMRTFCUVUwc1UwRkJVeXhaUVVGWkxFTkJRVU03UVVGQlFTeFJRVU53UkN4UFFVRlBPMEZCUlV3c1kwRkJTU3hEUVVGRExGTkJRVk1zVFVGQlRUdEJRVU5zUWl4clFrRkJUU3hKUVVGSkxFMUJRVTBzYzBOQlFYTkRMRWxCUVVrc2NVSkJRWEZDTzBGQlFVRXNWVUZEYWtZN1FVRkRRU3huUWtGQlRTeFRRVUZUTEZOQlFWTXNTMEZCU3l4VlFVRlZPMEZCUlhaRExHTkJRVWs3UVVGRFNpeGpRVUZKTzBGQlJVWXNjVUpCUVZNc1NVRkJTU3haUVVGWkxGRkJRVkU3UVVGQlFTeFZRVU51UXl4VFFVRlRMRWRCUVVjN1FVRkRWaXhuUWtGQlNTeGhRVUZoTEZsQlFWazdRVUZGTTBJc2IwSkJRVTBzVVVGQlVTeExRVUZMTEV0QlFVc3NWMEZCVnl4TFFVRkxPMEZCUTNoRExIVkNRVUZUTEVsQlFVa3NXVUZCV1N4UFFVRlBMRVZCUVVNc1UwRkJVeXhQUVVGUExGTkJRVk1zVFVGQlN5eERRVUZETEVWQlFVVTdRVUZCUVN4WlFVTndSU3hQUVVGUE8wRkJRMHdzYjBKQlFVMDdRVUZCUVN4WlFVTlNPMEZCUVVFc1ZVRkRSanRCUVVWQkxHTkJRVWtzVTBGQlV6dEJRVVZpTEdsQ1FVRlBMRTFCUVUwN1FVRkRXQ3hyUWtGQlRTeEZRVUZETEUxQlFVMHNUVUZCU3l4SlFVRkpMRTFCUVUwc1QwRkJUeXhMUVVGTE8wRkJRM2hETEdkQ1FVRkpMRTFCUVUwN1FVRkRVanRCUVVGQkxGbEJRMFk3UVVGRFFTeHJRa0ZCVFN4WlFVRlpMRTFCUVUwN1FVRkRlRUlzYTBKQlFVMHNVVUZCVVN4SlFVRkpMRmRCUVZjc1VVRkJVU3hSUVVGUkxGTkJRVk03UVVGRGRFUXNhMEpCUVUwc1NVRkJTU3hMUVVGTE8wRkJRMllzYzBKQlFWVTdRVUZCUVN4VlFVTmFPMEZCUTBFc2FVSkJRVThzU1VGQlNTeFhRVUZYTEZGQlFWRXNSMEZCUnl4UlFVRlJPMEZCUVVFc1VVRkRNME03UVVGQlFTeE5RVU5HTzBGQlFVRXNTVUZGUml4WFFVRlhMR2RDUVVGblFpeE5RVUZOTzBGQlF5OUNMR0ZCUVU4c1NVRkJTU3hYUVVGWExFMUJRVTBzUzBGQlN5eFpRVUZaTEVOQlFVTTdRVUZCUVN4SlFVTm9SQ3hYUVVGWExHZENRVUZuUWl4WlFVRlpPMEZCUTNKRExHRkJRVTg3UVVGQlFTeEpRVU5VTEU5QlFVODdRVUZEVEN4aFFVRlBMRWxCUVVrc1YwRkJWeXhKUVVGSk8wRkJRVUVzU1VGRE5VSTdRVUZCUVN4RlFVTkdPenM3UVVWMlFrRXNUVUZCVFN4VlFVRlZMRU5CUVVNc1dVRkJiMElzYVVKQlFTdENPMEZCUTJ4RkxGVkJRVTBzV1VGQldTeFpRVUZaTEVWQlFVVXNVMEZCVXl4WlFVRlpMRmxCUVZrN1FVRkRha1VzVVVGQlNTeGpRVUZqTEVkQlFVYzdRVUZEYmtJc2NVSkJRV1VzSzBKQlFXZERPMEZCUVVFc1NVRkRha1E3UVVGQlFTeEZRVU5HTzBGQlRVOHNUVUZCVFN4alFVRmpMRTlCUVUwc1VVRkJORUk3UVVGRk0wUXNXVUZCVVN4SlFVRkpMRXRCUVVzc1dVRkJZU3h4UWtGQmNVSXNTVUZCU1N4UlFVRlJMRU5CUVVNN1FVRkJRU3hGUVVOc1JUdEJRVkZQTEUxQlFVMHNVMEZCVXl4UFFVRk5MRXRCUVZVc1YwRkJhME03UVVGRGRFVXNVVUZCU1N4UFFVRTBRanRCUVVVNVFpeFpRVUZOTEZkQlFWY3NTMEZCZFVJN1FVRkZlRU1zVlVGQlNTeFhRVUZYTEZWQlFWVTdRVUZGZGtJc1dVRkJTU3hQUVVGUExHTkJRV01zWlVGQlpTeERRVUZETEZWQlFWVXNTMEZCU3p0QlFVTjBSQ3huUWtGQlRTeEpRVUZKTEUxQlFVMHNaMFJCUVdkRU8wRkJRVUVzVVVGRGJFVTdRVUZGUVN4WlFVRkpMRlZCUVZVc1NVRkJTU3hQUVVGUE8wRkJRM3BDTEZsQlFVa3NRMEZCUXl4VFFVRlRPMEZCUlZvc1owSkJRVTBzYTBKQlFXdENMRWxCUVVrc1QwRkJUenRCUVVOdVF5eGpRVUZKTEc5Q1FVRnZRaXhWUVVGaExHOUNRVUZ2UWl4bFFVTnlSQ3h2UWtGQmIwSXNiMEpCUVc5Q08wRkJRekZETEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3h4UTBGQmNVTXNaVUZCWlN4SFFVRkhPMEZCUVVFc1ZVRkRla1U3UVVGRFFTeG5Ra0ZCVFN4MVFrRkJkVUlzU1VGQlNTeFBRVUZQTzBGQlEzaERMR05CUVVrc2VVSkJRWGxDTEZWQlFXRXNUMEZCVHl4NVFrRkJlVUlzVjBGQlZ6dEJRVU51Uml4clFrRkJUU3hKUVVGSkxFMUJRVTBzTUVOQlFUQkRMRzlDUVVGdlFpeEhRVUZITzBGQlFVRXNWVUZEYmtZN1FVRkRRU3h2UWtGQlZTeE5RVUZOTEZWQlFWVXNTVUZCU1N4bFFVRmxMRVZCUVVNc2FVSkJRV2xDTEhGQ1FVRnZRaXhEUVVGRE8wRkJRM0JHTEdOQlFVa3NRMEZCUXl4VFFVRlRPMEZCUTFvc2EwSkJRVTBzU1VGQlNUdEJRVUZCTEdOQlEwNDdRVUZCUVN4WlFVTXJSVHRCUVVGQkxGVkJRM0pHTzBGQlFVRXNVVUZEUml4UFFVRlBPMEZCUlV3c1kwRkJTU3hQUVVGUExGRkJRVkVzVjBGQlZ5eFpRVUZaTEU5QlFVOHNVVUZCVVN4aFFVRmhMRmxCUTJ4RkxFOUJRVThzVVVGQlVTeHJRa0ZCYTBJc1dVRkJXVHRCUVVNdlF5eHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2EwWkJRV3RHTzBGQlFVRXNWVUZEY0VjN1FVRkJRU3hSUVVOR08wRkJSVUVzV1VGQlNTeERRVUZETEVsQlFVa3NTMEZCU3l4TlFVRk5PMEZCUTJ4Q0xHZENRVUZOTEVsQlFVazdRVUZCUVN4WlFVTk9PMEZCUVVFc1ZVRkJjVWM3UVVGQlFTeFJRVU16Unp0QlFVVkJMR05CUVUwc1UwRkJVeXhWUVVGVkxGbEJRVmtzUjBGQlJ5eExRVUZMTEU5QlFVODdRVUZCUVN4TlFVTjBSRHRCUVVOQkxGVkJRVWtzVjBGQlZ5eFRRVUZUTzBGQlJYUkNMRmxCUVVrc1QwRkJUeXhqUVVGakxHVkJRV1VzUTBGQlJTeFZRVUYxUXl4SlFVRkpPMEZCUTI1R0xHZENRVUZOTEVsQlFVa3NUVUZCVFN3clEwRkJLME03UVVGQlFTeFJRVU5xUlR0QlFVVkJMR05CUVUwc1UwRkJVeXhUUVVGVExGbEJRVmtzUjBGQlJ5eEhRVUZITzBGQlFVRXNUVUZETlVNN1FVRkJRU3hKUVVOR08wRkJRVUVzUlVGRFJqdEJRVzlEUVN4TlFVRk5MR2xDUVVGcFFpeHZRa0ZCU1N4SlFVRTJRanRCUVU5NFJDeE5RVUZOTERaQ1FVRTJRaXhEUVVGRExHdENRVUUwUXp0QlFVTTVSU3hWUVVGTlF5eFJRVUZQTEZsQlFWazdRVUZEZWtJc1ZVRkJUU3hSUVVGUlFTeE5RVUZMTEZWQlFWVTdRVUZETjBJc1VVRkJTVHRCUVVOR0xGbEJRVTBzWVVGQllVRXNUVUZCU3l4WFFVRlhMRU5CUVVNN1FVRkRjRU1zV1VGQlRTeFpRVUZaUVN4TlFVRkxMSGRDUVVGM1FpeGxRVUZsTEZsQlFWa3NZVUZCWVN4RFFVRkRPMEZCUTNoR0xGVkJRVWtzWTBGQll5eEhRVUZITzBGQlEyNUNMSFZDUVVGbExIVkRRVUYzUXp0QlFVRkJMRTFCUTNwRU8wRkJRMEVzWVVGQlR5eERRVUZEUVN4TlFVRkxMRTlCUVU4c1lVRkJZU3hEUVVGRExFZEJRVWRCTEUxQlFVc3NUMEZCVHl4aFFVRmhMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRVUVzU1VGRGRFVXNWVUZCUlR0QlFVTkJMRTFCUVVGQkxFMUJRVXNzWVVGQllTeExRVUZMTzBGQlFVRXNTVUZEZWtJN1FVRkJRU3hGUVVOR08wRkJVVThzVFVGQlRTeDVRa0ZCZVVJc1EwRkJReXhWUVVGM1F6dEJRVU0zUlN4VlFVRk5RU3hSUVVGUExGbEJRVms3UVVGRGVrSXNWVUZCVFN4clFrRkJhMEpCTEUxQlFVc3NVVUZCVVN4TlFVRk5MRlZCUVZVN1FVRkRja1FzVVVGQlNTeHZRa0ZCYjBJc1IwRkJSenRCUVVONlFpeFpRVUZOTEVsQlFVa3NUVUZCVFN3clJFRkJLMFFzVFVGQlRTeFZRVUZWTEVkQlFVYzdRVUZCUVN4SlFVTndSenRCUVVOQkxFbEJRVUZCTEUxQlFVc3NUMEZCVHl4SlFVRkpMRTlCUVU4c1pVRkJaVHRCUVVOMFF5eFhRVUZQTEVOQlFVTXNhVUpCUVdsQ0xFMUJRVTBzVlVGQlZUdEJRVUZCTEVWQlF6TkRPMEZCVlU4c1RVRkJUU3huUWtGQlowSXNUMEZEZWtJc1YwRkRRU3haUVVGdlJqdEJRVU4wUml4UlFVRkpMR2xDUVVGNVFqdEJRVU0zUWl4VlFVRk5RU3hSUVVGUExGbEJRVms3UVVGRmVrSXNVVUZCU1N4TlFVRk5MRkZCUVZFc1UwRkJVeXhIUVVGSE8wRkJSVFZDTEU5QlFVTXNhVUpCUVdsQ0xHVkJRV1VzU1VGQlNUdEJRVUZCTEVsQlEzWkRMRmRCUVZjc1ZVRkJWU3hYUVVGWFFTeE5RVUZMTEU5QlFVOHNVVUZCVVR0QlFVVnNSQ3hQUVVGRExHbENRVUZwUWl4bFFVRmxMRWxCUVVrc1EwRkJReXhWUVVGVkxGbEJRVmtzVlVGQlZTeFZRVUZWTzBGQlFVRXNTVUZEYkVZc1QwRkJUenRCUVVWTUxFOUJRVU1zYVVKQlFXbENMR1ZCUVdVc1NVRkJTU3gxUWtGQmRVSXNVMEZCVXp0QlFVRkJMRWxCUTNaRk8wRkJSVUVzVVVGQlNTeG5Ra0ZCWjBJN1FVRkRjRUlzVVVGQlNTeDFRa0ZCZFVJN1FVRkRNMElzVVVGQlNTeHJRa0ZCYTBJN1FVRkRkRUlzVVVGQlNTeFRRVUZ0UWl4RFFVRkRPMEZCUTNoQ0xGVkJRVTBzZDBKQlFYZENMRU5CUVVNN1FVRkRMMElzVlVGQlRTeDVRa0ZCZVVJc1EwRkJRenRCUVVWb1F5eFJRVUZKTzBGQlEwWXNUMEZCUXl4elFrRkJjMElzVFVGQlRTeEpRVUZKTEd0Q1FVRnJRaXhQUVVGUE8wRkJSVEZFTEZWQlFVa3NVMEZCVXl4blFrRkJaMEpCTEUxQlFVc3NiVUpCUVcxQ08wRkJRMjVFTEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU03UVVGRGVrSXNiVUpCUVZjc1VVRkJVU3hSUVVGUkxHTkJRV003UVVGRGRrTXNaMEpCUVUwc1QwRkJUeXhQUVVGUExGTkJRVk1zVjBGQlZ5eFBRVUZQTEV0QlFVczdRVUZEY0VRc01FSkJRV2RDTEV0QlFVc3NVMEZCVXl4UFFVRlBMRk5CUVZNc1YwRkJWeXhQUVVGUExFdEJRVXNzU1VGQlNTeEZRVUZGTEV0QlFVc3NWVUZCVVR0QlFVTjBSaXhaUVVGQlFTeE5RVUZMTEd0Q1FVRnRRaXhOUVVGTkxFbEJRVWs3UVVGQlFTeFZRVU53UXl4RFFVRkRMRU5CUVVNN1FVRkJRU3hSUVVOS08wRkJSMEVzWTBGQlRTeFJRVUZSTEVsQlFVa3NaVUZCWlR0QlFVRkJMRTFCUTI1RE8wRkJSVUVzYzBKQlFXZENMRTFCUVUxQkxFMUJRVXNzYTBKQlFXdENMR2xDUVVGcFFpeHBRa0ZCYVVJc2IwSkJRVzlDTzBGQlEyNUhMRlZCUVVrc2EwSkJRV3RDTEVkQlFVYzdRVUZEZGtJc2RVSkJRV1VzZVVKQlFUQkNPMEZCUVVFc1RVRkRNME03UVVGRlFTeFpRVUZOTEVOQlFVTXNXVUZCV1N4WFFVRlhMRWxCUVVrc01rSkJRVEpDTEdGQlFXRTdRVUZGTVVVc1dVRkJUU3h4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRk5CUVZNN1FVRkZkRU1zV1VGQlRTeGhRVUZoTEVOQlFVTTdRVUZEY0VJc1dVRkJUU3hqUVVGakxFTkJRVU03UVVGRGNrSXNXVUZCVFN3eVFrRkJkMFVzUTBGQlF6dEJRVU12UlN4bFFVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxGbEJRVmtzUzBGQlN6dEJRVU51UXl4alFVRk5MRTlCUVU5QkxFMUJRVXNzYVVKQlFXbENMR1ZCUVdVc1EwRkJRenRCUVVOdVJDeFpRVUZKTEZOQlFWTXNSMEZCUnp0QlFVTmtMSGxDUVVGbExEQkNRVUV5UWp0QlFVRkJMRkZCUXpWRE8wRkJRMEVzT0VKQlFYTkNMRXRCUVVzc1NVRkJTVHRCUVVNdlFpeHRRa0ZCVnl4TFFVRkxRU3hOUVVGTExHRkJRV0VzU1VGQlNTeERRVUZETzBGQlFVRXNUVUZEZWtNN1FVRkRRU3hsUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEdGQlFXRXNTMEZCU3p0QlFVTndReXhqUVVGTkxFOUJRVTlCTEUxQlFVc3NhMEpCUVd0Q0xHVkJRV1VzUTBGQlF6dEJRVU53UkN4WlFVRkpMRk5CUVZNc1IwRkJSenRCUVVOa0xIbENRVUZsTERKQ1FVRTBRanRCUVVGQkxGRkJRemRETzBGQlEwRXNLMEpCUVhWQ0xFdEJRVXNzU1VGQlNUdEJRVU5vUXl4alFVRk5MR0ZCUVdGQkxFMUJRVXNzWVVGQllTeEpRVUZKTzBGQlEzcERMRzlDUVVGWkxFdEJRVXNzVlVGQlZUdEJRVVV6UWl4WlFVRkpMRTlCUVRSQ08wRkJRemxDTEdOQlFVa3NjMEpCUVhOQ0xGTkJRVk1zTkVKQlFUUkNMRkZCUVZjN1FVRkRlRVVzY1VOQlFYbENMRXRCUVVzc1dVRkJXVHRCUVVNeFF6dEJRVUZCTEZWQlEwWTdRVUZEUVN4blFrRkJUU3hYUVVGWExFOUJRVThzVTBGQlV5dzBRa0ZCTkVJc1YwRkRla1FzVVVGQlVTd3dRa0ZEVWl4VFFVRlRMREJDUVVFd1FpeFZRVUZWTEV0QlFVczdRVUZEZEVRc1kwRkJTU3hoUVVGaExGTkJRVk1zWVVGQllTeG5Ra0ZCWjBJc1lVRkJZU3hqUVVGak8wRkJRMmhHTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3cwUTBGQk5FTXNVVUZCVVN4SFFVRkhPMEZCUVVFc1ZVRkRla1U3UVVGRFFTeGpRVUZKTEhOQ1FVRnpRaXhoUVVGaExHTkJRV003UVVGRGJrUXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxEUkRRVU5hTEZGQlFWRXNORVZCUVRSRk8wRkJRVUVzVlVGRE1VWTdRVUZEUVN4dFEwRkJlVUlzUzBGQlN5eFJRVUZSTzBGQlFVRXNVVUZEZUVNN1FVRkJRU3hOUVVOR08wRkJSMEVzVlVGQlNTeGxRVUZ2UXp0QlFVTjRReXhWUVVGSkxFOUJRWE5HTzBGQlEzaEdMREJDUVVGclFrRXNUVUZCU3l4clFrRkJhMElzWVVGQllUdEJRVU4wUkN4WlFVRkpMRzlDUVVGdlFpeEhRVUZITzBGQlEzcENMSGxDUVVGbExEQkNRVUV5UWp0QlFVRkJMRkZCUXpWRE8wRkJSVUVzZFVKQlFXVTdRVUZCUVN4VlFVTmlMRkZCUVZFN1FVRkJRU3hWUVVOU08wRkJRVUVzVlVGRFFTeHBRMEZCYVVNc2VVSkJRWGxDTEVsQlFVa3NUMEZCU3l4NVFrRkJlVUlzUTBGQlF5eERRVUZETzBGQlFVRXNVVUZEYUVjN1FVRkJRU3hOUVVOR08wRkJSVUVzY1VKQlFXVTdRVUZCUVN4UlFVTllPMEZCUVVFc1VVRkRRU3hEUVVGRExHVkJRV1VzZFVKQlFYVkNMSGRDUVVGM1FpeGpRVUZqTEc5Q1FVRnZRaXhMUVVGTE8wRkJRVUVzVFVGQlF6dEJRVU16Unl4aFFVRlBMRU5CUVVNc1pVRkJaU3haUVVGWkxGZEJRVmM3UVVGQlFTeEpRVU5vUkN4VFFVRlRMRWRCUVVjN1FVRkRWaXcwUWtGQmMwSXNVVUZCVVN4VFFVRlBRU3hOUVVGTExGTkJRVk1zUjBGQlJ5eERRVUZETzBGQlEzWkVMRFpDUVVGMVFpeFJRVUZSTEZOQlFVOUJMRTFCUVVzc1UwRkJVeXhIUVVGSExFTkJRVU03UVVGRmVFUXNWVUZCU1N4dlFrRkJiMElzUjBGQlJ6dEJRVU42UWl4UlFVRkJRU3hOUVVGTExHMUNRVUZ0UWl4bFFVRmxPMEZCUVVFc1RVRkRla003UVVGRlFTeFZRVUZKTEd0Q1FVRnJRaXhIUVVGSE8wRkJRM1pDTEZGQlFVRkJMRTFCUVVzc2JVSkJRVzFDTEdGQlFXRTdRVUZCUVN4TlFVTjJRenRCUVVOQkxGbEJRVTA3UVVGQlFTeEpRVU5TTEZWQlFVVTdRVUZEUVN4TlFVRkJRU3hOUVVGTExFMUJRVTBzWlVGQlpUdEJRVU14UWl4VlFVRkpMSGxDUVVGNVFpeEhRVUZITzBGQlF6bENMRkZCUVVGQkxFMUJRVXNzTUVKQlFUQkNMRzlDUVVGdlFqdEJRVUZCTEUxQlEzSkVPMEZCUTBFc1lVRkJUeXhSUVVGUkxGZEJRVk5CTEUxQlFVc3NUVUZCVFN4TFFVRkxMRU5CUVVNN1FVRkhla01zVFVGQlFVRXNUVUZCU3l4elFrRkJjMEk3UVVGQlFTeEpRVU0zUWp0QlFVRkJMRVZCUTBZN1FVRkZUeXhOUVVGTkxHbENRVUZwUWl4RFFVRkRMR05CUVRSQ08wRkJRM3BFTEZWQlFVMUJMRkZCUVU4c1dVRkJXVHRCUVVONlFpeFZRVUZOTEZWQlFWVXNaVUZCWlN4SlFVRkpMRk5CUVZNN1FVRkROVU1zVVVGQlNTeERRVUZETEZOQlFWTTdRVUZEV2l4WlFVRk5MRWxCUVVrc1RVRkJUU3dyUTBGQkswTXNVMEZCVXl4RlFVRkZPMEZCUVVFc1NVRkROVVU3UVVGRFFTeFZRVUZOTEVOQlFVTXNaVUZCWlN4MVFrRkJkVUlzZDBKQlFYZENMR2RDUVVGblFpeHJRa0ZCYTBJc1NVRkJTVHRCUVVVelJ5eFJRVUZKTEdkQ1FVRm5RanRCUVVOc1FpeFZRVUZKTEc5Q1FVRnZRanRCUVVOMFFpeFJRVUZCUVN4TlFVRkxMSE5DUVVGelFpeGxRVUZsTEUxQlFVMDdRVUZCUVN4TlFVTnNSRHRCUVVOQkxFMUJRVUZCTEUxQlFVc3NiVUpCUVcxQ0xHVkJRV1VzVFVGQlRUdEJRVUZCTEVsQlF5OURPMEZCUlVFc1NVRkJRVUVzVFVGQlN5eDFRa0ZCZFVJc1UwRkJVenRCUVVWeVF5d3dRa0ZCYzBJc1VVRkJVU3hUUVVGUFFTeE5RVUZMTEZOQlFWTXNSMEZCUnl4RFFVRkRPMEZCUTNaRUxESkNRVUYxUWl4UlFVRlJMRk5CUVU5QkxFMUJRVXNzVTBGQlV5eEhRVUZITEVOQlFVTTdRVUZEZUVRc1NVRkJRVUVzVFVGQlN5eHRRa0ZCYlVJc1lVRkJZVHRCUVVOeVF5eHRRa0ZCWlN4UFFVRlBMRk5CUVZNN1FVRkJRU3hGUVVOcVF6dEJRVVZQTEUxQlFVMHNNa0pCUTFRc1EwRkJReXhSUVVFMlFpeGxRVUY1UWl4UlFVRnJRaXhYUVVGdFFpeFBRVU16Uml4eFFrRkJjVUlzVlVGQlowSTdRVUZEY0VNc1VVRkJTU3hEUVVGRExGRkJRVkU3UVVGRFdDeHZRa0ZCWXl4TFFVRkxMRU5CUVVNN1FVRkRjRUk3UVVGQlFTeEpRVU5HTzBGQlJVRXNWVUZCVFVFc1VVRkJUeXhaUVVGWk8wRkJSWHBDTEZWQlFVMHNWMEZCVnl4UFFVRlBMRU5CUVVNN1FVRkRla0lzVlVGQlRTeFBRVUZQTEU5QlFVOHNRMEZCUXp0QlFVTnlRaXhWUVVGTkxGZEJRVmNzVDBGQlR5eERRVUZETzBGQlJYcENMRkZCUVVrN1FVRkRTaXhSUVVGSk8wRkJSVW9zVVVGQlNTeGhRVUZoTEZsQlFWa3NZVUZCWVN4alFVRmpPMEZCUTNSRUxGbEJRVTBzU1VGQlNTeE5RVUZOTEhkRFFVRjNRenRCUVVGQkxFbEJRekZFTzBGQlJVRXNVVUZCU1N4elFrRkJjMElzWVVGQllTeGpRVUZqTzBGQlEyNUVMRmxCUVUwc1NVRkJTVHRCUVVGQkxGRkJRMDRzTWtSQlFUSkVMRXRCUVVzN1FVRkJRU3hOUVVGdFF6dEJRVUZCTEVsQlEzcEhPMEZCUlVFc1VVRkJTU3hoUVVGaExHTkJRV003UVVGRE4wSXNXVUZCVFN4WlFVRlpMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRelZDTEZsQlFVMHNjVUpCUVhGQ0xIRkNRVUZ4UWl3eVFrRkJNa0lzVVVGQlVTeERRVUZETzBGQlEzQkdMSFZDUVVGcFFpeExRVUZMTEU5QlFVOHNRMEZCUXl4SFFVRkhMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlNUdEJRVVZ1UkN4WlFVRk5MR2xDUVVGcFFrRXNUVUZCU3p0QlFVTTFRaXhWUVVGSkxFTkJRVU1zWjBKQlFXZENPMEZCUTI1Q0xHTkJRVTBzU1VGQlNTeE5RVUZOTEhGRlFVRnhSVHRCUVVGQkxFMUJRM1pHTzBGQlEwRXNaMEpCUVZVc1pVRkJaU3hYUVVGWExFOUJRVThzVjBGQlZ5eGpRVUZqTzBGQlFVRXNTVUZEZEVVc1QwRkJUenRCUVVOTUxGbEJRVTBzVDBGQlR5eFBRVUZQTEVOQlFVTTdRVUZGY2tJc1ZVRkJTU3hOUVVGTkxGRkJRVkVzU1VGQlNTeEhRVUZITzBGQlJYWkNMSGxDUVVGcFFpeEpRVUZKTEV0QlFVczdRVUZETVVJc2EwSkJRVlZCTEUxQlFVc3NVVUZCVVN4alFVRmpPMEZCUTNKRExHVkJRVThzUzBGQlN5eFBRVUZQTzBGQlEyNUNMRmxCUVVrc1dVRkJXU3hWUVVGVk8wRkJRekZDTEdsQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFdEJRVXNzVVVGQlVTeExRVUZMTzBGQlEzQkRMR05CUVVrc1QwRkJUeXhMUVVGTExFTkJRVU1zVFVGQlRTeFZRVUZWTzBGQlF5OUNMR3RDUVVGTkxFbEJRVWtzVlVGQlZTeDNRa0ZCZDBJc1EwRkJReXhyUWtGQmEwSTdRVUZCUVN4VlFVTnFSVHRCUVVOQkxGVkJRVUZCTEUxQlFVc3NVVUZCVVN4WFFVRlhMRWxCUVVrc1owSkJRV2RDTEV0QlFVc3NRMEZCUXl4SFFVRkhMRTFCUVUwN1FVRkJRU3hSUVVNM1JEdEJRVUZCTEUxQlEwWXNUMEZCVHp0QlFVTk1MSGxDUVVGcFFpeExRVUZMTzBGQlEzUkNMR3RDUVVGVlFTeE5RVUZMTEZGQlFWRXNZMEZCWXp0QlFVTnlReXhsUVVGUExFdEJRVXNzVDBGQlR6dEJRVU51UWl4UlFVRkJRU3hOUVVGTExFOUJRVThzU1VGQlNTeEpRVUZKTEZkQlFWY3NTMEZCU3l4UlFVRlJMRXRCUVVzc1dVRkJXU3hqUVVGakxFZEJRVWNzVDBGQlR6dEJRVUZCTEUxQlEzWkdPMEZCUVVFc1NVRkRSanRCUVVWQkxGVkJRVTBzVVVGQlVVRXNUVUZCU3l4VlFVRlZPMEZCUXpkQ0xGVkJRVTBzWVVGQllVRXNUVUZCU3l4WFFVRlhMRWxCUVVrc1MwRkJTeXhOUVVGTk8wRkJRMnhFTEZGQlFVazdRVUZEUml4VlFVRkpMRmRCUVZjc1lVRkJZVHRCUVVNMVFpeFhRVUZMTEZGQlFWRXNUMEZCUzBFc1RVRkJTeXhQUVVGUExGVkJRVlVzU1VGQlNTeERRVUZETzBGQlF6ZERMRmxCUVUxRExGVkJRVk5FTEUxQlFVczdRVUZCUVN4UlFVTm9RaXd5UWtGQk1rSXNVVUZCVVR0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGVE8wRkJRVUVzVVVGQlowSTdRVUZCUVN4UlFVRlpMRXRCUVVzN1FVRkJRU3hSUVVOb1JpeDVRa0ZCZVVJc1VVRkJVVHRCUVVGQkxFMUJRVU03UVVGRGRFTXNWVUZCU1VNc1dVRkJWeXhIUVVGSE8wRkJRMmhDTEhWQ1FVRmxMR2xFUVVGcFJDeFRRVUZUTEZkQlFWY3NTMEZCU3l4SFFVRkhPMEZCUVVFc1RVRkRPVVk3UVVGRFFTeHZRa0ZCWXl4TFFVRkxRU3hQUVVGTk8wRkJRVUVzU1VGRE0wSXNWVUZCUlR0QlFVTkJMRTFCUVVGRUxFMUJRVXNzWVVGQllTeExRVUZMTzBGQlFVRXNTVUZEZWtJN1FVRkJRU3hGUVVOR08wRkJTMGNzVFVGQlRTeE5RVUZOTEU5QlEyWXNWMEZCYlVJc1kwRkJkMElzWTBGQlowTXNaVUZETTBVc1pVRkJNa01zV1VGQmIwVTdRVUZEYWtnc1ZVRkJUVUVzVVVGQlR5eFpRVUZaTzBGQlEzcENMRlZCUVUwc1ZVRkJWU3hsUVVGbExFbEJRVWtzVTBGQlV6dEJRVU0xUXl4UlFVRkpMRU5CUVVNc1UwRkJVenRCUVVOYUxGbEJRVTBzU1VGQlNTeE5RVUZOTERaRFFVRTJReXhUUVVGVExFVkJRVVU3UVVGQlFTeEpRVU14UlR0QlFVTkJMRlZCUVUwc1owSkJRV2RDTEZGQlFWRXNRMEZCUXp0QlFVTXZRaXhWUVVGTkxIZENRVUYzUWl4UlFVRlJMRU5CUVVNN1FVRkRka01zVlVGQlRTeDVRa0ZCZVVJc1VVRkJVU3hEUVVGRE8wRkJRM2hETEZWQlFVMHNhVUpCUVdsQ0xGRkJRVkVzUTBGQlF6dEJRVU5vUXl4VlFVRk5MSEZDUVVGeFFpeFJRVUZSTEVOQlFVTTdRVUZEY0VNc1ZVRkJUU3h0UWtGQmJVSXNVVUZCVVN4RFFVRkRPMEZCUld4RExGVkJRVTBzWVVGQllTeGhRVUZoTzBGQlEyaERMRlZCUVUwc1kwRkJZeXhqUVVGak8wRkJSV3hETEZGQlFVa3NiVUpCUVcxQ08wRkJRM1pDTEZGQlFVa3NiVUpCUVRaQ0xFTkJRVU03UVVGRmJFTXNWVUZCVFN4eFFrRkJLMElzUTBGQlF6dEJRVU4wUXl4VlFVRk5MSE5DUVVGblF5eERRVUZETzBGQlEzWkRMRlZCUVUwc2IwSkJRVGhDTEVOQlFVTTdRVUZGY2tNc1ZVRkJUU3hwUWtGQmFVSkJMRTFCUVVzc1ZVRkJWVHRCUVVOMFF5eFZRVUZOTEc5Q1FVRnZRa0VzVFVGQlN5eFhRVUZYTEdGQlFXRXNRMEZCUXp0QlFVTjRSQ3hWUVVGTkxHMUNRVUZ0UWtFc1RVRkJTeXhYUVVGWExHRkJRV0VzUTBGQlF6dEJRVU4yUkN4VlFVRk5MSEZDUVVGeFFrRXNUVUZCU3l4WFFVRlhMR05CUVdNc1EwRkJRenRCUVVNeFJDeFZRVUZOTEc5Q1FVRnZRa0VzVFVGQlN5eFhRVUZYTEdOQlFXTXNRMEZCUXp0QlFVVjZSQ3hSUVVGSk8wRkJRMFlzVDBGQlF5eHJRa0ZCYTBJc1owSkJRV2RDTEVsQlFVa3NZMEZCWXl4UFFVRlBPMEZCUnpWRUxHVkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NXVUZCV1N4TFFVRkxPMEZCUTI1RE8wRkJRVUVzVlVGRFNTeGhRVUZoTEVOQlFVTTdRVUZCUVN4VlFVRkhPMEZCUVVFc1ZVRkJiMEk3UVVGQlFTeFZRVUZ0UWp0QlFVRkJMRlZCUVZjc1lVRkJZU3hEUVVGRE8wRkJRVUVzVlVGQlJ6dEJRVUZCTEZGQlFXdENPMEZCUVVFc1RVRkROVWM3UVVGSFFTeGxRVUZUTEVsQlFVa3NSMEZCUnl4SlFVRkpMR0ZCUVdFc1MwRkJTenRCUVVOd1F6dEJRVUZCTEZWQlEwa3NZMEZCWXl4RFFVRkRPMEZCUVVFc1ZVRkJSenRCUVVGQkxGVkJRWEZDTzBGQlFVRXNWVUZCYlVJN1FVRkJRU3hWUVVGWExHRkJRV0VzWTBGQll5eERRVUZETzBGQlFVRXNWVUZEYWtjN1FVRkJRU3hSUVVGclFqdEJRVUZCTEUxQlEzaENPMEZCUlVFc1ZVRkJTU3h0UWtGQmJVSXNiMEpCUVc5Q08wRkJRek5ETEZWQlFVa3NhMEpCUVd0Q0xHMUNRVUZ0UWp0QlFVTjZReXhWUVVGSkxHOUNRVUZ2UWl4eFFrRkJjVUk3UVVGRE4wTXNWVUZCU1N4dFFrRkJiVUlzYjBKQlFXOUNPMEZCUXpORExHVkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NXVUZCV1N4TFFVRkxPMEZCUTI1RExGRkJRVUZCTEUxQlFVc3NVVUZCVVN4clFrRkJhMElzU1VGQlNTeHRRa0ZCYlVJc1EwRkJRenRCUVVOMlJDeFJRVUZCUVN4TlFVRkxMRkZCUVZFc2FVSkJRV2xDTEVsQlFVa3NjMEpCUVhOQ0xHRkJRV0VzUTBGQlF5eERRVUZETzBGQlFVRXNUVUZEZWtVN1FVRkRRU3hsUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEdGQlFXRXNTMEZCU3p0QlFVTndReXhSUVVGQlFTeE5RVUZMTEZGQlFWRXNiVUpCUVcxQ0xFbEJRVWtzYjBKQlFXOUNMRU5CUVVNN1FVRkRla1FzVVVGQlFVRXNUVUZCU3l4UlFVRlJMR3RDUVVGclFpeEpRVUZKTEhWQ1FVRjFRaXhqUVVGakxFTkJRVU1zUTBGQlF6dEJRVUZCTEUxQlF6VkZPMEZCUlVFc1ZVRkJTU3hQUVVGdFJUdEJRVU55UlN4alFVRk5MRVZCUVVNc1VVRkJVU3d3UWtGQk1FSXNaME5CUVN0Q0xFbEJRVWs3UVVGRk5VVXNXVUZCU1N4elFrRkJjMElzVjBGQlZ5eFpRVUZaTzBGQlF5OURMR2RDUVVGTkxFbEJRVWtzVFVGQlRTd3lRa0ZEV2l4VlFVRlZMRFJFUVVFMFJDeHpRa0ZCYzBJc1RVRkJUU3hKUVVGSk8wRkJRVUVzVVVGRE5VYzdRVUZIUVN4cFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeFpRVUZaTEV0QlFVczdRVUZEYmtNc1owSkJRVTBzVVVGQlVTeGhRVUZoTEVOQlFVTTdRVUZETlVJc1owSkJRVTFGTEdGQlFWa3NUVUZCVFVZc1RVRkJTeXhqUVVGakxGRkJRVkVzYzBKQlFYTkNMRXRCUVVzc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUTNSSExHTkJRVWxGTEdWQlFXTXNSMEZCUnp0QlFVTnVRaXd5UWtGQlpTeHZRa0ZCYjBJc1EwRkJReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhPMEZCUVVFc1ZVRkRia1U3UVVGQlFTeFJRVU5HTzBGQlIwRXNhVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzWVVGQllTeExRVUZMTzBGQlEzQkRMR2RDUVVGTkxGRkJRVkVzWTBGQll5eERRVUZETzBGQlF6ZENMR2RDUVVGTkxGZEJRVmNzWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXp0QlFVVnlReXhqUVVGSkxGVkJRVlU3UVVGRldpeHJRa0ZCVFVFc1lVRkJXVVlzVFVGQlN5eGxRVUZsTEZGQlFWRXNkVUpCUVhWQ0xFdEJRVXNzUjBGQlJ5eHZRa0ZCYjBJc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRGRFY3NaMEpCUVVsRkxHVkJRV01zUjBGQlJ6dEJRVU51UWl3MlFrRkJaU3h0UTBGQmJVTXNRMEZCUXl4cFFrRkJhVUlzVTBGQlV5eEhRVUZITzBGQlFVRXNXVUZEYkVZN1FVRkJRU3hWUVVOR0xFOUJRVTg3UVVGRlRDeHJRa0ZCVFVFc1lVRkRSa1lzVFVGQlN5eGxRVUZsTEZGQlFWRXNkVUpCUVhWQ0xFdEJRVXNzUjBGQlJ5eEhRVUZITEdkRFFVRm5ReXhMUVVGTExFTkJRVU03UVVGRGVFY3NaMEpCUVVsRkxHVkJRV01zUjBGQlJ6dEJRVU51UWl3MlFrRkJaU3h4UWtGQmNVSXNRMEZCUXl4UlFVRlJMSGxDUVVGNVFpeERRVUZETEVOQlFVTXNaMEpCUVdkQ0xGTkJRVk1zUjBGQlJ6dEJRVUZCTEZsQlEzUkhPMEZCUVVFc1ZVRkRSanRCUVVGQkxGRkJRMFk3UVVGRFFTeDFRa0ZCWlR0QlFVRkJMRlZCUTFnN1FVRkJRU3hWUVVOQkxFTkJRVU1zWlVGQlpTeDFRa0ZCZFVJc2QwSkJRWGRDTEdkQ1FVRm5RaXh2UWtGQmIwSXNTVUZCU1R0QlFVRkJMRkZCUVVNN1FVRkJRU3hOUVVNNVJ6dEJRVVZCTEUxQlFVRkdMRTFCUVVzc2FVSkJRV2xDTEdGQlFXRTdRVUZEYmtNc1ZVRkJTVHRCUVVOS0xGVkJRVWtzVDBGQk9FTTdRVUZEYUVRc2IwSkJRVmtzVFVGQlRVRXNUVUZCU3p0QlFVRkJMRlZCUTI1Q08wRkJRVUVzVlVGQlpTeGxRVUZsTzBGQlFVRXNWVUZCVVR0QlFVRkJMRlZCUVdFN1FVRkJRU3hWUVVGdlFqdEJRVUZCTEZGQlFXZENPMEZCUVVFc1RVRkROMFlzVDBGQlR6dEJRVU5NTEc5Q1FVRlpMRTFCUVUxQkxFMUJRVXM3UVVGQlFTeFZRVU51UWp0QlFVRkJMRlZCUVdVN1FVRkJRU3hWUVVGclFqdEJRVUZCTEZWQlFXMUNPMEZCUVVFc1ZVRkJXVHRCUVVGQkxGVkJRVzFDTzBGQlFVRXNWVUZEYmtZN1FVRkJRU3hWUVVGdlFqdEJRVUZCTEZGQlFXZENPMEZCUVVFc1RVRkRNVU03UVVGRlFTeFZRVUZKTEdOQlFXTXNSMEZCUnp0QlFVTnVRaXgxUWtGQlpTd3dRa0ZCTUVJN1FVRkJRU3hOUVVNelF6dEJRVVZCTEZsQlFVMHNVMEZCTWtJc1EwRkJRenRCUVVWc1F5eGxRVUZUTEVsQlFVa3NSMEZCUnl4SlFVRkpMR0ZCUVdFc1MwRkJTenRCUVVOd1F5eGpRVUZOTEZOQlFWTkJMRTFCUVVzc1VVRkJVU3h4UWtGQmNVSXNTVUZCU1N4RFFVRkRPMEZCUTNSRUxGbEJRVWtzVjBGQlZ5eHZRa0ZCYjBJc1EwRkJReXhIUVVGSE8wRkJSWEpETEdsQ1FVRlBMRXRCUVVzc1kwRkJZeXhEUVVGRExFTkJRVVU3UVVGRE4wSTdRVUZCUVN4UlFVTkdPMEZCUlVFc1kwRkJUU3d5UWtGQk1rSkJMRTFCUVVzc1ZVRkJWVHRCUVVWb1JDeGpRVUZOTEcxQ1FVRnRRa0VzVFVGQlN5eFhRVUZYTEVsQlFVa3NRMEZCUXp0QlFVVTVReXhaUVVGSkxHMUNRVUZ0UWp0QlFVTjJRaXhaUVVGSkxFMUJRVFpDTEdGQlFXRTdRVUZET1VNc1dVRkJTVHRCUVVOR0xHZENRVUZOUlN4aFFVRlpSaXhOUVVGTE8wRkJRVUVzV1VGRGJrSTdRVUZCUVN4WlFVRlJPMEZCUVVFc1dVRkJhMElzYlVKQlFXMUNPMEZCUVVFc1dVRkJSeXh0UWtGQmJVSTdRVUZCUVN4WlFVRkhMRzFDUVVGdFFqdEJRVUZCTEZWQlFVVTdRVUZETDBZc1kwRkJTVVVzWlVGQll5eEhRVUZITzBGQlEyNUNMREpDUVVGbExEUkRRVUUwUXl4RFFVRkRMRWRCUVVjN1FVRkJRU3hWUVVOcVJUdEJRVU5CTEdOQlFVa3NhMEpCUVd0Q0xHMUNRVUZ0UWp0QlFVTjZReXhuUWtGQlRTeFhRVUZYUml4TlFVRkxMRkZCUVZFc2FVSkJRV2xDTzBGQlF5OURMSFZDUVVGaFFTeE5RVUZMTEZGQlFWRXNhVUpCUVdsQ08wRkJRek5ETEdkQ1FVRk5MR0ZCUVdGQkxFMUJRVXNzVVVGQlVTeHBRa0ZCYVVJN1FVRkRha1FzWjBKQlFVMHNZVUZCWVVFc1RVRkJTeXhSUVVGUkxHbENRVUZwUWp0QlFVTnFSQ3huUWtGQlRTeFBRVUZQTEVOQlFVTTdRVUZEWkN4dFFrRkJVMGNzUzBGQlNTeEhRVUZIUVN4TFFVRkpMRmxCUVZsQkxFMUJRVXM3UVVGRGJrTXNhVUpCUVVzc1MwRkJTMGdzVFVGQlN5eFJRVUZSTEdGQlFXRXNTVUZCU1Vjc1JVRkJReXhEUVVGRE8wRkJRVUVzVlVGRE5VTTdRVUZEUVN4VlFVRkJTQ3hOUVVGTExGTkJRVk1zVlVGQlZUdEJRVVY0UWl4blFrRkJUU3hQUVVGUExFdEJRVXNzVDBGQlR5eERRVUZETEVkQlFVY3NUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJRenRCUVVNelF5eHBRa0ZCVHl3eVFrRkJNa0lzVVVGQlVUdEJRVVV4UXl4blFrRkJUU3h2UWtGQmIwSXNaMEpCUVdkQ0xIbENRVUY1UWl4alFVRmpMRU5CUVVNc1EwRkJRenRCUVVWdVJpeGpRVUZKTEZOQlFWTXNWVUZCVlR0QlFVTnlRaXhuUWtGQlNTeHpRa0ZCYzBJc1kwRkJZenRCUVVOMFF5eHZRa0ZCVFN4SlFVRkpMRTFCUVUwc2QwTkJRWGRETzBGQlFVRXNXVUZETVVRN1FVRkRRU3hyUWtGQlRTeGhRVUYxUWl4RFFVRkRPMEZCUXpsQ0xHZENRVUZKTEZsQlFWa3NZVUZCWVR0QlFVTTNRaXh4UWtGQlUwY3NTMEZCU1N4SFFVRkhRU3hMUVVGSkxFMUJRVTFCTEUxQlFVczdRVUZETjBJc2IwSkJRVTBzVTBGQlUwZ3NUVUZCU3l4UlFVRlJMRmRCUVZjN1FVRkRka01zYjBKQlFVMHNhVUpCUVdsQ1J5eFBRVUZOTEU5QlFVOHNTVUZCU1N4VFFVRlpTQ3hOUVVGTExGRkJRVkVzVTBGQlV5eEpRVUZKTzBGQlF6bEZMSGxDUVVGWExFdEJRVXRCTEUxQlFVc3NZVUZCWVN4UlFVRlJMR05CUVdNc1EwRkJRenRCUVVGQkxGbEJRek5FTzBGQlEwRXNiVUpCUVU4c1MwRkJTeXhEUVVGRExFMUJRVTBzVFVGQlRTeFpRVUZaTEV0QlFVc3NRMEZCUXp0QlFVRkJMRlZCUXpkRExFOUJRVTg3UVVGSFRDeG5Ra0ZCU1N4elFrRkJjMElzWjBKQlFXZENMRTlCUVU4c1IwRkJSenRCUVVOc1JDeHZRa0ZCVFN4WlFVRlpRU3hOUVVGTE8wRkJRM1pDTEd0Q1FVRkpMRU5CUVVNc1YwRkJWenRCUVVOa0xITkNRVUZOTEVsQlFVa3NUVUZCVFN4MVJVRkJkVVU3UVVGQlFTeGpRVU42Ump0QlFVTkJMRzlDUVVGTkxGbEJRVmtzVlVGQlZTeFZRVUZWTzBGQlEzUkRMRzlDUVVGTkxHTkJRV01zY1VKQlFYRkNMRkZCUVZFN1FVRkRha1FzYTBKQlFVa3NaMEpCUVdkQ0xGVkJRV0VzUTBGQlF5eDVRa0ZCZVVJc1NVRkJTU3hIUVVGSE8wRkJRMmhGTEhOQ1FVRk5MRWxCUVVrc1RVRkJUU3d3UWtGQk1FSXNTVUZCU1N4RlFVRkZPMEZCUVVFc1kwRkRiRVE3UVVGSFFTeHBRMEZCYlVJN1FVRkZia0lzY1VKQlFVOHNTMEZCU3p0QlFVRkJMR2RDUVVOV08wRkJRVUVzWjBKQlFVMDdRVUZCUVN4blFrRkJUVHRCUVVGQkxHdENRVU5XTzBGQlFVRXNhMEpCUTBFc1ZVRkJWVUVzVFVGQlN5eHhRa0ZCYzBJc1YwRkJWeXhQUVVGUExHRkJRV0VzU1VGQlNUdEJRVUZCTEd0Q1FVTjRSU3hUUVVGVExFMUJRVTA3UVVGRFlpeHZRa0ZCUVVFc1RVRkJTeXhyUWtGQmEwSXNUVUZCVFR0QlFVRkJMR3RDUVVNdlFqdEJRVUZCTEdkQ1FVTkdPMEZCUVVFc1owSkJRMEU3UVVGQlFTeGpRVU5HTEVOQlFVTTdRVUZCUVN4WlFVTklMRTlCUVU4N1FVRkRUQ3h2UWtGQlRTeDNRa0ZCZDBJc2EwTkJRV3RETEVsQlFVazdRVUZEY0VVc2IwSkJRVTBzVDBGQlR5eEpRVUZKTEhOQ1FVRnpRaXhKUVVGSk8wRkJRek5ETEd0Q1FVRkpMRmRCUVZjc1MwRkJTeXhSUVVGUkxFdEJRVXNzV1VGQldTeExRVUZMTEZWQlFWVXNSVUZEZGtRc1NVRkJTVUVzVFVGQlN5eFBRVUZQTEZOQlFWTXNXVUZCV1N4aFFVRmhMRXRCUVVzc1ZVRkJWU3hEUVVGRE8wRkJRM1pGTEhGQ1FVRlBMRXRCUVVzc1EwRkJReXhOUVVGTkxFMUJRVTBzVFVGQlRTeExRVUZMTEVOQlFVTTdRVUZCUVN4WlFVTjJRenRCUVVGQkxGVkJRMFk3UVVGQlFTeFJRVU5HTEZWQlFVVTdRVUZEUVN4VlFVRkJRU3hOUVVGTExHRkJRV0VzZDBKQlFYZENPMEZCUXpGRExHTkJRVWtzVTBGQlV5eFpRVUZaTEZsQlFWazdRVUZEYmtNc1dVRkJRVUVzVFVGQlN5eE5RVUZOTEZWQlFWVTdRVUZCUVN4VlFVTjJRanRCUVVOQkxHTkJRVWtzUTBGQlF5eHJRa0ZCYTBJN1FVRkRja0lzV1VGQlFVRXNUVUZCU3l4clFrRkJhMElzVFVGQlRUdEJRVUZCTEZWQlF5OUNPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVGRlFTeFZRVUZKTEd0Q1FVRnJRaXhEUVVGRExHOUNRVUZ2UWp0QlFVTjZReXhSUVVGQlFTeE5RVUZMTEhOQ1FVRnpRaXhsUVVGbExFMUJRVTA3UVVGRGFFUXNkVUpCUVdVN1FVRkJRU3hWUVVOWU8wRkJRVUVzVlVGRFFTeERRVUZETEdWQlFXVXNkVUpCUVhWQ0xIZENRVUYzUWl4blFrRkJaMElzYjBKQlFXOUNMRXRCUVVzN1FVRkJRU3hSUVVGRE8wRkJRVUVzVFVGREwwYzdRVUZEUVN4aFFVRlBPMEZCUVVFc1NVRkRWQ3hWUVVGRk8wRkJRMEVzVFVGQlFVRXNUVUZCU3l4aFFVRmhMR05CUVdNN1FVRkZhRU1zZVVKQlFXMUNMRkZCUVZFc1QwRkJTMEVzVFVGQlN5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRE8wRkJRM3BFTERCQ1FVRnZRaXhSUVVGUkxFOUJRVXRCTEUxQlFVc3NhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dEJRVU14UkN4M1FrRkJhMElzVVVGQlVTeFBRVUZMUVN4TlFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJSVFZETEZWQlFVa3NjVUpCUVhGQ0xFZEJRVWM3UVVGRE1VSXNVVUZCUVVFc1RVRkJTeXh6UWtGQmMwSXNaMEpCUVdkQ08wRkJRVUVzVFVGRE4wTTdRVUZEUVN4MVFrRkJhVUlzVVVGQlVTeFBRVUZMUVN4TlFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRVUVzU1VGRE4wTTdRVUZCUVN4RlFVTkdPMEZCUzA4c1RVRkJUU3hsUVVGbExFTkJRVU1zWTBGQk5FSTdRVUZEZGtRc1ZVRkJUVUVzVVVGQlR5eFpRVUZaTzBGQlEzcENMRlZCUVUwc1ZVRkJWU3hsUVVGbExFbEJRVWtzVTBGQlV6dEJRVU0xUXl4UlFVRkpMRU5CUVVNc1UwRkJVenRCUVVOYUxGbEJRVTBzU1VGQlNTeE5RVUZOTEc5Q1FVRnZRanRCUVVGQkxFbEJRM1JETzBGQlEwRXNWVUZCVFN4blFrRkJaMElzVVVGQlVTeERRVUZETzBGQlJ5OUNMRlZCUVUwc2EwSkJRV3RDUVN4TlFVRkxMR2xDUVVGcFFpeGhRVUZoTzBGQlF6TkVMRkZCUVVrc2IwSkJRVzlDTEVkQlFVYzdRVUZEZWtJc2NVSkJRV1VzYVVOQlFXdERPMEZCUVVFc1NVRkRia1E3UVVGRFFTeEpRVUZCUVN4TlFVRkxMRk5CUVZNc1pVRkJaVHRCUVVGQkxFVkJReTlDTzBGQlJVOHNUVUZCVFN3MlFrRkJOa0lzUTBGQlF5eFpRVUZ6UlR0QlFVTXZSeXhWUVVGTkxGVkJRVFpDTEVOQlFVTTdRVUZEY0VNc1pVRkJWeXhWUVVGVkxGTkJRVk03UVVGRE5VSXNXVUZCVFN4UFFVRlBMRTlCUVU4c1EwRkJRenRCUVVOeVFpeFZRVUZKTEVOQlFVTXNUVUZCVFN4UlFVRlJMRWxCUVVrc1MwRkJTeXhaUVVGWkxFMUJRVTA3UVVGRE5VTXNaMEpCUVZFc1MwRkJTeXhMUVVGTExFMUJRVTA3UVVGQlFTeE5RVU14UWp0QlFVRkJMRWxCUTBZN1FVRkRRU3hYUVVGUE8wRkJRVUVzUlVGRFZEczdPMEZEYkhGQ1FTeFBRVUZMTEZsQlFWa3NRMEZCUXl4UFFVRXlRenRCUVVNelJDeFZRVUZOTEVWQlFVTXNUVUZCVFN4SlFVRkxMRkZCUVU4c1NVRkJTU3hIUVVGSE8wRkJRMmhETEZGQlFVazdRVUZEUml4alFVRlJMRTFCUVUwN1FVRkJRU3hSUVVOYUxFdEJRVXM3UVVGRFNDeG5RMEZCYzBJc1VVRkJVeXhKUVVGSkxFVkJRemxDTzBGQlFVRXNXVUZEUnl4TlFVRk5PMEZCUTBvc01FSkJRVmtzVDBGQlVTeEZRVUZGTzBGQlFVRXNaMEpCUTJ4Q0xFMUJRVTA3UVVGRFNpdzRRa0ZCV1N4RlFVRkRMRXRCUVVrc1EwRkJRenRCUVVGQkxHZENRVU53UWp0QlFVRkJMR2RDUVVOQkxGTkJRVTg3UVVGRFRDdzRRa0ZCV1N4RlFVRkRMRTFCUVUwc1NVRkJSeXhEUVVGRE8wRkJRVUVzWjBKQlEzcENPMEZCUVVFc1kwRkJRenRCUVVGQkxGbEJRMUE3UVVGQlFTeFpRVU5CTEZOQlFVODdRVUZEVEN3d1FrRkJXU3hGUVVGRExFMUJRVTBzU1VGQlJ5eERRVUZETzBGQlFVRXNXVUZEZWtJN1FVRkJRU3hWUVVGRE8wRkJRMVE3UVVGQlFTeFJRVU5HTEV0QlFVc3NWMEZCVnp0QlFVTmtMR2RDUVVGTkxFVkJRVU1zVVVGQlVTeEpRVUZITEVsQlFVazdRVUZEZEVJc2FVSkJRVThzUzBGQlN5eE5RVUZOTEVWQlEySTdRVUZCUVN4WlFVTkhMRTFCUVUwN1FVRkRTaXd3UWtGQldTeEZRVUZETEV0QlFVa3NRMEZCUXp0QlFVRkJMRmxCUTNCQ08wRkJRVUVzV1VGRFFTeFRRVUZQTzBGQlEwd3NNRUpCUVZrc1JVRkJReXhOUVVGTkxFbEJRVWNzUTBGQlF6dEJRVUZCTEZsQlEzcENPMEZCUVVFc1ZVRkJRenRCUVVOVU8wRkJRVUVzVVVGRFJqdEJRVUZCTEZGQlEwRXNTMEZCU3l4aFFVRmhPMEZCUTJoQ0xHZENRVUZOTEVWQlFVTXNUMEZCVFN4SlFVRkpPMEZCUTJwQ0xHZENRVUZOTEdGQlFXRXNkVUpCUVhWQ0xFMUJRVTA3UVVGRGFFUXNjMEpCUVZrc1JVRkJReXhOUVVGTkxFdEJRVXNzVjBGQlZTeERRVUZ0UWp0QlFVTnlSRHRCUVVGQkxGRkJRMFk3UVVGQlFTeFJRVU5CTEV0QlFVc3NWVUZCVlR0QlFVTmlMR2RDUVVGTkxFVkJRVU1zVDBGQlR5eFJRVUZQTEVsQlFVazdRVUZEZWtJc2QwSkJRV01zVDBGQlR5eFBRVUZQTEVWQlEzWkNPMEZCUVVFc1dVRkRSeXh4UWtGQmJVSTdRVUZEYWtJc01FSkJRVmtzUlVGQlF5eE5RVUZOTEV0QlFVc3NaMEpCUVdVc1EwRkJiVUk3UVVGQlFTeFpRVU0xUkR0QlFVRkJMRmxCUTBFc1UwRkJUenRCUVVOTUxEQkNRVUZaTEVWQlFVTXNUVUZCVFN4SlFVRkhMRU5CUVVNN1FVRkJRU3haUVVONlFqdEJRVUZCTEZWQlFVTTdRVUZEVkR0QlFVRkJMRkZCUTBZN1FVRkJRU3hSUVVOQkxFdEJRVXM3UVVGRFNDeDVRa0ZCWlN4UFFVRlJPMEZCUTNaQ0xITkNRVUZaTEVWQlFVTXNTMEZCU1N4RFFVRkRPMEZCUTJ4Q08wRkJRVUVzVVVGRFJpeExRVUZMTEU5QlFVODdRVUZEVml4blFrRkJUU3hGUVVGRExGZEJRVmNzWTBGQll5eFJRVUZSTEdWQlFXVXNVVUZCVHl4SlFVRkpPMEZCUTJ4RkxHTkJRVWtzVjBGQlZ5eGpRVUZqTEZGQlFWRXNaVUZCWlN4SlFVRkpMRTFCUVUwc1kwRkJZeXhOUVVGTkxFVkJRVVVzUzBGQlN5eEpRVUZKTEVkQlFVY3NUMEZCVHl4RlFVTnNSenRCUVVGQkxGbEJRMGNzWVVGQlZ6dEJRVU5VTEd0Q1FVRkpMRkZCUVZFc1MwRkJTeXhQUVVGTExFVkJRVVVzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZCUnp0QlFVTnlReXcwUWtGQldTeEZRVUZETEUxQlFVMHNTMEZCU3l4clJFRkJhVVFzUTBGQlF6dEJRVUZCTEdOQlF6VkZMRTlCUVU4N1FVRkRURHRCUVVGQkxHdENRVU5KTEVWQlFVTXNUVUZCVFN4TFFVRkxMRkZCUVU4N1FVRkJRU3hyUWtGRGJrSXNNa0pCUVRKQ0xFTkJRVU1zUjBGQlJ5eFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRnBRenRCUVVGQkxHZENRVUZETzBGQlFVRXNZMEZEZWtZN1FVRkJRU3haUVVOR08wRkJRVUVzV1VGRFFTeFRRVUZQTzBGQlEwd3NNRUpCUVZrc1JVRkJReXhOUVVGTkxFbEJRVWNzUTBGQlF6dEJRVUZCTEZsQlEzcENPMEZCUVVFc1ZVRkJRenRCUVVOVU8wRkJRVUVzVVVGRFJqdEJRVUZCTEZGQlEwRXNTMEZCU3p0QlFVTklMSFZDUVVGaExFOUJRVkU3UVVGRGNrSXNjMEpCUVZrc1JVRkJReXhMUVVGSkxFTkJRVU03UVVGRGJFSTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVGQkxFbEJRMFlzVTBGQlV5eExRVUZMTzBGQlExb3NhMEpCUVZrc1JVRkJReXhOUVVGTkxFbEJRVWNzUTBGQmJVSTdRVUZCUVN4SlFVTXpRenRCUVVGQkxFVkJRMFk3SWl3S0lDQWlibUZ0WlhNaU9pQmJJbXB2YVc0aUxDQWlkMkZ6YlNJc0lDSjNZWE50SWl3Z0luZGhjMjBpTENBaWNtVmhaRVpwYkdVaUxDQWljbVZoWkVacGJHVWlMQ0FpZDJGemJTSXNJQ0owWlc1emIzSWlMQ0FpWlhKeWIzSkRiMlJsSWl3Z0lta2lYUXA5Q2c9PVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2VudiwgSW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtPcnRXYXNtTWVzc2FnZSwgU2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXIsIFNlcmlhbGl6YWJsZVNlc3Npb25NZXRhZGF0YSwgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGEsIFRlbnNvck1ldGFkYXRhfSBmcm9tICcuL3Byb3h5LW1lc3NhZ2VzJztcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnLi93YXNtLWNvcmUtaW1wbCc7XG5pbXBvcnQge2luaXRpYWxpemVXZWJBc3NlbWJseX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuXG5jb25zdCBpc1Byb3h5ID0gKCk6IGJvb2xlYW4gPT4gISFlbnYud2FzbS5wcm94eSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xubGV0IHByb3h5V29ya2VyOiBXb3JrZXJ8dW5kZWZpbmVkO1xubGV0IGluaXRpYWxpemluZyA9IGZhbHNlO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5sZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG50eXBlIFByb21pc2VDYWxsYmFja3M8VCA9IHZvaWQ+ID0gW3Jlc29sdmU6IChyZXN1bHQ6IFQpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZF07XG5sZXQgaW5pdFdhc21DYWxsYmFja3M6IFByb21pc2VDYWxsYmFja3M7XG5jb25zdCBxdWV1ZWRDYWxsYmFja3M6IE1hcDxPcnRXYXNtTWVzc2FnZVsndHlwZSddLCBBcnJheTxQcm9taXNlQ2FsbGJhY2tzPHVua25vd24+Pj4gPSBuZXcgTWFwKCk7XG5cbmNvbnN0IGVucXVldWVDYWxsYmFja3MgPSAodHlwZTogT3J0V2FzbU1lc3NhZ2VbJ3R5cGUnXSwgY2FsbGJhY2tzOiBQcm9taXNlQ2FsbGJhY2tzPHVua25vd24+KTogdm9pZCA9PiB7XG4gIGNvbnN0IHF1ZXVlID0gcXVldWVkQ2FsbGJhY2tzLmdldCh0eXBlKTtcbiAgaWYgKHF1ZXVlKSB7XG4gICAgcXVldWUucHVzaChjYWxsYmFja3MpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlZENhbGxiYWNrcy5zZXQodHlwZSwgW2NhbGxiYWNrc10pO1xuICB9XG59O1xuXG5jb25zdCBlbnN1cmVXb3JrZXIgPSAoKTogdm9pZCA9PiB7XG4gIGlmIChpbml0aWFsaXppbmcgfHwgIWluaXRpYWxpemVkIHx8IGFib3J0ZWQgfHwgIXByb3h5V29ya2VyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd3b3JrZXIgbm90IHJlYWR5Jyk7XG4gIH1cbn07XG5cbmNvbnN0IG9uUHJveHlXb3JrZXJNZXNzYWdlID0gKGV2OiBNZXNzYWdlRXZlbnQ8T3J0V2FzbU1lc3NhZ2U+KTogdm9pZCA9PiB7XG4gIHN3aXRjaCAoZXYuZGF0YS50eXBlKSB7XG4gICAgY2FzZSAnaW5pdC13YXNtJzpcbiAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgaWYgKGV2LmRhdGEuZXJyKSB7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICBpbml0V2FzbUNhbGxiYWNrc1sxXShldi5kYXRhLmVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGluaXRXYXNtQ2FsbGJhY2tzWzBdKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbml0LWVwJzpcbiAgICBjYXNlICdjb3B5LWZyb20nOlxuICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgY2FzZSAncmVsZWFzZSc6XG4gICAgY2FzZSAncnVuJzpcbiAgICBjYXNlICdlbmQtcHJvZmlsaW5nJzoge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gcXVldWVkQ2FsbGJhY2tzLmdldChldi5kYXRhLnR5cGUpITtcbiAgICAgIGlmIChldi5kYXRhLmVycikge1xuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKSFbMV0oZXYuZGF0YS5lcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkhWzBdKGV2LmRhdGEub3V0ISk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgfVxufTtcblxuY29uc3Qgc2NyaXB0U3JjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IChkb2N1bWVudD8uY3VycmVudFNjcmlwdCBhcyBIVE1MU2NyaXB0RWxlbWVudCk/LnNyYyA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVXZWJBc3NlbWJseUFuZE9ydFJ1bnRpbWUgPSBhc3luYygpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbml0aWFsaXppbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGxlIGNhbGxzIHRvIFxcJ2luaXRXYXNtKClcXCcgZGV0ZWN0ZWQuJyk7XG4gIH1cbiAgaWYgKGFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZXZpb3VzIGNhbGwgdG8gXFwnaW5pdFdhc20oKVxcJyBmYWlsZWQuJyk7XG4gIH1cblxuICBpbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fUFJPWFkgJiYgaXNQcm94eSgpKSB7XG4gICAgLy8gb3ZlcndyaXRlIHdhc20gZmlsZXBhdGhzXG4gICAgaWYgKGVudi53YXNtLndhc21QYXRocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoc2NyaXB0U3JjICYmIHNjcmlwdFNyYy5pbmRleE9mKCdibG9iOicpICE9PSAwKSB7XG4gICAgICAgIGVudi53YXNtLndhc21QYXRocyA9IHNjcmlwdFNyYy5zdWJzdHIoMCwgKyhzY3JpcHRTcmMpLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcHJveHlXb3JrZXI/LnRlcm1pbmF0ZSgpO1xuXG4gICAgICBjb25zdCB3b3JrZXJVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZSgpIGZ1bmN0aW9uIGlzIGhhbmRsZWQgYnkgZXNidWlsZCBwbHVnaW4gdG8gbG9hZCBmaWxlIGNvbnRlbnQgYXMgc3RyaW5nLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICAgIHJlcXVpcmUoJy4vcHJveHktd29ya2VyL21haW4nKVxuICAgICAgICAgIF0sXG4gICAgICAgICAge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSkpO1xuICAgICAgcHJveHlXb3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybCwge25hbWU6ICdvcnQtd2FzbS1wcm94eS13b3JrZXInfSk7XG4gICAgICBwcm94eVdvcmtlci5vbmVycm9yID0gKGV2OiBFcnJvckV2ZW50KSA9PiByZWplY3QoZXYpO1xuICAgICAgcHJveHlXb3JrZXIub25tZXNzYWdlID0gb25Qcm94eVdvcmtlck1lc3NhZ2U7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHdvcmtlclVybCk7XG4gICAgICBpbml0V2FzbUNhbGxiYWNrcyA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgY29uc3QgbWVzc2FnZTogT3J0V2FzbU1lc3NhZ2UgPSB7dHlwZTogJ2luaXQtd2FzbScsIGluIDogZW52fTtcbiAgICAgIHByb3h5V29ya2VyLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGluaXRpYWxpemVXZWJBc3NlbWJseShlbnYud2FzbSk7XG4gICAgICBhd2FpdCBjb3JlLmluaXRSdW50aW1lKGVudik7XG4gICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplT3J0RXAgPSBhc3luYyhlcE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1BST1hZICYmIGlzUHJveHkoKSkge1xuICAgIGVuc3VyZVdvcmtlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlbnF1ZXVlQ2FsbGJhY2tzKCdpbml0LWVwJywgW3Jlc29sdmUsIHJlamVjdF0pO1xuICAgICAgY29uc3QgbWVzc2FnZTogT3J0V2FzbU1lc3NhZ2UgPSB7dHlwZTogJ2luaXQtZXAnLCBpbiA6IHtlcE5hbWUsIGVudn19O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGNvcmUuaW5pdEVwKGVudiwgZXBOYW1lKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIgPSBhc3luYyhidWZmZXI6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyPiA9PiB7XG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fUFJPWFkgJiYgaXNQcm94eSgpKSB7XG4gICAgZW5zdXJlV29ya2VyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlbnF1ZXVlQ2FsbGJhY2tzKCdjb3B5LWZyb20nLCBbcmVzb2x2ZSwgcmVqZWN0XSk7XG4gICAgICBjb25zdCBtZXNzYWdlOiBPcnRXYXNtTWVzc2FnZSA9IHt0eXBlOiAnY29weS1mcm9tJywgaW4gOiB7YnVmZmVyfX07XG4gICAgICBwcm94eVdvcmtlciEucG9zdE1lc3NhZ2UobWVzc2FnZSwgW2J1ZmZlci5idWZmZXJdKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29yZS5jb3B5RnJvbUV4dGVybmFsQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXNzaW9uID1cbiAgICBhc3luYyhtb2RlbDogU2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXJ8VWludDhBcnJheSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgICBQcm9taXNlPFNlcmlhbGl6YWJsZVNlc3Npb25NZXRhZGF0YT4gPT4ge1xuICAgICAgICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fUFJPWFkgJiYgaXNQcm94eSgpKSB7XG4gICAgICAgICAgICAvLyBjaGVjayB1bnN1cHBvcnRlZCBvcHRpb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXNzaW9uIG9wdGlvbiBcInByZWZlcnJlZE91dHB1dExvY2F0aW9uXCIgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJveHkuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnN1cmVXb3JrZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTZXJpYWxpemFibGVTZXNzaW9uTWV0YWRhdGE+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhbGxiYWNrcygnY3JlYXRlJywgW3Jlc29sdmUsIHJlamVjdF0pO1xuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlOiBPcnRXYXNtTWVzc2FnZSA9IHt0eXBlOiAnY3JlYXRlJywgaW4gOiB7bW9kZWwsIG9wdGlvbnM6IHsuLi5vcHRpb25zfX19O1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2ZlcmFibGU6IFRyYW5zZmVyYWJsZVtdID0gW107XG4gICAgICAgICAgICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGUucHVzaChtb2RlbC5idWZmZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb3h5V29ya2VyIS5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcmFibGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLmNyZWF0ZVNlc3Npb24obW9kZWwsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuZXhwb3J0IGNvbnN0IHJlbGVhc2VTZXNzaW9uID0gYXN5bmMoc2Vzc2lvbklkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9QUk9YWSAmJiBpc1Byb3h5KCkpIHtcbiAgICBlbnN1cmVXb3JrZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZW5xdWV1ZUNhbGxiYWNrcygncmVsZWFzZScsIFtyZXNvbHZlLCByZWplY3RdKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE9ydFdhc21NZXNzYWdlID0ge3R5cGU6ICdyZWxlYXNlJywgaW4gOiBzZXNzaW9uSWR9O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvcmUucmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJ1biA9IGFzeW5jKFxuICAgIHNlc3Npb25JZDogbnVtYmVyLCBpbnB1dEluZGljZXM6IG51bWJlcltdLCBpbnB1dHM6IFRlbnNvck1ldGFkYXRhW10sIG91dHB1dEluZGljZXM6IG51bWJlcltdLFxuICAgIG91dHB1dHM6IEFycmF5PFRlbnNvck1ldGFkYXRhfG51bGw+LCBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFRlbnNvck1ldGFkYXRhW10+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9QUk9YWSAmJiBpc1Byb3h5KCkpIHtcbiAgICAvLyBjaGVjayBpbnB1dHMgbG9jYXRpb25cbiAgICBpZiAoaW5wdXRzLnNvbWUodCA9PiB0WzNdICE9PSAnY3B1JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgdGVuc29yIG9uIEdQVSBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm94eS4nKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgb3V0cHV0cyBsb2NhdGlvblxuICAgIGlmIChvdXRwdXRzLnNvbWUodCA9PiB0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmUtYWxsb2NhdGVkIG91dHB1dCB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJveHkuJyk7XG4gICAgfVxuICAgIGVuc3VyZVdvcmtlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlbnF1ZXVlQ2FsbGJhY2tzKCdydW4nLCBbcmVzb2x2ZSwgcmVqZWN0XSk7XG4gICAgICBjb25zdCBzZXJpYWxpemFibGVJbnB1dHMgPSBpbnB1dHMgYXMgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGFbXTsgIC8vIGV2ZXJ5IGlucHV0IGlzIG9uIENQVS5cbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE9ydFdhc21NZXNzYWdlID1cbiAgICAgICAgICB7dHlwZTogJ3J1bicsIGluIDoge3Nlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHM6IHNlcmlhbGl6YWJsZUlucHV0cywgb3V0cHV0SW5kaWNlcywgb3B0aW9uc319O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIGNvcmUuZXh0cmFjdFRyYW5zZmVyYWJsZUJ1ZmZlcnMoc2VyaWFsaXphYmxlSW5wdXRzKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvcmUucnVuKHNlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHMsIG91dHB1dEluZGljZXMsIG91dHB1dHMsIG9wdGlvbnMpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZW5kUHJvZmlsaW5nID0gYXN5bmMoc2Vzc2lvbklkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9QUk9YWSAmJiBpc1Byb3h5KCkpIHtcbiAgICBlbnN1cmVXb3JrZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZW5xdWV1ZUNhbGxiYWNrcygnZW5kLXByb2ZpbGluZycsIFtyZXNvbHZlLCByZWplY3RdKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE9ydFdhc21NZXNzYWdlID0ge3R5cGU6ICdlbmQtcHJvZmlsaW5nJywgaW4gOiBzZXNzaW9uSWR9O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvcmUuZW5kUHJvZmlsaW5nKHNlc3Npb25JZCk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbiwgSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIsIFNlc3Npb25IYW5kbGVyLCBUZW5zb3IsIFRSQUNFX0ZVTkNfQkVHSU4sIFRSQUNFX0ZVTkNfRU5EfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge1NlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLCBUZW5zb3JNZXRhZGF0YX0gZnJvbSAnLi9wcm94eS1tZXNzYWdlcyc7XG5pbXBvcnQge2NvcHlGcm9tRXh0ZXJuYWxCdWZmZXIsIGNyZWF0ZVNlc3Npb24sIGVuZFByb2ZpbGluZywgcmVsZWFzZVNlc3Npb24sIHJ1bn0gZnJvbSAnLi9wcm94eS13cmFwcGVyJztcbmltcG9ydCB7aXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlfSBmcm9tICcuL3dhc20tY29tbW9uJztcbmltcG9ydCB7bG9hZEZpbGV9IGZyb20gJy4vd2FzbS11dGlscy1sb2FkLWZpbGUnO1xuXG5leHBvcnQgY29uc3QgZW5jb2RlVGVuc29yTWV0YWRhdGEgPSAodGVuc29yOiBUZW5zb3IsIGdldE5hbWU6ICgpID0+IHN0cmluZyk6IFRlbnNvck1ldGFkYXRhID0+IHtcbiAgc3dpdGNoICh0ZW5zb3IubG9jYXRpb24pIHtcbiAgICBjYXNlICdjcHUnOlxuICAgICAgcmV0dXJuIFt0ZW5zb3IudHlwZSwgdGVuc29yLmRpbXMsIHRlbnNvci5kYXRhLCAnY3B1J107XG4gICAgY2FzZSAnZ3B1LWJ1ZmZlcic6XG4gICAgICByZXR1cm4gW3RlbnNvci50eXBlLCB0ZW5zb3IuZGltcywge2dwdUJ1ZmZlcjogdGVuc29yLmdwdUJ1ZmZlcn0sICdncHUtYnVmZmVyJ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkYXRhIGxvY2F0aW9uOiAke3RlbnNvci5sb2NhdGlvbn0gZm9yICR7Z2V0TmFtZSgpfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlVGVuc29yTWV0YWRhdGEgPSAodGVuc29yOiBUZW5zb3JNZXRhZGF0YSk6IFRlbnNvciA9PiB7XG4gIHN3aXRjaCAodGVuc29yWzNdKSB7XG4gICAgY2FzZSAnY3B1JzpcbiAgICAgIHJldHVybiBuZXcgVGVuc29yKHRlbnNvclswXSwgdGVuc29yWzJdLCB0ZW5zb3JbMV0pO1xuICAgIGNhc2UgJ2dwdS1idWZmZXInOiB7XG4gICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclswXTtcbiAgICAgIGlmICghaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlKGRhdGFUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBzdXBwb3J0ZWQgZGF0YSB0eXBlOiAke2RhdGFUeXBlfSBmb3IgZGVzZXJpYWxpemluZyBHUFUgdGVuc29yYCk7XG4gICAgICB9XG4gICAgICBjb25zdCB7Z3B1QnVmZmVyLCBkb3dubG9hZCwgZGlzcG9zZX0gPSB0ZW5zb3JbMl07XG4gICAgICByZXR1cm4gVGVuc29yLmZyb21HcHVCdWZmZXIoZ3B1QnVmZmVyLCB7ZGF0YVR5cGUsIGRpbXM6IHRlbnNvclsxXSwgZG93bmxvYWQsIGRpc3Bvc2V9KTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkYXRhIGxvY2F0aW9uOiAke3RlbnNvclszXX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIE9ubnhydW50aW1lV2ViQXNzZW1ibHlTZXNzaW9uSGFuZGxlciBpbXBsZW1lbnRzIEluZmVyZW5jZVNlc3Npb25IYW5kbGVyIHtcbiAgcHJpdmF0ZSBzZXNzaW9uSWQ6IG51bWJlcjtcblxuICBpbnB1dE5hbWVzOiBzdHJpbmdbXTtcbiAgb3V0cHV0TmFtZXM6IHN0cmluZ1tdO1xuXG4gIGFzeW5jIGZldGNoTW9kZWxBbmRDb3B5VG9XYXNtTWVtb3J5KHBhdGg6IHN0cmluZyk6IFByb21pc2U8U2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXI+IHtcbiAgICAvLyBmZXRjaCBtb2RlbCBmcm9tIHVybCBhbmQgbW92ZSB0byB3YXNtIGhlYXAuXG4gICAgcmV0dXJuIGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIoYXdhaXQgbG9hZEZpbGUocGF0aCkpO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vZGVsKHBhdGhPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgVFJBQ0VfRlVOQ19CRUdJTigpO1xuICAgIGxldCBtb2RlbDogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlU2Vzc2lvbj5bMF07XG5cbiAgICBpZiAodHlwZW9mIHBhdGhPckJ1ZmZlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAgICAgLy8gbm9kZVxuICAgICAgICBtb2RlbCA9IGF3YWl0IGxvYWRGaWxlKHBhdGhPckJ1ZmZlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBicm93c2VyXG4gICAgICAgIC8vIGZldGNoIG1vZGVsIGFuZCBjb3B5IHRvIHdhc20gaGVhcC5cbiAgICAgICAgbW9kZWwgPSBhd2FpdCB0aGlzLmZldGNoTW9kZWxBbmRDb3B5VG9XYXNtTWVtb3J5KHBhdGhPckJ1ZmZlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsID0gcGF0aE9yQnVmZmVyO1xuICAgIH1cblxuICAgIFt0aGlzLnNlc3Npb25JZCwgdGhpcy5pbnB1dE5hbWVzLCB0aGlzLm91dHB1dE5hbWVzXSA9IGF3YWl0IGNyZWF0ZVNlc3Npb24obW9kZWwsIG9wdGlvbnMpO1xuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiByZWxlYXNlU2Vzc2lvbih0aGlzLnNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBydW4oZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsIG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKCk7XG4gICAgY29uc3QgaW5wdXRBcnJheTogVGVuc29yW10gPSBbXTtcbiAgICBjb25zdCBpbnB1dEluZGljZXM6IG51bWJlcltdID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoZmVlZHMpLmZvckVhY2goa3ZwID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBrdnBbMF07XG4gICAgICBjb25zdCB0ZW5zb3IgPSBrdnBbMV07XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5wdXROYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW5wdXQgJyR7bmFtZX0nYCk7XG4gICAgICB9XG4gICAgICBpbnB1dEFycmF5LnB1c2godGVuc29yKTtcbiAgICAgIGlucHV0SW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dEFycmF5OiBBcnJheTxUZW5zb3J8bnVsbD4gPSBbXTtcbiAgICBjb25zdCBvdXRwdXRJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKGZldGNoZXMpLmZvckVhY2goa3ZwID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBrdnBbMF07XG4gICAgICBjb25zdCB0ZW5zb3IgPSBrdnBbMV07XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3V0cHV0TmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG91dHB1dCAnJHtuYW1lfSdgKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dEFycmF5LnB1c2godGVuc29yKTtcbiAgICAgIG91dHB1dEluZGljZXMucHVzaChpbmRleCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dHMgPVxuICAgICAgICBpbnB1dEFycmF5Lm1hcCgodCwgaSkgPT4gZW5jb2RlVGVuc29yTWV0YWRhdGEodCwgKCkgPT4gYGlucHV0IFwiJHt0aGlzLmlucHV0TmFtZXNbaW5wdXRJbmRpY2VzW2ldXX1cImApKTtcbiAgICBjb25zdCBvdXRwdXRzID0gb3V0cHV0QXJyYXkubWFwKFxuICAgICAgICAodCwgaSkgPT4gdCA/IGVuY29kZVRlbnNvck1ldGFkYXRhKHQsICgpID0+IGBvdXRwdXQgXCIke3RoaXMub3V0cHV0TmFtZXNbb3V0cHV0SW5kaWNlc1tpXV19XCJgKSA6IG51bGwpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJ1bih0aGlzLnNlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHMsIG91dHB1dEluZGljZXMsIG91dHB1dHMsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgcmVzdWx0TWFwOiBTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRNYXBbdGhpcy5vdXRwdXROYW1lc1tvdXRwdXRJbmRpY2VzW2ldXV0gPSBvdXRwdXRBcnJheVtpXSA/PyBkZWNvZGVUZW5zb3JNZXRhZGF0YShyZXN1bHRzW2ldKTtcbiAgICB9XG4gICAgVFJBQ0VfRlVOQ19FTkQoKTtcbiAgICByZXR1cm4gcmVzdWx0TWFwO1xuICB9XG5cbiAgc3RhcnRQcm9maWxpbmcoKTogdm9pZCB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHByb2ZpbGluZ1xuICB9XG5cbiAgZW5kUHJvZmlsaW5nKCk6IHZvaWQge1xuICAgIHZvaWQgZW5kUHJvZmlsaW5nKHRoaXMuc2Vzc2lvbklkKTtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2NwdXN9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtCYWNrZW5kLCBlbnYsIEluZmVyZW5jZVNlc3Npb24sIEluZmVyZW5jZVNlc3Npb25IYW5kbGVyfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge2luaXRpYWxpemVPcnRFcCwgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5QW5kT3J0UnVudGltZX0gZnJvbSAnLi93YXNtL3Byb3h5LXdyYXBwZXInO1xuaW1wb3J0IHtPbm54cnVudGltZVdlYkFzc2VtYmx5U2Vzc2lvbkhhbmRsZXJ9IGZyb20gJy4vd2FzbS9zZXNzaW9uLWhhbmRsZXItaW5mZXJlbmNlJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFsbCBmbGFncyBmb3IgV2ViQXNzZW1ibHkuXG4gKlxuICogVGhvc2UgZmxhZ3MgYXJlIGFjY2Vzc2libGUgZnJvbSBgb3J0LmVudi53YXNtYC4gVXNlcnMgYXJlIGFsbG93IHRvIHNldCB0aG9zZSBmbGFncyBiZWZvcmUgdGhlIGZpcnN0IGluZmVyZW5jZSBzZXNzaW9uXG4gKiBiZWluZyBjcmVhdGVkLCB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUZsYWdzID0gKCk6IHZvaWQgPT4ge1xuICBpZiAodHlwZW9mIGVudi53YXNtLmluaXRUaW1lb3V0ICE9PSAnbnVtYmVyJyB8fCBlbnYud2FzbS5pbml0VGltZW91dCA8IDApIHtcbiAgICBlbnYud2FzbS5pbml0VGltZW91dCA9IDA7XG4gIH1cblxuICBpZiAodHlwZW9mIGVudi53YXNtLnNpbWQgIT09ICdib29sZWFuJykge1xuICAgIGVudi53YXNtLnNpbWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbnYud2FzbS5wcm94eSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgZW52Lndhc20ucHJveHkgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW52Lndhc20udHJhY2UgIT09ICdib29sZWFuJykge1xuICAgIGVudi53YXNtLnRyYWNlID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGVudi53YXNtLm51bVRocmVhZHMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGVudi53YXNtLm51bVRocmVhZHMpIHx8IGVudi53YXNtLm51bVRocmVhZHMgPD0gMCkge1xuICAgIC8vIFdlYjogd2hlbiBjcm9zc09yaWdpbklzb2xhdGVkIGlzIGZhbHNlLCBTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYXZhaWxhYmxlIHNvIFdlYkFzc2VtYmx5IHRocmVhZHMgd2lsbCBub3Qgd29yay5cbiAgICAvLyBOb2RlLmpzOiBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuXG4gICAgaWYgKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgIXNlbGYuY3Jvc3NPcmlnaW5Jc29sYXRlZCkgfHxcbiAgICAgICAgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkpIHtcbiAgICAgIGVudi53YXNtLm51bVRocmVhZHMgPSAxO1xuICAgIH1cbiAgICBjb25zdCBudW1DcHVMb2dpY2FsQ29yZXMgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyA/IGNwdXMoKS5sZW5ndGggOiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICBlbnYud2FzbS5udW1UaHJlYWRzID0gTWF0aC5taW4oNCwgTWF0aC5jZWlsKChudW1DcHVMb2dpY2FsQ29yZXMgfHwgMSkgLyAyKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBPbm54cnVudGltZVdlYkFzc2VtYmx5QmFja2VuZCBpbXBsZW1lbnRzIEJhY2tlbmQge1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgV2ViQXNzZW1ibHkgYmFja2VuZC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggYmFja2VuZCBuYW1lLiBJdCB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QgdGltZSB3aGVuXG4gICAqIGBvcnQuSW5mZXJlbmNlU2Vzc2lvbi5jcmVhdGUoKWAgaXMgY2FsbGVkIHdpdGggYSByZWdpc3RlcmVkIGJhY2tlbmQgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIGJhY2tlbmROYW1lIC0gdGhlIHJlZ2lzdGVyZWQgYmFja2VuZCBuYW1lLlxuICAgKi9cbiAgYXN5bmMgaW5pdChiYWNrZW5kTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcG9wdWxhdGUgd2FzbSBmbGFnc1xuICAgIGluaXRpYWxpemVGbGFncygpO1xuXG4gICAgLy8gaW5pdCB3YXNtXG4gICAgYXdhaXQgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5QW5kT3J0UnVudGltZSgpO1xuXG4gICAgLy8gcGVyZm9ybWUgRVAgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25cbiAgICBhd2FpdCBpbml0aWFsaXplT3J0RXAoYmFja2VuZE5hbWUpO1xuICB9XG4gIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcj47XG4gIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKGJ1ZmZlcjogVWludDhBcnJheSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcj47XG4gIGFzeW5jIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKHBhdGhPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXI+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IE9ubnhydW50aW1lV2ViQXNzZW1ibHlTZXNzaW9uSGFuZGxlcigpO1xuICAgIGF3YWl0IGhhbmRsZXIubG9hZE1vZGVsKHBhdGhPckJ1ZmZlciwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYW5kbGVyKTtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb24sIFRlbnNvcn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlciwgVGVuc29yTWV0YWRhdGF9IGZyb20gJy4vcHJveHktbWVzc2FnZXMnO1xuaW1wb3J0IHtzZXRSdW5PcHRpb25zfSBmcm9tICcuL3J1bi1vcHRpb25zJztcbmltcG9ydCB7c2V0U2Vzc2lvbk9wdGlvbnN9IGZyb20gJy4vc2Vzc2lvbi1vcHRpb25zJztcbmltcG9ydCB7ZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtLCB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZywgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0sIHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcn0gZnJvbSAnLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge3ByZXBhcmVJbnB1dE91dHB1dFRlbnNvcn0gZnJvbSAnLi93YXNtLWNvcmUtaW1wbCc7XG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5pbXBvcnQge2NoZWNrTGFzdEVycm9yfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuXG5jb25zdCBOT19UUkFJTl9GVU5DU19NU0cgPVxuICAgICdCdWlsdCB3aXRob3V0IHRyYWluaW5nIEFQSVxcJ3MgZW5hYmxlZC4gVXNlIHRoZSBvbm54cnVudGltZS13ZWIvdHJhaW5pbmcgaW1wb3J0IGZvciB0cmFpbmluZyAnICtcbiAgICAnZnVuY3Rpb25hbGl0eSwgYW5kIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgY29ycmVjdCBhcnRpZmFjdHMgYXJlIGJ1aWx0ICYgbW92ZWQgdG8gdGhlIGNvcnJlY3QgZm9sZGVyIGlmICcgK1xuICAgICd1c2luZyBhIGN1c3RvbSBidWlsZC4gQ2hlY2sgaHR0cHM6Ly9vbm54cnVudGltZS5haS9kb2NzL2J1aWxkL3dlYi5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLic7XG5cbi8qKlxuICogUnVucyB0aGUgY2hlY2tMYXN0RXJyb3IgZnVuY3Rpb24gd2hpY2ggd2lsbCB0aHJvdyBhbiBlcnJvciwgaWYgdGhlIHByb3ZpZGVkIGVycm9yIGNvZGUgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkXG4gKiBwYXR0ZXJuIGZvciBhbiBlcnJvciBjb2RlLlxuICogQHBhcmFtIGVyckNvZGUgbnVtYmVyIHRvIGV2YWx1YXRlZCBmb3IgaWYgaXQncyBhbiBlcnJvclxuICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0byBwYXNzIGludG8gY2hlY2tMYXN0RXJyb3JcbiAqIEBwYXJhbSBjaGVja05lcVplcm8gd2hlbiB0cnVlLCB0cmVhdHMgbm90IGVxdWFsIHRvIHplcm8gYXMgYW4gZXJyb3IuXG4gKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gZmFsc2UsIHRyZWF0cyBlcXVhbCB0byB6ZXJvIGFzIGFuIGVycm9yLlxuICovXG5jb25zdCBpZkVyckNvZGVDaGVja0xhc3RFcnJvciA9IChlcnJDb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgY2hlY2tOZXFaZXJvID0gdHJ1ZSkgPT4ge1xuICBpZiAoY2hlY2tOZXFaZXJvICYmIGVyckNvZGUgIT09IDApIHtcbiAgICBjaGVja0xhc3RFcnJvcihtZXNzYWdlKTtcbiAgfSBlbHNlIGlmICghY2hlY2tOZXFaZXJvICYmIGVyckNvZGUgPT09IDApIHtcbiAgICBjaGVja0xhc3RFcnJvcihtZXNzYWdlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNoZWNrcG9pbnRIYW5kbGUgPSAoY2hlY2twb2ludERhdGE6IFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3QgW2NoZWNrcG9pbnREYXRhT2Zmc2V0LCBjaGVja3BvaW50RGF0YUxlbmd0aF0gPSBjaGVja3BvaW50RGF0YTtcbiAgbGV0IGNoZWNrcG9pbnRIYW5kbGUgPSAwO1xuXG4gIHRyeSB7XG4gICAgaWYgKHdhc20uX09ydFRyYWluaW5nTG9hZENoZWNrcG9pbnQpIHtcbiAgICAgIGNoZWNrcG9pbnRIYW5kbGUgPSB3YXNtLl9PcnRUcmFpbmluZ0xvYWRDaGVja3BvaW50KGNoZWNrcG9pbnREYXRhT2Zmc2V0LCBjaGVja3BvaW50RGF0YUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihOT19UUkFJTl9GVU5DU19NU0cpO1xuICAgIH1cblxuICAgIGlmRXJyQ29kZUNoZWNrTGFzdEVycm9yKGNoZWNrcG9pbnRIYW5kbGUsICdFcnJvciBvY2N1cnJlZCB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBDaGVja3BvaW50U3RhdGUnLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNoZWNrcG9pbnRIYW5kbGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAod2FzbS5fT3J0VHJhaW5pbmdSZWxlYXNlQ2hlY2twb2ludCAmJiBjaGVja3BvaW50SGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRUcmFpbmluZ1JlbGVhc2VDaGVja3BvaW50KGNoZWNrcG9pbnRIYW5kbGUpO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGZyZWUgYnVmZmVyIGZyb20gd2FzbSBoZWFwXG4gICAgd2FzbS5fT3J0RnJlZShjaGVja3BvaW50RGF0YVswXSk7XG4gIH1cbn07XG5cbmNvbnN0IGdldE1vZGVsSW5wdXRPdXRwdXRDb3VudCA9ICh0cmFpbmluZ1Nlc3Npb25JZDogbnVtYmVyLCBpc0V2YWxNb2RlbDogYm9vbGVhbik6IFtudW1iZXIsIG51bWJlcl0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoOCk7XG4gICAgaWYgKHdhc20uX09ydFRyYWluaW5nR2V0TW9kZWxJbnB1dE91dHB1dENvdW50KSB7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPVxuICAgICAgICAgIHdhc20uX09ydFRyYWluaW5nR2V0TW9kZWxJbnB1dE91dHB1dENvdW50KHRyYWluaW5nU2Vzc2lvbklkLCBkYXRhT2Zmc2V0LCBkYXRhT2Zmc2V0ICsgNCwgaXNFdmFsTW9kZWwpO1xuICAgICAgaWZFcnJDb2RlQ2hlY2tMYXN0RXJyb3IoZXJyb3JDb2RlLCAnQ2FuXFwndCBnZXQgc2Vzc2lvbiBpbnB1dC9vdXRwdXQgY291bnQuJyk7XG4gICAgICByZXR1cm4gW3dhc20uSEVBUDMyW2RhdGFPZmZzZXQgLyA0XSwgd2FzbS5IRUFQMzJbZGF0YU9mZnNldCAvIDQgKyAxXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihOT19UUkFJTl9GVU5DU19NU0cpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gIH1cbn07XG5cbmNvbnN0IGdldE1vZGVsSW5wdXRPdXRwdXROYW1lc0xvb3AgPVxuICAgICh0cmFpbmluZ1Nlc3Npb25JZDogbnVtYmVyLCBjb3VudDogbnVtYmVyLCBpc0lucHV0OiBib29sZWFuLCBpc0V2YWxNb2RlbDogYm9vbGVhbik6IHN0cmluZ1tdID0+IHtcbiAgICAgIGNvbnN0IG5hbWVzID0gW107XG4gICAgICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGlmICh3YXNtLl9PcnRUcmFpbmluZ0dldE1vZGVsSW5wdXRPdXRwdXROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHdhc20uX09ydFRyYWluaW5nR2V0TW9kZWxJbnB1dE91dHB1dE5hbWUodHJhaW5pbmdTZXNzaW9uSWQsIGksIGlzSW5wdXQsIGlzRXZhbE1vZGVsKTtcbiAgICAgICAgICBpZkVyckNvZGVDaGVja0xhc3RFcnJvcihuYW1lLCBgQ2FuJ3QgZ2V0IGlucHV0IG9yIG91dHB1dCBuYW1lIC0tIGlzIGlucHV0OiAke2lzSW5wdXR9LCBpbmRleCAke2l9YCwgZmFsc2UpO1xuXG4gICAgICAgICAgbmFtZXMucHVzaCh3YXNtLlVURjhUb1N0cmluZyhuYW1lKSk7XG4gICAgICAgICAgd2FzbS5fZnJlZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTk9fVFJBSU5fRlVOQ1NfTVNHKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBnZXRNb2RlbElucHV0T3V0cHV0TmFtZXMgPSAodHJhaW5pbmdTZXNzaW9uSWQ6IG51bWJlciwgaXNFdmFsTW9kZWw6IGJvb2xlYW4pOiBbc3RyaW5nW10sIHN0cmluZ1tdXSA9PiB7XG4gIGxldCBpbnB1dE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgb3V0cHV0TmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgW2lucHV0Q291bnQsIG91dHB1dENvdW50XSA9IGdldE1vZGVsSW5wdXRPdXRwdXRDb3VudCh0cmFpbmluZ1Nlc3Npb25JZCwgaXNFdmFsTW9kZWwpO1xuXG4gIGlucHV0TmFtZXMgPSBnZXRNb2RlbElucHV0T3V0cHV0TmFtZXNMb29wKHRyYWluaW5nU2Vzc2lvbklkLCBpbnB1dENvdW50LCB0cnVlLCBpc0V2YWxNb2RlbCk7XG4gIG91dHB1dE5hbWVzID0gZ2V0TW9kZWxJbnB1dE91dHB1dE5hbWVzTG9vcCh0cmFpbmluZ1Nlc3Npb25JZCwgb3V0cHV0Q291bnQsIGZhbHNlLCBpc0V2YWxNb2RlbCk7XG5cbiAgcmV0dXJuIFtpbnB1dE5hbWVzLCBvdXRwdXROYW1lc107XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVHJhaW5pbmdTZXNzaW9uSGFuZGxlID1cbiAgICAoY2hlY2twb2ludEhhbmRsZTogbnVtYmVyLCB0cmFpbk1vZGVsRGF0YTogU2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXIsIGV2YWxNb2RlbERhdGE6IFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLFxuICAgICBvcHRpbWl6ZXJNb2RlbERhdGE6IFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLCBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogbnVtYmVyID0+IHtcbiAgICAgIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gICAgICBsZXQgdHJhaW5pbmdTZXNzaW9uSGFuZGxlID0gMDtcbiAgICAgIGxldCBzZXNzaW9uT3B0aW9uc0hhbmRsZSA9IDA7XG4gICAgICBsZXQgYWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBbc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGFsbG9jc10gPSBzZXRTZXNzaW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKHdhc20uX09ydFRyYWluaW5nQ3JlYXRlU2Vzc2lvbikge1xuICAgICAgICAgIHRyYWluaW5nU2Vzc2lvbkhhbmRsZSA9IHdhc20uX09ydFRyYWluaW5nQ3JlYXRlU2Vzc2lvbihcbiAgICAgICAgICAgICAgc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGNoZWNrcG9pbnRIYW5kbGUsIHRyYWluTW9kZWxEYXRhWzBdLCB0cmFpbk1vZGVsRGF0YVsxXSwgZXZhbE1vZGVsRGF0YVswXSxcbiAgICAgICAgICAgICAgZXZhbE1vZGVsRGF0YVsxXSwgb3B0aW1pemVyTW9kZWxEYXRhWzBdLCBvcHRpbWl6ZXJNb2RlbERhdGFbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihOT19UUkFJTl9GVU5DU19NU0cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWZFcnJDb2RlQ2hlY2tMYXN0RXJyb3IodHJhaW5pbmdTZXNzaW9uSGFuZGxlLCAnRXJyb3Igb2NjdXJyZWQgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgVHJhaW5pbmdTZXNzaW9uJywgZmFsc2UpO1xuICAgICAgICByZXR1cm4gdHJhaW5pbmdTZXNzaW9uSGFuZGxlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAod2FzbS5fT3J0VHJhaW5pbmdSZWxlYXNlU2Vzc2lvbiAmJiB0cmFpbmluZ1Nlc3Npb25IYW5kbGUgIT09IDApIHtcbiAgICAgICAgICB3YXNtLl9PcnRUcmFpbmluZ1JlbGVhc2VTZXNzaW9uKHRyYWluaW5nU2Vzc2lvbkhhbmRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHdhc20uX2ZyZWUodHJhaW5Nb2RlbERhdGFbMF0pO1xuICAgICAgICB3YXNtLl9mcmVlKGV2YWxNb2RlbERhdGFbMF0pO1xuICAgICAgICB3YXNtLl9mcmVlKG9wdGltaXplck1vZGVsRGF0YVswXSk7XG5cbiAgICAgICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICAgICAgd2FzbS5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zKHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICAgICAgfVxuICAgICAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgICB9XG4gICAgfTtcblxuLyoqXG4gKiBQcmVwYXJlcyBpbnB1dCBhbmQgb3V0cHV0IHRlbnNvcnMgYnkgY3JlYXRpbmcgdGhlIHRlbnNvcnMgaW4gdGhlIFdBU00gc2lkZSB0aGVuIGNyZWF0ZXMgYSBsaXN0IG9mIHRoZSBoYW5kbGVzIG9mIHRoZVxuICogV0FTTSB0ZW5zb3JzLlxuICpcbiAqIEBwYXJhbSB0cmFpbmluZ1Nlc3Npb25JZFxuICogQHBhcmFtIGluZGljZXMgZm9yIGVhY2ggdGVuc29yLCB0aGUgaW5kZXggb2YgdGhlIGlucHV0IG9yIG91dHB1dCBuYW1lIHRoYXQgdGhlIHRlbnNvciBjb3JyZXNwb25kcyB3aXRoXG4gKiBAcGFyYW0gdGVuc29ycyBsaXN0IG9mIFRlbnNvck1ldGFEYXRhXG4gKiBAcGFyYW0gdGVuc29ySGFuZGxlcyBzaG91bGQgcGFzcyBpbiBhbiBlbXB0eSBsaXN0IG9mIG51bWJlcnM7IG1vZGlmaWVkIGluLXBsYWNlIGJ5IHRoaXMgbWV0aG9kICYgc3RvcmVzIHRoZSByZXN1bHRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgb2YgdGhlIGFsbG9jYXRlZCB0ZW5zb3JzIG9uIHRoZSBoZWFwXG4gKiBAcGFyYW0gaW5wdXRPdXRwdXRBbGxvY3MgbW9kaWZpZWQgaW4tcGxhY2UgYnkgdGhpcyBtZXRob2RcbiAqIEBwYXJhbSBpbmRleEFkZCBjb25zdGFudCB0byBhZGQgdG8gdGhlIGluZGV4IHRoYXQgaXMgcGFzc2VkIHRvIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvclxuICovXG5jb25zdCBjcmVhdGVBbmRBbGxvY2F0ZVRlbnNvcnMgPVxuICAgICh0cmFpbmluZ1Nlc3Npb25JZDogbnVtYmVyLCBpbmRpY2VzOiBudW1iZXJbXSwgdGVuc29yczogQXJyYXk8VGVuc29yTWV0YWRhdGF8bnVsbD4sIHRlbnNvckhhbmRsZXM6IG51bWJlcltdLFxuICAgICBpbnB1dE91dHB1dEFsbG9jczogbnVtYmVyW10sIGluZGV4QWRkOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XG5cbiAgICAgIC8vIGNyZWF0ZXMgdGhlIHRlbnNvcnNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgICB0ZW5zb3JzW2ldLCB0ZW5zb3JIYW5kbGVzLCBpbnB1dE91dHB1dEFsbG9jcywgdHJhaW5pbmdTZXNzaW9uSWQsIGluZGV4QWRkICsgaW5kaWNlc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIG1vdmVzIHRvIGhlYXBcbiAgICAgIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICAgICAgY29uc3QgdmFsdWVzT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKGNvdW50ICogNCk7XG4gICAgICBsZXQgdmFsdWVzSW5kZXggPSB2YWx1ZXNPZmZzZXQgLyA0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIHdhc20uSEVBUFUzMlt2YWx1ZXNJbmRleCsrXSA9IHRlbnNvckhhbmRsZXNbaV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZXNPZmZzZXQ7XG4gICAgfTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG91dHB1dCB0ZW5zb3IgaGFuZGxlcywgY29waWVzIHRvIGFuIGFycmF5LCBhbmQgZnJlZXMgdGhlIFdBU00gaW5mb3JtYXRpb25cbiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGVuc29yIGhhbmRsZS5cbiAqXG4gKiBAcGFyYW0gb3V0cHV0VmFsdWVzT2Zmc2V0XG4gKiBAcGFyYW0gb3V0cHV0Q291bnRcbiAqIEByZXR1cm5zIGxpc3Qgb2YgVGVuc29yTWV0YWRhdGEgcmV0cmlldmVkIGZyb20gdGhlIG91dHB1dCBoYW5kbGVzLlxuICovXG5jb25zdCBtb3ZlT3V0cHV0VG9UZW5zb3JNZXRhZGF0YUFyciA9XG4gICAgKG91dHB1dFZhbHVlc09mZnNldDogbnVtYmVyLCBvdXRwdXRDb3VudDogbnVtYmVyLCBvdXRwdXRUZW5zb3JIYW5kbGVzOiBudW1iZXJbXSxcbiAgICAgb3V0cHV0VGVuc29yczogQXJyYXk8VGVuc29yTWV0YWRhdGF8bnVsbD4pID0+IHtcbiAgICAgIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICAgICAgY29uc3Qgb3V0cHV0OiBUZW5zb3JNZXRhZGF0YVtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB0ZW5zb3IgPSB3YXNtLkhFQVBVMzJbb3V0cHV0VmFsdWVzT2Zmc2V0IC8gNCArIGldO1xuICAgICAgICBpZiAodGVuc29yID09PSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldKSB7XG4gICAgICAgICAgLy8gb3V0cHV0IHRlbnNvciBpcyBwcmUtYWxsb2NhdGVkLiBubyBuZWVkIHRvIGNvcHkgZGF0YS5cbiAgICAgICAgICBvdXRwdXQucHVzaChvdXRwdXRUZW5zb3JzW2ldISk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiZWZvcmVHZXRUZW5zb3JEYXRhU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICAgICAgICAvLyBzdGFjayBhbGxvY2F0ZSA0IHBvaW50ZXIgdmFsdWVcbiAgICAgICAgY29uc3QgdGVuc29yRGF0YU9mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0ICogNCk7XG5cbiAgICAgICAgbGV0IHR5cGU6IFRlbnNvci5UeXBlfHVuZGVmaW5lZCwgZGF0YU9mZnNldCA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0R2V0VGVuc29yRGF0YShcbiAgICAgICAgICAgICAgdGVuc29yLCB0ZW5zb3JEYXRhT2Zmc2V0LCB0ZW5zb3JEYXRhT2Zmc2V0ICsgNCwgdGVuc29yRGF0YU9mZnNldCArIDgsIHRlbnNvckRhdGFPZmZzZXQgKyAxMik7XG4gICAgICAgICAgaWZFcnJDb2RlQ2hlY2tMYXN0RXJyb3IoZXJyb3JDb2RlLCBgQ2FuJ3QgYWNjZXNzIG91dHB1dCB0ZW5zb3IgZGF0YSBvbiBpbmRleCAke2l9LmApO1xuXG4gICAgICAgICAgbGV0IHRlbnNvckRhdGFJbmRleCA9IHRlbnNvckRhdGFPZmZzZXQgLyA0O1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgICBkYXRhT2Zmc2V0ID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBkaW1zTGVuZ3RoID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBkaW1zID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRpbXMucHVzaCh3YXNtLkhFQVBVMzJbZGltc09mZnNldCAvIDQgKyBpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhc20uX09ydEZyZWUoZGltc09mZnNldCk7XG5cbiAgICAgICAgICBjb25zdCBzaXplID0gZGltcy5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKTtcbiAgICAgICAgICB0eXBlID0gdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcoZGF0YVR5cGUpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdEYXRhOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IGRhdGFJbmRleCA9IGRhdGFPZmZzZXQgLyA0O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2FzbS5IRUFQVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgICAgICAgICAgY29uc3QgbWF4Qnl0ZXNUb1JlYWQgPSBpID09PSBzaXplIC0gMSA/IHVuZGVmaW5lZCA6IHdhc20uSEVBUFUzMltkYXRhSW5kZXhdIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICBzdHJpbmdEYXRhLnB1c2god2FzbS5VVEY4VG9TdHJpbmcob2Zmc2V0LCBtYXhCeXRlc1RvUmVhZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0LnB1c2goW3R5cGUsIGRpbXMsIHN0cmluZ0RhdGEsICdjcHUnXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdHlwZWRBcnJheUNvbnN0cnVjdG9yKHNpemUpO1xuICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgICAgIC5zZXQod2FzbS5IRUFQVTguc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIGRhdGEuYnl0ZUxlbmd0aCkpO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goW3R5cGUsIGRpbXMsIGRhdGEsICdjcHUnXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHdhc20uc3RhY2tSZXN0b3JlKGJlZm9yZUdldFRlbnNvckRhdGFTdGFjayk7XG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIGRhdGFPZmZzZXQpIHtcbiAgICAgICAgICAgIHdhc20uX2ZyZWUoZGF0YU9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhc20uX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBsYXp5UmVzZXRHcmFkID0gYXN5bmModHJhaW5pbmdTZXNzaW9uSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICBpZiAod2FzbS5fT3J0VHJhaW5pbmdMYXp5UmVzZXRHcmFkKSB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0VHJhaW5pbmdMYXp5UmVzZXRHcmFkKHRyYWluaW5nU2Vzc2lvbklkKTtcbiAgICBpZkVyckNvZGVDaGVja0xhc3RFcnJvcihlcnJvckNvZGUsICdDYW5cXCd0IGNhbGwgbGF6eVJlc2V0R3JhZC4nKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoTk9fVFJBSU5fRlVOQ1NfTVNHKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJ1blRyYWluU3RlcCA9IGFzeW5jKFxuICAgIHRyYWluaW5nU2Vzc2lvbklkOiBudW1iZXIsIGlucHV0SW5kaWNlczogbnVtYmVyW10sIGlucHV0VGVuc29yczogVGVuc29yTWV0YWRhdGFbXSwgb3V0cHV0SW5kaWNlczogbnVtYmVyW10sXG4gICAgb3V0cHV0VGVuc29yczogQXJyYXk8VGVuc29yTWV0YWRhdGF8bnVsbD4sIG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8VGVuc29yTWV0YWRhdGFbXT4gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICBjb25zdCBpbnB1dENvdW50ID0gaW5wdXRJbmRpY2VzLmxlbmd0aDtcbiAgY29uc3Qgb3V0cHV0Q291bnQgPSBvdXRwdXRJbmRpY2VzLmxlbmd0aDtcblxuICBsZXQgcnVuT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGxldCBydW5PcHRpb25zQWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGlucHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5wdXRPdXRwdXRBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgYmVmb3JlUnVuU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuXG4gIHRyeSB7XG4gICAgLy8gcHJlcGFyZSBwYXJhbWV0ZXJzIGJ5IG1vdmluZyB0aGVtIHRvIGhlYXBcbiAgICBbcnVuT3B0aW9uc0hhbmRsZSwgcnVuT3B0aW9uc0FsbG9jc10gPSBzZXRSdW5PcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gaGFuZGxlIGlucHV0cyAtLSB5b3UgZG9uJ3Qgd2FudCBhbnl0aGluZyBhZGRlZCB0byB0aGUgaW5kZXhcbiAgICBjb25zdCBpbnB1dFZhbHVlc09mZnNldCA9IGNyZWF0ZUFuZEFsbG9jYXRlVGVuc29ycyhcbiAgICAgICAgdHJhaW5pbmdTZXNzaW9uSWQsIGlucHV0SW5kaWNlcywgaW5wdXRUZW5zb3JzLCBpbnB1dFRlbnNvckhhbmRsZXMsIGlucHV0T3V0cHV0QWxsb2NzLCAwKTtcbiAgICAvLyBoYW5kbGUgb3V0cHV0c1xuICAgIC8vIHlvdSB3YW50IGlucHV0Q291bnQgdG8gYmUgYWRkZWQgdG8gdGhlIGluZGV4IG9mIGV2ZXJ5IG91dHB1dCB0ZW5zb3IgcGFzc2VkIHRvIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvclxuICAgIGNvbnN0IG91dHB1dFZhbHVlc09mZnNldCA9IGNyZWF0ZUFuZEFsbG9jYXRlVGVuc29ycyhcbiAgICAgICAgdHJhaW5pbmdTZXNzaW9uSWQsIG91dHB1dEluZGljZXMsIG91dHB1dFRlbnNvcnMsIG91dHB1dFRlbnNvckhhbmRsZXMsIGlucHV0T3V0cHV0QWxsb2NzLCBpbnB1dENvdW50KTtcblxuICAgIGlmICh3YXNtLl9PcnRUcmFpbmluZ1J1blRyYWluU3RlcCkge1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0VHJhaW5pbmdSdW5UcmFpblN0ZXAoXG4gICAgICAgICAgdHJhaW5pbmdTZXNzaW9uSWQsIGlucHV0VmFsdWVzT2Zmc2V0LCBpbnB1dENvdW50LCBvdXRwdXRWYWx1ZXNPZmZzZXQsIG91dHB1dENvdW50LCBydW5PcHRpb25zSGFuZGxlKTtcbiAgICAgIGlmRXJyQ29kZUNoZWNrTGFzdEVycm9yKGVycm9yQ29kZSwgJ2ZhaWxlZCB0byBjYWxsIE9ydFRyYWluaW5nUnVuVHJhaW5TdGVwIGluIHRoZSBXZWJBc3NlbWJseSBsYXllcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoTk9fVFJBSU5fRlVOQ1NfTVNHKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW92ZU91dHB1dFRvVGVuc29yTWV0YWRhdGFBcnIob3V0cHV0VmFsdWVzT2Zmc2V0LCBvdXRwdXRDb3VudCwgb3V0cHV0VGVuc29ySGFuZGxlcywgb3V0cHV0VGVuc29ycyk7XG4gIH0gZmluYWxseSB7XG4gICAgd2FzbS5zdGFja1Jlc3RvcmUoYmVmb3JlUnVuU3RhY2spO1xuXG4gICAgaW5wdXRUZW5zb3JIYW5kbGVzLmZvckVhY2godiA9PiB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHYpKTtcbiAgICBvdXRwdXRUZW5zb3JIYW5kbGVzLmZvckVhY2godiA9PiB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHYpKTtcbiAgICBpbnB1dE91dHB1dEFsbG9jcy5mb3JFYWNoKHAgPT4gd2FzbS5fZnJlZShwKSk7XG5cbiAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMocnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfVxuICAgIHJ1bk9wdGlvbnNBbGxvY3MuZm9yRWFjaChwID0+IHdhc20uX2ZyZWUocCkpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcnVuT3B0aW1pemVyU3RlcCA9XG4gICAgYXN5bmModHJhaW5pbmdTZXNzaW9uSWQ6IG51bWJlciwgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gIGxldCBydW5PcHRpb25zSGFuZGxlID0gMDtcbiAgbGV0IHJ1bk9wdGlvbnNBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgdHJ5IHtcbiAgICBbcnVuT3B0aW9uc0hhbmRsZSwgcnVuT3B0aW9uc0FsbG9jc10gPSBzZXRSdW5PcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKHdhc20uX09ydFRyYWluaW5nT3B0aW1pemVyU3RlcCkge1xuICAgICAgY29uc3QgZXJyQ29kZSA9IHdhc20uX09ydFRyYWluaW5nT3B0aW1pemVyU3RlcCh0cmFpbmluZ1Nlc3Npb25JZCwgcnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgICBpZkVyckNvZGVDaGVja0xhc3RFcnJvcihlcnJDb2RlLCAnRmFpbGVkIHRvIGNhbGwgT3J0VHJhaW5pbmdPcHRpbWl6ZXJTdGVwIGluIHRoZSBXZWJBc3NlbWJseSBsYXllcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoTk9fVFJBSU5fRlVOQ1NfTVNHKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBydW5PcHRpb25zQWxsb2NzLmZvckVhY2gocCA9PiB3YXNtLl9mcmVlKHApKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJ1bkV2YWxTdGVwID0gYXN5bmMoXG4gICAgdHJhaW5pbmdTZXNzaW9uSWQ6IG51bWJlciwgaW5wdXRJbmRpY2VzOiBudW1iZXJbXSwgaW5wdXRUZW5zb3JzOiBUZW5zb3JNZXRhZGF0YVtdLCBvdXRwdXRJbmRpY2VzOiBudW1iZXJbXSxcbiAgICBvdXRwdXRUZW5zb3JzOiBBcnJheTxUZW5zb3JNZXRhZGF0YXxudWxsPiwgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxUZW5zb3JNZXRhZGF0YVtdPiA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gIGNvbnN0IGlucHV0Q291bnQgPSBpbnB1dEluZGljZXMubGVuZ3RoO1xuICBjb25zdCBvdXRwdXRDb3VudCA9IG91dHB1dEluZGljZXMubGVuZ3RoO1xuXG4gIGxldCBydW5PcHRpb25zSGFuZGxlID0gMDtcbiAgbGV0IHJ1bk9wdGlvbnNBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgaW5wdXRUZW5zb3JIYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBvdXRwdXRUZW5zb3JIYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBpbnB1dE91dHB1dEFsbG9jczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBiZWZvcmVSdW5TdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG5cbiAgdHJ5IHtcbiAgICAvLyBwcmVwYXJlIHBhcmFtZXRlcnMgYnkgbW92aW5nIHRoZW0gdG8gaGVhcFxuICAgIFtydW5PcHRpb25zSGFuZGxlLCBydW5PcHRpb25zQWxsb2NzXSA9IHNldFJ1bk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBoYW5kbGUgaW5wdXRzIC0tIHlvdSBkb24ndCB3YW50IGFueXRoaW5nIGFkZGVkIHRvIHRoZSBpbmRleFxuICAgIGNvbnN0IGlucHV0VmFsdWVzT2Zmc2V0ID0gY3JlYXRlQW5kQWxsb2NhdGVUZW5zb3JzKFxuICAgICAgICB0cmFpbmluZ1Nlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dFRlbnNvcnMsIGlucHV0VGVuc29ySGFuZGxlcywgaW5wdXRPdXRwdXRBbGxvY3MsIDApO1xuICAgIC8vIGhhbmRsZSBvdXRwdXRzXG4gICAgLy8geW91IHdhbnQgaW5wdXRDb3VudCB0byBiZSBhZGRlZCB0byB0aGUgaW5kZXggb2YgZXZlcnkgb3V0cHV0IHRlbnNvciBwYXNzZWQgdG8gcHJlcGFyZUlucHV0T3V0cHV0VGVuc29yXG4gICAgY29uc3Qgb3V0cHV0VmFsdWVzT2Zmc2V0ID0gY3JlYXRlQW5kQWxsb2NhdGVUZW5zb3JzKFxuICAgICAgICB0cmFpbmluZ1Nlc3Npb25JZCwgb3V0cHV0SW5kaWNlcywgb3V0cHV0VGVuc29ycywgb3V0cHV0VGVuc29ySGFuZGxlcywgaW5wdXRPdXRwdXRBbGxvY3MsIGlucHV0Q291bnQpO1xuXG4gICAgaWYgKHdhc20uX09ydFRyYWluaW5nRXZhbFN0ZXApIHtcbiAgICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydFRyYWluaW5nRXZhbFN0ZXAoXG4gICAgICAgICAgdHJhaW5pbmdTZXNzaW9uSWQsIGlucHV0VmFsdWVzT2Zmc2V0LCBpbnB1dENvdW50LCBvdXRwdXRWYWx1ZXNPZmZzZXQsIG91dHB1dENvdW50LCBydW5PcHRpb25zSGFuZGxlKTtcblxuICAgICAgaWZFcnJDb2RlQ2hlY2tMYXN0RXJyb3IoZXJyb3JDb2RlLCAnZmFpbGVkIHRvIGNhbGwgT3J0VHJhaW5pbmdFdmFsU3RlcCBpbiB0aGUgV2ViQXNzZW1ibHkgbGF5ZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKE5PX1RSQUlOX0ZVTkNTX01TRyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vdmVPdXRwdXRUb1RlbnNvck1ldGFkYXRhQXJyKG91dHB1dFZhbHVlc09mZnNldCwgb3V0cHV0Q291bnQsIG91dHB1dFRlbnNvckhhbmRsZXMsIG91dHB1dFRlbnNvcnMpO1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKGJlZm9yZVJ1blN0YWNrKTtcblxuICAgIGlucHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKHYgPT4gd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgb3V0cHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKHYgPT4gd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgaW5wdXRPdXRwdXRBbGxvY3MuZm9yRWFjaChwID0+IHdhc20uX2ZyZWUocCkpO1xuXG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBydW5PcHRpb25zQWxsb2NzLmZvckVhY2gocCA9PiB3YXNtLl9mcmVlKHApKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhcmFtZXRlcnNTaXplID0gKHRyYWluaW5nU2Vzc2lvbklkOiBudW1iZXIsIHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBudW1iZXIgPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2l6ZU9mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0KTtcbiAgICBpZiAod2FzbS5fT3J0VHJhaW5pbmdHZXRQYXJhbWV0ZXJzU2l6ZSkge1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0VHJhaW5pbmdHZXRQYXJhbWV0ZXJzU2l6ZSh0cmFpbmluZ1Nlc3Npb25JZCwgc2l6ZU9mZnNldCwgdHJhaW5hYmxlT25seSk7XG4gICAgICBpZkVyckNvZGVDaGVja0xhc3RFcnJvcihlcnJvckNvZGUsICdDYW5cXCd0IGdldCBwYXJhbWV0ZXJzIHNpemUnKTtcblxuICAgICAgcmV0dXJuIHdhc20uSEVBUDMyW3NpemVPZmZzZXQgLyA0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKE5PX1RSQUlOX0ZVTkNTX01TRyk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRpZ3VvdXNQYXJhbWV0ZXJzID1cbiAgICBhc3luYyh0cmFpbmluZ1Nlc3Npb25JZDogbnVtYmVyLCB0cmFpbmFibGVPbmx5OiBib29sZWFuKTogUHJvbWlzZTxUZW5zb3JNZXRhZGF0YT4gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuXG4gIGNvbnN0IHRlbnNvclR5cGVBc1N0cmluZyA9ICdmbG9hdDMyJztcbiAgY29uc3QgbG9jYXRpb25Bc1N0cmluZyA9ICdjcHUnO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnNTaXplID0gZ2V0UGFyYW1ldGVyc1NpemUodHJhaW5pbmdTZXNzaW9uSWQsIHRyYWluYWJsZU9ubHkpO1xuICBsZXQgdGVuc29yID0gMDtcblxuICAvLyBhbGxvY2F0ZXMgYSBidWZmZXIgb2YgdGhlIGNvcnJlY3Qgc2l6ZSBvbiB0aGUgV0FTTSBoZWFwXG4gIGNvbnN0IHBhcmFtc0J5dGVMZW5ndGggPSA0ICogcGFyYW1ldGVyc1NpemU7XG4gIGNvbnN0IHBhcmFtc09mZnNldCA9IHdhc20uX21hbGxvYyhwYXJhbXNCeXRlTGVuZ3RoKTtcblxuICAvLyBoYW5kbGVzIHRoZSBkaW1lbnNpb25zLXJlbGF0ZWQgY3JlYXRlVGVuc29yIHBhcmFtZXRlcnNcbiAgY29uc3QgZGltcyA9IFtwYXJhbWV0ZXJzU2l6ZV07XG5cbiAgY29uc3QgZGltc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0KTtcbiAgY29uc3QgZGltc0luZGV4ID0gZGltc09mZnNldCAvIDQ7XG4gIHdhc20uSEVBUDMyW2RpbXNJbmRleF0gPSBwYXJhbWV0ZXJzU2l6ZTtcblxuICB0cnkge1xuICAgIC8vIHdyYXBzIGFsbG9jYXRlZCBhcnJheSBpbiBhIHRlbnNvclxuICAgIHRlbnNvciA9IHdhc20uX09ydENyZWF0ZVRlbnNvcihcbiAgICAgICAgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0odGVuc29yVHlwZUFzU3RyaW5nKSwgcGFyYW1zT2Zmc2V0LCBwYXJhbXNCeXRlTGVuZ3RoLCBkaW1zT2Zmc2V0LCBkaW1zLmxlbmd0aCxcbiAgICAgICAgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtKGxvY2F0aW9uQXNTdHJpbmcpKTtcbiAgICBpZkVyckNvZGVDaGVja0xhc3RFcnJvcihcbiAgICAgICAgdGVuc29yLCBgQ2FuJ3QgY3JlYXRlIHRlbnNvciBmb3IgZ2V0Q29udGlndW91c1BhcmFtZXRlcnMuIHNlc3Npb249JHt0cmFpbmluZ1Nlc3Npb25JZH0uYCwgZmFsc2UpO1xuXG4gICAgaWYgKHdhc20uX09ydFRyYWluaW5nQ29weVBhcmFtZXRlcnNUb0J1ZmZlcikge1xuICAgICAgY29uc3QgZXJyQ29kZSA9IHdhc20uX09ydFRyYWluaW5nQ29weVBhcmFtZXRlcnNUb0J1ZmZlcih0cmFpbmluZ1Nlc3Npb25JZCwgdGVuc29yLCBwYXJhbWV0ZXJzU2l6ZSwgdHJhaW5hYmxlT25seSk7XG4gICAgICBpZkVyckNvZGVDaGVja0xhc3RFcnJvcihlcnJDb2RlLCAnQ2FuXFwndCBnZXQgY29udGlndW91cyBwYXJhbWV0ZXJzLicpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihOT19UUkFJTl9GVU5DU19NU0cpO1xuICAgIH1cblxuICAgIC8vIGNvcGllcyBmcm9tIFdBU00gbWVtb3J5IHRvIGEgSmF2YVNjcmlwdCB0eXBlZCBhcnJheSwgd2hpY2ggaXMgdGhlbiBwdXQgaW50byBhIFRlbnNvck1ldGFkYXRhIG9iamVjdFxuICAgIGNvbnN0IHR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0ZW5zb3JUeXBlQXNTdHJpbmcpO1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgdHlwZWRBcnJheUNvbnN0cnVjdG9yKHBhcmFtZXRlcnNTaXplKTtcbiAgICBjb25zdCBvdXRwdXQ6IFRlbnNvck1ldGFkYXRhW10gPSBbXTtcbiAgICBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgIC5zZXQod2FzbS5IRUFQVTguc3ViYXJyYXkocGFyYW1zT2Zmc2V0LCBwYXJhbXNPZmZzZXQgKyBwYXJhbXNCeXRlTGVuZ3RoKSk7XG4gICAgb3V0cHV0LnB1c2goW3RlbnNvclR5cGVBc1N0cmluZywgZGltcywgZGF0YSwgbG9jYXRpb25Bc1N0cmluZ10pO1xuICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNvbWV0aGluZyB1bmV4cGVjdGVkIGhhcHBlbmVkIGluIHRoZSBnZXRDb250aWd1b3VzUGFyYW1ldGVycyBmdW5jdGlvbi4gRXhwZWN0ZWQgb3V0cHV0IGxlbmd0aCBvZlxuICAgICBvbmUsIGdvdCAke291dHB1dC5sZW5ndGh9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdXRwdXRbMF07XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGlmICh0ZW5zb3IgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICB9XG4gICAgd2FzbS5fZnJlZShwYXJhbXNPZmZzZXQpO1xuICAgIHdhc20uX2ZyZWUoZGltc09mZnNldCk7XG4gICAgd2FzbS5zdGFja1Jlc3RvcmUoc3RhY2spO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZFBhcmFtZXRlcnNCdWZmZXIgPVxuICAgIGFzeW5jKHRyYWluaW5nU2Vzc2lvbklkOiBudW1iZXIsIGJ1ZmZlcjogVWludDhBcnJheSwgdHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuXG4gIGNvbnN0IHRlbnNvclR5cGVBc1N0cmluZyA9ICdmbG9hdDMyJztcbiAgY29uc3QgbG9jYXRpb25Bc1N0cmluZyA9ICdjcHUnO1xuXG4gIC8vIGFsbG9jYXRlcyAmIGNvcGllcyBKYXZhU2NyaXB0IGJ1ZmZlciB0byBXQVNNIGhlYXBcbiAgY29uc3QgYnVmZmVyQnl0ZUxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gIGNvbnN0IGJ1ZmZlckNvdW50ID0gYnVmZmVyQnl0ZUxlbmd0aCAvIDQ7XG4gIGNvbnN0IGJ1ZmZlck9mZnNldCA9IHdhc20uX21hbGxvYyhidWZmZXJCeXRlTGVuZ3RoKTtcbiAgd2FzbS5IRUFQVTguc2V0KGJ1ZmZlciwgYnVmZmVyT2Zmc2V0KTtcblxuICAvLyBhbGxvY2F0ZXMgYW5kIGhhbmRsZXMgbW92aW5nIGRpbWVuc2lvbnMgaW5mb3JtYXRpb24gdG8gV0FTTSBtZW1vcnlcbiAgY29uc3QgZGltc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0KTtcbiAgd2FzbS5IRUFQMzJbZGltc09mZnNldCAvIDRdID0gYnVmZmVyQ291bnQ7XG4gIGNvbnN0IGRpbXNMZW5ndGggPSAxO1xuICBsZXQgdGVuc29yID0gMDtcblxuICB0cnkge1xuICAgIHRlbnNvciA9IHdhc20uX09ydENyZWF0ZVRlbnNvcihcbiAgICAgICAgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0odGVuc29yVHlwZUFzU3RyaW5nKSwgYnVmZmVyT2Zmc2V0LCBidWZmZXJCeXRlTGVuZ3RoLCBkaW1zT2Zmc2V0LCBkaW1zTGVuZ3RoLFxuICAgICAgICBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obG9jYXRpb25Bc1N0cmluZykpO1xuICAgIGlmRXJyQ29kZUNoZWNrTGFzdEVycm9yKHRlbnNvciwgYENhbid0IGNyZWF0ZSB0ZW5zb3IgZm9yIGlucHV0L291dHB1dC4gc2Vzc2lvbj0ke3RyYWluaW5nU2Vzc2lvbklkfWAsIGZhbHNlKTtcblxuICAgIGlmICh3YXNtLl9PcnRUcmFpbmluZ0NvcHlQYXJhbWV0ZXJzRnJvbUJ1ZmZlcikge1xuICAgICAgY29uc3QgZXJyQ29kZSA9IHdhc20uX09ydFRyYWluaW5nQ29weVBhcmFtZXRlcnNGcm9tQnVmZmVyKHRyYWluaW5nU2Vzc2lvbklkLCB0ZW5zb3IsIGJ1ZmZlckNvdW50LCB0cmFpbmFibGVPbmx5KTtcbiAgICAgIGlmRXJyQ29kZUNoZWNrTGFzdEVycm9yKGVyckNvZGUsICdDYW5cXCd0IGNvcHkgYnVmZmVyIHRvIHBhcmFtZXRlcnMuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihOT19UUkFJTl9GVU5DU19NU0cpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGVuc29yICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgfVxuICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICB3YXNtLl9mcmVlKGJ1ZmZlck9mZnNldCk7XG4gICAgd2FzbS5fZnJlZShkaW1zT2Zmc2V0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlbGVhc2VUcmFpbmluZ1Nlc3Npb25BbmRDaGVja3BvaW50ID0gKGNoZWNrcG9pbnRJZDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICBpZiAod2FzbS5fT3J0VHJhaW5pbmdSZWxlYXNlU2Vzc2lvbikge1xuICAgIHdhc20uX09ydFRyYWluaW5nUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkKTtcbiAgfVxuICBpZiAod2FzbS5fT3J0VHJhaW5pbmdSZWxlYXNlQ2hlY2twb2ludCkge1xuICAgIHdhc20uX09ydFRyYWluaW5nUmVsZWFzZUNoZWNrcG9pbnQoY2hlY2twb2ludElkKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uLCBPbm54VmFsdWUsIFNlc3Npb25IYW5kbGVyLCBUZW5zb3IsIFRyYWluaW5nU2Vzc2lvbkhhbmRsZXJ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7U2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXIsIFRlbnNvck1ldGFkYXRhfSBmcm9tICcuL3Byb3h5LW1lc3NhZ2VzJztcbmltcG9ydCB7ZGVjb2RlVGVuc29yTWV0YWRhdGEsIGVuY29kZVRlbnNvck1ldGFkYXRhfSBmcm9tICcuL3Nlc3Npb24taGFuZGxlci1pbmZlcmVuY2UnO1xuaW1wb3J0IHtjb3B5RnJvbUV4dGVybmFsQnVmZmVyfSBmcm9tICcuL3dhc20tY29yZS1pbXBsJztcbmltcG9ydCB7Y3JlYXRlQ2hlY2twb2ludEhhbmRsZSwgY3JlYXRlVHJhaW5pbmdTZXNzaW9uSGFuZGxlLCBnZXRDb250aWd1b3VzUGFyYW1ldGVycywgZ2V0TW9kZWxJbnB1dE91dHB1dE5hbWVzLCBnZXRQYXJhbWV0ZXJzU2l6ZSwgbGF6eVJlc2V0R3JhZCwgbG9hZFBhcmFtZXRlcnNCdWZmZXIsIHJlbGVhc2VUcmFpbmluZ1Nlc3Npb25BbmRDaGVja3BvaW50LCBydW5FdmFsU3RlcCwgcnVuT3B0aW1pemVyU3RlcCwgcnVuVHJhaW5TdGVwfSBmcm9tICcuL3dhc20tdHJhaW5pbmctY29yZS1pbXBsJztcblxuZXhwb3J0IGNsYXNzIE9ubnhydW50aW1lV2ViQXNzZW1ibHlUcmFpbmluZ1Nlc3Npb25IYW5kbGVyIGltcGxlbWVudHMgVHJhaW5pbmdTZXNzaW9uSGFuZGxlciB7XG4gIHByaXZhdGUgc2Vzc2lvbklkOiBudW1iZXI7XG4gIHByaXZhdGUgY2hlY2twb2ludElkOiBudW1iZXI7XG5cbiAgaW5wdXROYW1lczogc3RyaW5nW107XG4gIG91dHB1dE5hbWVzOiBzdHJpbmdbXTtcblxuICBldmFsSW5wdXROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgZXZhbE91dHB1dE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGFzeW5jIHVyaU9yQnVmZmVyVG9IZWFwKHVyaU9yQnVmZmVyOiBzdHJpbmd8VWludDhBcnJheSk6IFByb21pc2U8U2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXI+IHtcbiAgICBsZXQgYnVmZmVyOiBVaW50OEFycmF5O1xuICAgIGlmICh0eXBlb2YgdXJpT3JCdWZmZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVyaU9yQnVmZmVyKTtcbiAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyID0gdXJpT3JCdWZmZXI7XG4gICAgfVxuICAgIHJldHVybiBjb3B5RnJvbUV4dGVybmFsQnVmZmVyKGJ1ZmZlcik7XG4gIH1cblxuICBhc3luYyBjcmVhdGVUcmFpbmluZ1Nlc3Npb24oXG4gICAgICBjaGVja3BvaW50U3RhdGVVcmlPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksIHRyYWluTW9kZWxVcmlPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksXG4gICAgICBldmFsTW9kZWxVcmlPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksIG9wdGltaXplck1vZGVsVXJpT3JCdWZmZXI6IHN0cmluZ3xVaW50OEFycmF5LFxuICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucykge1xuICAgIGNvbnN0IGNoZWNrcG9pbnREYXRhOiBTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlciA9IGF3YWl0IHRoaXMudXJpT3JCdWZmZXJUb0hlYXAoY2hlY2twb2ludFN0YXRlVXJpT3JCdWZmZXIpO1xuICAgIGNvbnN0IHRyYWluTW9kZWxEYXRhOiBTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlciA9IGF3YWl0IHRoaXMudXJpT3JCdWZmZXJUb0hlYXAodHJhaW5Nb2RlbFVyaU9yQnVmZmVyKTtcbiAgICAvLyAwIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBudWxscHRyXG4gICAgbGV0IGV2YWxNb2RlbERhdGE6IFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyID0gWzAsIDBdO1xuICAgIGxldCBvcHRpbWl6ZXJNb2RlbERhdGE6IFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyID0gWzAsIDBdO1xuXG4gICAgaWYgKGV2YWxNb2RlbFVyaU9yQnVmZmVyICE9PSAnJykge1xuICAgICAgZXZhbE1vZGVsRGF0YSA9IGF3YWl0IHRoaXMudXJpT3JCdWZmZXJUb0hlYXAoZXZhbE1vZGVsVXJpT3JCdWZmZXIpO1xuICAgIH1cbiAgICBpZiAob3B0aW1pemVyTW9kZWxVcmlPckJ1ZmZlciAhPT0gJycpIHtcbiAgICAgIG9wdGltaXplck1vZGVsRGF0YSA9IGF3YWl0IHRoaXMudXJpT3JCdWZmZXJUb0hlYXAob3B0aW1pemVyTW9kZWxVcmlPckJ1ZmZlcik7XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja3BvaW50SWQgPSBjcmVhdGVDaGVja3BvaW50SGFuZGxlKGNoZWNrcG9pbnREYXRhKTtcbiAgICB0aGlzLnNlc3Npb25JZCA9XG4gICAgICAgIGNyZWF0ZVRyYWluaW5nU2Vzc2lvbkhhbmRsZSh0aGlzLmNoZWNrcG9pbnRJZCwgdHJhaW5Nb2RlbERhdGEsIGV2YWxNb2RlbERhdGEsIG9wdGltaXplck1vZGVsRGF0YSwgb3B0aW9ucyk7XG4gICAgW3RoaXMuaW5wdXROYW1lcywgdGhpcy5vdXRwdXROYW1lc10gPSBnZXRNb2RlbElucHV0T3V0cHV0TmFtZXModGhpcy5zZXNzaW9uSWQsIGZhbHNlKTtcbiAgICBpZiAoZXZhbE1vZGVsVXJpT3JCdWZmZXIgIT09ICcnKSB7XG4gICAgICBbdGhpcy5ldmFsSW5wdXROYW1lcywgdGhpcy5ldmFsT3V0cHV0TmFtZXNdID0gZ2V0TW9kZWxJbnB1dE91dHB1dE5hbWVzKHRoaXMuc2Vzc2lvbklkLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0aGF0IGNvbnZlcnRzIGEgZmVlZHMgb3IgZmV0Y2hlcyBkYXRhdHlwZSB0byB0d28gYXJyYXlzLCBvbmUgb2YgdmFsdWVzIGFuZCBvbmUgdGhhdCBzdG9yZXMgdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgbmFtZSBhcyBhIG51bWJlciByZWZlcnJpbmcgdG8gdGhlIGluZGV4IGluIHRoZSBsaXN0IG9mIG5hbWVzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgbWVhbnQgdG8gbWF0Y2ggZWl0aGVyIFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSBvciBTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZVxuICAgKiBAcGFyYW0gbmFtZXMgZWl0aGVyIGlucHV0TmFtZXMgb3Igb3V0cHV0TmFtZXNcbiAgICogQHJldHVybnMgYSB0dXBsZSBvZiBhIGxpc3Qgb2YgdmFsdWVzIGFuZCBhIGxpc3Qgb2YgaW5kaWNlcy5cbiAgICovXG4gIGNvbnZlcnRNYXBJbnRvVmFsdWVzQXJyYXlBbmRJbmRpY2VzQXJyYXk8VCwgVT4oXG4gICAgICBmZWVkczoge1tuYW1lOiBzdHJpbmddOiBUfSwgbmFtZXM6IHN0cmluZ1tdLCBtYXBGdW5jOiAodmFsOiBULCBpbmRleDogbnVtYmVyKSA9PiBVKTogW1RbXSwgbnVtYmVyW10sIFVbXV0ge1xuICAgIGNvbnN0IHZhbHVlczogVFtdID0gW107XG4gICAgY29uc3QgaW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgICBPYmplY3QuZW50cmllcyhmZWVkcykuZm9yRWFjaChrdnAgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGt2cFswXTtcbiAgICAgIGNvbnN0IHRlbnNvciA9IGt2cFsxXTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGlucHV0ICcke25hbWV9YCk7XG4gICAgICB9XG4gICAgICB2YWx1ZXMucHVzaCh0ZW5zb3IpO1xuICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVMaXN0ID0gdmFsdWVzLm1hcChtYXBGdW5jKTtcbiAgICByZXR1cm4gW3ZhbHVlcywgaW5kaWNlcywgdUxpc3RdO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdGhhdCBjb252ZXJ0cyB0aGUgVGVuc29yTWV0YWRhdGEgdGhhdCB0aGUgd2FzbS1jb3JlIGZ1bmN0aW9ucyByZXR1cm4gdG8gdGhlXG4gICAqIFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGUuIEFueSBvdXRwdXRzIGluIHRoZSBwcm92aWRlZCBvdXRwdXRBcnJheSB0aGF0IGFyZSBmYWxzeSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHJlc3VsdC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3VsdHMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgcmVzdWx0TWFwIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGZvciB0aGF0IG91dHB1dE5hbWUgYWxyZWFkeVxuICAgKiBAcGFyYW0gb3V0cHV0QXJyYXkgdXNlZCB0byBwb3B1bGF0ZSB0aGUgcmVzdWx0TWFwLiBJZiBudWxsIG9yIHVuZGVmaW5lZCwgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHJlc3VsdCBmcm9tIHJlc3VsdHNcbiAgICogQHBhcmFtIG91dHB1dEluZGljZXMgc3BlY2lmaWVzIHdoaWNoIG91dHB1dE5hbWUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZm9yIG91dHB1dEFycmF5IHJlZmVycyB0by5cbiAgICogQHJldHVybnMgYSBtYXAgb2Ygb3V0cHV0IG5hbWVzIGFuZCBPbm54VmFsdWVzLlxuICAgKi9cbiAgY29udmVydFRlbnNvck1ldGFkYXRhVG9SZXR1cm5UeXBlKFxuICAgICAgcmVzdWx0czogVGVuc29yTWV0YWRhdGFbXSwgb3V0cHV0QXJyYXk6IEFycmF5PFRlbnNvcnxudWxsPiwgb3V0cHV0SW5kaWNlczogbnVtYmVyW10pOiBTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlIHtcbiAgICBjb25zdCByZXN1bHRNYXA6IFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGUgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdE1hcFt0aGlzLm91dHB1dE5hbWVzW291dHB1dEluZGljZXNbaV1dXSA9IG91dHB1dEFycmF5W2ldID8/IGRlY29kZVRlbnNvck1ldGFkYXRhKHJlc3VsdHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0TWFwO1xuICB9XG5cbiAgYXN5bmMgbGF6eVJlc2V0R3JhZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBsYXp5UmVzZXRHcmFkKHRoaXMuc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGFzeW5jIHJ1blRyYWluU3RlcChcbiAgICAgIGZlZWRzOiBTZXNzaW9uSGFuZGxlci5GZWVkc1R5cGUsIGZldGNoZXM6IFNlc3Npb25IYW5kbGVyLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlPiB7XG4gICAgY29uc3QgWywgaW5wdXRJbmRpY2VzLCBpbnB1dHNdID0gdGhpcy5jb252ZXJ0TWFwSW50b1ZhbHVlc0FycmF5QW5kSW5kaWNlc0FycmF5PFRlbnNvciwgVGVuc29yTWV0YWRhdGE+KFxuICAgICAgICBmZWVkcywgdGhpcy5pbnB1dE5hbWVzLFxuICAgICAgICAodCwgaSk6IFRlbnNvck1ldGFkYXRhID0+IGVuY29kZVRlbnNvck1ldGFkYXRhKHQsICgpID0+IGBpbnB1dCBcIiR7dGhpcy5pbnB1dE5hbWVzW2lucHV0SW5kaWNlc1tpXV19XCJgKSk7XG5cbiAgICBjb25zdCBbb3V0cHV0QXJyYXksIG91dHB1dEluZGljZXMsIG91dHB1dHNdID1cbiAgICAgICAgdGhpcy5jb252ZXJ0TWFwSW50b1ZhbHVlc0FycmF5QW5kSW5kaWNlc0FycmF5PFRlbnNvcnxudWxsLCBUZW5zb3JNZXRhZGF0YXxudWxsPihcbiAgICAgICAgICAgIGZldGNoZXMsIHRoaXMub3V0cHV0TmFtZXMsXG4gICAgICAgICAgICAodCwgaSk6IFRlbnNvck1ldGFkYXRhfG51bGwgPT5cbiAgICAgICAgICAgICAgICB0ID8gZW5jb2RlVGVuc29yTWV0YWRhdGEodCwgKCkgPT4gYG91dHB1dCBcIiR7dGhpcy5vdXRwdXROYW1lc1tvdXRwdXRJbmRpY2VzW2ldXX1cImApIDogbnVsbCk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcnVuVHJhaW5TdGVwKHRoaXMuc2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0cywgb3V0cHV0SW5kaWNlcywgb3V0cHV0cywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydFRlbnNvck1ldGFkYXRhVG9SZXR1cm5UeXBlKHJlc3VsdHMsIG91dHB1dEFycmF5LCBvdXRwdXRJbmRpY2VzKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bk9wdGltaXplclN0ZXAob3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgcnVuT3B0aW1pemVyU3RlcCh0aGlzLnNlc3Npb25JZCwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBydW5FdmFsU3RlcChcbiAgICAgIGZlZWRzOiBTZXNzaW9uSGFuZGxlci5GZWVkc1R5cGUsIGZldGNoZXM6IFNlc3Npb25IYW5kbGVyLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlPiB7XG4gICAgY29uc3QgWywgaW5wdXRJbmRpY2VzLCBpbnB1dHNdID0gdGhpcy5jb252ZXJ0TWFwSW50b1ZhbHVlc0FycmF5QW5kSW5kaWNlc0FycmF5PFRlbnNvciwgVGVuc29yTWV0YWRhdGE+KFxuICAgICAgICBmZWVkcywgdGhpcy5ldmFsSW5wdXROYW1lcyxcbiAgICAgICAgKHQsIGkpOiBUZW5zb3JNZXRhZGF0YSA9PiBlbmNvZGVUZW5zb3JNZXRhZGF0YSh0LCAoKSA9PiBgaW5wdXQgXCIke3RoaXMuZXZhbElucHV0TmFtZXNbaW5wdXRJbmRpY2VzW2ldXX1cImApKTtcblxuICAgIGNvbnN0IFtvdXRwdXRBcnJheSwgb3V0cHV0SW5kaWNlcywgb3V0cHV0c10gPVxuICAgICAgICB0aGlzLmNvbnZlcnRNYXBJbnRvVmFsdWVzQXJyYXlBbmRJbmRpY2VzQXJyYXk8VGVuc29yfG51bGwsIFRlbnNvck1ldGFkYXRhfG51bGw+KFxuICAgICAgICAgICAgZmV0Y2hlcywgdGhpcy5ldmFsT3V0cHV0TmFtZXMsXG4gICAgICAgICAgICAodCwgaSk6IFRlbnNvck1ldGFkYXRhfG51bGwgPT5cbiAgICAgICAgICAgICAgICB0ID8gZW5jb2RlVGVuc29yTWV0YWRhdGEodCwgKCkgPT4gYG91dHB1dCBcIiR7dGhpcy5ldmFsT3V0cHV0TmFtZXNbb3V0cHV0SW5kaWNlc1tpXV19XCJgKSA6IG51bGwpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJ1bkV2YWxTdGVwKHRoaXMuc2Vzc2lvbklkLCBpbnB1dEluZGljZXMsIGlucHV0cywgb3V0cHV0SW5kaWNlcywgb3V0cHV0cywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydFRlbnNvck1ldGFkYXRhVG9SZXR1cm5UeXBlKHJlc3VsdHMsIG91dHB1dEFycmF5LCBvdXRwdXRJbmRpY2VzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBnZXRQYXJhbWV0ZXJzU2l6ZSh0aGlzLnNlc3Npb25JZCwgdHJhaW5hYmxlT25seSk7XG4gIH1cblxuICBhc3luYyBsb2FkUGFyYW1ldGVyc0J1ZmZlcihhcnJheTogVWludDhBcnJheSwgdHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGxvYWRQYXJhbWV0ZXJzQnVmZmVyKHRoaXMuc2Vzc2lvbklkLCBhcnJheSwgdHJhaW5hYmxlT25seSk7XG4gIH1cbiAgYXN5bmMgZ2V0Q29udGlndW91c1BhcmFtZXRlcnModHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8T25ueFZhbHVlPiB7XG4gICAgY29uc3QgdGVuc29yUmVzdWx0ID0gYXdhaXQgZ2V0Q29udGlndW91c1BhcmFtZXRlcnModGhpcy5zZXNzaW9uSWQsIHRyYWluYWJsZU9ubHkpO1xuICAgIHJldHVybiBkZWNvZGVUZW5zb3JNZXRhZGF0YSh0ZW5zb3JSZXN1bHQpO1xuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gcmVsZWFzZVRyYWluaW5nU2Vzc2lvbkFuZENoZWNrcG9pbnQodGhpcy5jaGVja3BvaW50SWQsIHRoaXMuc2Vzc2lvbklkKTtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb24sIFRyYWluaW5nU2Vzc2lvbkhhbmRsZXJ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7T25ueHJ1bnRpbWVXZWJBc3NlbWJseUJhY2tlbmR9IGZyb20gJy4vYmFja2VuZC13YXNtJztcbmltcG9ydCB7T25ueHJ1bnRpbWVXZWJBc3NlbWJseVRyYWluaW5nU2Vzc2lvbkhhbmRsZXJ9IGZyb20gJy4vd2FzbS9zZXNzaW9uLWhhbmRsZXItdHJhaW5pbmcnO1xuXG5jbGFzcyBPbm54cnVudGltZVRyYWluaW5nV2ViQXNzZW1ibHlCYWNrZW5kIGV4dGVuZHMgT25ueHJ1bnRpbWVXZWJBc3NlbWJseUJhY2tlbmQge1xuICBhc3luYyBjcmVhdGVUcmFpbmluZ1Nlc3Npb25IYW5kbGVyKFxuICAgICAgY2hlY2twb2ludFN0YXRlVXJpT3JCdWZmZXI6IHN0cmluZ3xVaW50OEFycmF5LCB0cmFpbk1vZGVsVXJpT3JCdWZmZXI6IHN0cmluZ3xVaW50OEFycmF5LFxuICAgICAgZXZhbE1vZGVsVXJpT3JCdWZmZXI6IHN0cmluZ3xVaW50OEFycmF5LCBvcHRpbWl6ZXJNb2RlbFVyaU9yQnVmZmVyOiBzdHJpbmd8VWludDhBcnJheSxcbiAgICAgIG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPFRyYWluaW5nU2Vzc2lvbkhhbmRsZXI+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IE9ubnhydW50aW1lV2ViQXNzZW1ibHlUcmFpbmluZ1Nlc3Npb25IYW5kbGVyKCk7XG4gICAgYXdhaXQgaGFuZGxlci5jcmVhdGVUcmFpbmluZ1Nlc3Npb24oXG4gICAgICAgIGNoZWNrcG9pbnRTdGF0ZVVyaU9yQnVmZmVyLCB0cmFpbk1vZGVsVXJpT3JCdWZmZXIsIGV2YWxNb2RlbFVyaU9yQnVmZmVyLCBvcHRpbWl6ZXJNb2RlbFVyaU9yQnVmZmVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3YXNtQmFja2VuZCA9IG5ldyBPbm54cnVudGltZVRyYWluaW5nV2ViQXNzZW1ibHlCYWNrZW5kKCk7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbi8vIFdlIHVzZSBcInJlcXVpcmVcIiBpbnN0ZWFkIG9mIFwiaW1wb3J0XCIgaGVyZSBiZWNhdXNlIGltcG9ydCBzdGF0ZW1lbnQgbXVzdCBiZSBwdXQgaW4gdG9wIGxldmVsLiBPdXIgY3VycmVudCBjb2RlIGRvZXNcbi8vIG5vdCBhbGxvdyBidW5kbGVyIHRvIHRyZWUtc2hha2luZyBjb2RlIGFzIGV4cGVjdGVkIGJlY2F1c2Ugc29tZSBjb2RlcyBhcmUgdHJlYXRlZCBhcyBoYXZpbmcgc2lkZSBlZmZlY3RzLlxuLy8gU28gd2UgaW1wb3J0IGNvZGUgaW5zaWRlIHRoZSBpZi1jbGF1c2UgdG8gYWxsb3cgYnVuZGxlciByZW1vdmUgdGhlIGNvZGUgc2FmZWx5LlxuXG5leHBvcnQgKiBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuaW1wb3J0ICogYXMgb3J0IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5leHBvcnQgZGVmYXVsdCBvcnQ7XG5cbmltcG9ydCB7cmVnaXN0ZXJCYWNrZW5kLCBlbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5pbXBvcnQge3ZlcnNpb259IGZyb20gJy4vdmVyc2lvbic7XG5cbmlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdMKSB7XG4gIGNvbnN0IG9ubnhqc0JhY2tlbmQgPSByZXF1aXJlKCcuL2JhY2tlbmQtb25ueGpzJykub25ueGpzQmFja2VuZDtcbiAgcmVnaXN0ZXJCYWNrZW5kKCd3ZWJnbCcsIG9ubnhqc0JhY2tlbmQsIC0xMCk7XG59XG5cbmlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU00pIHtcbiAgY29uc3Qgd2FzbUJhY2tlbmQgPSBCVUlMRF9ERUZTLkRJU0FCTEVfVFJBSU5JTkcgPyByZXF1aXJlKCcuL2JhY2tlbmQtd2FzbS1pbmZlcmVuY2UnKS53YXNtQmFja2VuZCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9iYWNrZW5kLXdhc20tdHJhaW5pbmcnKS53YXNtQmFja2VuZDtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVKSB7XG4gICAgcmVnaXN0ZXJCYWNrZW5kKCd3ZWJncHUnLCB3YXNtQmFja2VuZCwgNSk7XG4gICAgcmVnaXN0ZXJCYWNrZW5kKCd3ZWJubicsIHdhc21CYWNrZW5kLCA1KTtcbiAgfVxuICByZWdpc3RlckJhY2tlbmQoJ2NwdScsIHdhc21CYWNrZW5kLCAxMCk7XG4gIHJlZ2lzdGVyQmFja2VuZCgnd2FzbScsIHdhc21CYWNrZW5kLCAxMCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnYudmVyc2lvbnMsICd3ZWInLCB7dmFsdWU6IHZlcnNpb24sIGVudW1lcmFibGU6IHRydWV9KTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSAvanMvc2NyaXB0cy91cGRhdGUtdmVyc2lvbi50c1xuLy8gRG8gbm90IG1vZGlmeSBmaWxlIGNvbnRlbnQgbWFudWFsbHkuXG5cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzEuMTguMCc7XG4i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RSxHQUFHO0FBQUEsVUFBQztBQUFDLG1CQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMscUJBQVMsRUFBRSxJQUFHO0FBQUMscUJBQU8sSUFBRSxLQUFHLEtBQUcsSUFBRSxLQUFHLElBQUU7QUFBQSxZQUFDO0FBQUMsZ0JBQUk7QUFBRSxtQkFBSyxJQUFFLEVBQUUsRUFBRSxZQUFZLElBQUUsRUFBRSxZQUFZLENBQUMsTUFBSSxPQUFLLElBQUUsRUFBRSxFQUFFLFNBQVMsSUFBRSxFQUFFLFNBQVMsQ0FBQyxPQUFLLElBQUUsRUFBRSxFQUFFLFFBQVEsSUFBRSxFQUFFLFFBQVEsQ0FBQztBQUFHLG1CQUFPO0FBQUEsVUFBQztBQUFDLG1CQUFTLEVBQUUsR0FBRTtBQUFDLG9CQUFPLEVBQUUsT0FBTyxHQUFFO0FBQUEsY0FBQyxLQUFLO0FBQUUsdUJBQU8sSUFBSSxLQUFLLEVBQUUsWUFBWSxJQUFFLEdBQUUsSUFBRyxFQUFFO0FBQUEsY0FBRSxLQUFLO0FBQUUsdUJBQU87QUFBQSxjQUFFLEtBQUs7QUFBRSx1QkFBTyxJQUFJLEtBQUssRUFBRSxZQUFZLEdBQUUsR0FBRSxDQUFDO0FBQUEsY0FBRSxLQUFLO0FBQUUsdUJBQU8sSUFBSTtBQUFBLGtCQUFLLEVBQUUsWUFBWTtBQUFBLGtCQUM1ZjtBQUFBLGtCQUFFO0FBQUEsZ0JBQUM7QUFBQSxjQUFFLEtBQUs7QUFBRSx1QkFBTyxJQUFJLEtBQUssRUFBRSxZQUFZLEdBQUUsR0FBRSxDQUFDO0FBQUEsY0FBRSxLQUFLO0FBQUUsdUJBQU8sSUFBSSxLQUFLLEVBQUUsWUFBWSxJQUFFLEdBQUUsSUFBRyxFQUFFO0FBQUEsY0FBRSxLQUFLO0FBQUUsdUJBQU8sSUFBSSxLQUFLLEVBQUUsWUFBWSxJQUFFLEdBQUUsSUFBRyxFQUFFO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxFQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRyxpQkFBSSxJQUFFLElBQUksS0FBTSxJQUFJLEtBQUssRUFBRSxLQUFHLE1BQUssR0FBRSxDQUFDLEVBQUcsUUFBUSxDQUFDLEdBQUUsSUFBRSxLQUFHO0FBQUMsa0JBQUksSUFBRSxFQUFFLFNBQVMsR0FBRSxLQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBRSxLQUFHLElBQUksQ0FBQztBQUFFLGtCQUFHLElBQUUsSUFBRSxFQUFFLFFBQVE7QUFBRSxxQkFBRyxJQUFFLEVBQUUsUUFBUSxJQUFFLEdBQUUsRUFBRSxRQUFRLENBQUMsR0FBRSxLQUFHLElBQUUsRUFBRSxTQUFTLElBQUUsQ0FBQyxLQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUUsRUFBRSxZQUFZLEVBQUUsWUFBWSxJQUFFLENBQUM7QUFBQSxtQkFBTztBQUFDLGtCQUFFLFFBQVEsRUFBRSxRQUFRLElBQUUsQ0FBQztBQUFFO0FBQUEsY0FBSztBQUFBLFlBQUM7QUFBQyxnQkFBRSxJQUFJLEtBQUssRUFBRSxZQUFZLElBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxnQkFBRSxFQUFFLElBQUk7QUFBQSxjQUFLLEVBQUUsWUFBWTtBQUFBLGNBQ25mO0FBQUEsY0FBRTtBQUFBLFlBQUMsQ0FBQztBQUFFLGdCQUFFLEVBQUUsQ0FBQztBQUFFLG1CQUFPLEtBQUcsRUFBRSxHQUFFLENBQUMsSUFBRSxLQUFHLEVBQUUsR0FBRSxDQUFDLElBQUUsRUFBRSxZQUFZLElBQUUsSUFBRSxFQUFFLFlBQVksSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFBLFVBQUM7QUFBQyxpQkFBSztBQUFFLGlCQUFLO0FBQUUsaUJBQUs7QUFBRSxpQkFBSztBQUFFLGNBQUksSUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUM7QUFBRSxjQUFFLEVBQUMsSUFBRyxFQUFFLEtBQUcsTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEdBQUU7QUFBRSxjQUFFLEVBQUUsQ0FBQztBQUFFLGNBQUU7QUFBQSxZQUFDLE1BQUs7QUFBQSxZQUF1QixNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFBSyxNQUFLO0FBQUEsWUFBYyxNQUFLO0FBQUEsWUFBUSxNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFBVyxPQUFNO0FBQUEsWUFDbmYsT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQVcsT0FBTTtBQUFBLFlBQVcsT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFVBQUk7QUFBRSxtQkFBUSxLQUFLO0FBQUUsZ0JBQUUsRUFBRSxRQUFRLElBQUksT0FBTyxHQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLGNBQUksS0FBRywyREFBMkQsTUFBTSxHQUFHLEdBQUUsS0FBRyx3RkFBd0YsTUFBTSxHQUFHO0FBQUUsY0FBRSxFQUFDLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUUsTUFBSyxPQUNsZixHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxLQUFHLFFBQU0sTUFBSSxHQUFFLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxHQUFFLEdBQUcsR0FBRSxNQUFLLE9BQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQyxHQUFFLE1BQUssT0FBRztBQUFDLGdCQUFFLEVBQUU7QUFBRyxpQkFBRyxJQUFFLElBQUUsS0FBRyxLQUFHLE1BQUksS0FBRztBQUFJLG1CQUFPLEVBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxHQUFFLE1BQUssT0FBRztBQUFDLHFCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBRyxFQUFFLEtBQUcsR0FBRSxNQUFJLEVBQUUsRUFBRSxLQUFHLElBQUksSUFBRSxLQUFHLElBQUksR0FBRztBQUFFO0FBQUMsbUJBQU8sRUFBRSxFQUFFLEtBQUcsR0FBRSxDQUFDO0FBQUEsVUFBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsS0FBRyxHQUFFLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQyxHQUFFLE1BQUssTUFBSSxNQUFLLE1BQUssT0FBRyxLQUFHLEVBQUUsTUFBSSxLQUFHLEVBQUUsS0FBRyxPQUFLLE1BQUssTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUMsR0FBRSxNQUFLLE1BQUksS0FBSyxNQUFLLE9BQUcsRUFBRSxNQUFJLEdBQUUsTUFBSyxPQUFHLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxJQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQyxHQUFFLE1BQUssT0FDcmY7QUFBQyxnQkFBSSxJQUFFLEtBQUssT0FBTyxFQUFFLEtBQUcsS0FBRyxFQUFFLEtBQUcsS0FBRyxLQUFHLENBQUM7QUFBRSxrQkFBSSxFQUFFLEtBQUcsTUFBSSxFQUFFLEtBQUcsS0FBRyxLQUFHO0FBQUksZ0JBQUc7QUFBRSxvQkFBSSxNQUFJLEtBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxNQUFJLEdBQUUsS0FBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFJLElBQUU7QUFBQSxpQkFBUTtBQUFDLGtCQUFFO0FBQUcsa0JBQUksS0FBRyxFQUFFLEtBQUcsSUFBRSxFQUFFLEtBQUcsS0FBRztBQUFFLGVBQUMsS0FBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsTUFBSTtBQUFBLFlBQUc7QUFBQyxtQkFBTyxFQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxJQUFHLE1BQUssT0FBRyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUcsS0FBRyxFQUFFLEtBQUcsS0FBRyxLQUFHLENBQUMsR0FBRSxDQUFDLEdBQUUsTUFBSyxRQUFJLEVBQUUsS0FBRyxNQUFNLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxLQUFHLE1BQUssTUFBSyxPQUFHO0FBQUMsZ0JBQUUsRUFBRTtBQUFHLGdCQUFJLElBQUUsS0FBRztBQUFFLGdCQUFFLEtBQUssSUFBSSxDQUFDLElBQUU7QUFBRyxvQkFBTyxJQUFFLE1BQUksT0FBSyxPQUFPLFVBQVEsSUFBRSxLQUFHLE1BQUksSUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQUEsVUFBQyxHQUFFLE1BQUssT0FBRyxFQUFFLElBQUcsTUFBSyxNQUFJLElBQUc7QUFBRSxjQUFFLEVBQUUsUUFBUSxPQUFNLE1BQVU7QUFBRSxlQUFJLEtBQUs7QUFBRSxjQUFFLFNBQVMsQ0FBQyxNQUNyZ0IsSUFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLEdBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUFHLGNBQUUsRUFBRSxRQUFRLFNBQVEsR0FBRztBQUFFLGNBQUUsR0FBRyxDQUFDO0FBQUUsY0FBRyxFQUFFLFNBQU87QUFBRSxtQkFBTztBQUFFLFlBQUUsSUFBSSxHQUFFLE1BQUksQ0FBQztBQUFFLGlCQUFPLEVBQUUsU0FBTztBQUFBLFFBQUM7QUFDakksWUFBSSxLQUFHO0FBQUEsVUFBQyxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLFlBQUMsSUFBSSxHQUFHLENBQUMsRUFBRyxHQUFHLE1BQUksR0FBRSxNQUFJLENBQUM7QUFBRSxpQkFBRztBQUFFO0FBQUssa0JBQU07QUFBQSxVQUFHO0FBQUEsVUFBRSxHQUFFLFdBQVU7QUFBQyxtQkFBTztBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsV0FBVTtBQUFDLG1CQUFPO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxNQUFJO0FBQUEsVUFBRyxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRSxJQUFFLFlBQVUsSUFBRSxVQUFRLENBQUMsQ0FBQyxLQUFHLE1BQUksS0FBRyxhQUFXLElBQUU7QUFBSSxtQkFBSztBQUFFLGdCQUFFLElBQUksS0FBSyxNQUFJLENBQUM7QUFBRSxjQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxjQUFjO0FBQUUsY0FBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxjQUFjO0FBQUUsY0FBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxZQUFZO0FBQUUsY0FBRSxJQUFFLE1BQUksTUFDbGYsQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWTtBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsZUFBZSxJQUFFO0FBQUssY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxVQUFVO0FBQUUsY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEtBQUcsRUFBRSxRQUFRLElBQUUsS0FBSyxJQUFJLEVBQUUsZUFBZSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEtBQUcsUUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFFLElBQUUsWUFBVSxJQUFFLFVBQVEsQ0FBQyxDQUFDLEtBQUcsTUFBSSxLQUFHLGFBQVcsSUFBRTtBQUFJLG1CQUFLO0FBQUUsZ0JBQUUsSUFBSSxLQUFLLE1BQUksQ0FBQztBQUFFLGNBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxjQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxjQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFFBQVE7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFLLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsT0FBTztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQ3BmLENBQUMsS0FBRyxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUUsS0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUUsRUFBRSxRQUFRLElBQUUsSUFBRTtBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsS0FBRyxFQUFFLGtCQUFrQjtBQUFHLGdCQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0I7QUFBRSxnQkFBSSxJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0I7QUFBRSxjQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsS0FBRyxLQUFHLEtBQUcsRUFBRSxrQkFBa0IsS0FBRyxLQUFLLElBQUksR0FBRSxDQUFDLEtBQUc7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFNBQVMsR0FBRTtBQUFDLG1CQUFLO0FBQUUsZ0JBQUksSUFBRSxJQUFJLEtBQUssRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsTUFBSyxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLEdBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRSxFQUFFLGtCQUFrQixHQUFFLElBQUcsSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQyxFQUFHLGtCQUFrQixHQUNwZixJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0IsR0FBRSxJQUFFLEtBQUssSUFBSSxHQUFFLENBQUM7QUFBRSxnQkFBRSxJQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLE9BQU8sS0FBRyxLQUFHLEtBQUcsQ0FBQyxJQUFFLElBQUUsTUFBSSxLQUFHLE9BQUssSUFBRSxLQUFLLElBQUksR0FBRSxDQUFDLEdBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFFLFFBQU0sSUFBRSxJQUFFLElBQUUsS0FBRyxFQUFFO0FBQUcsY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxPQUFPO0FBQUUsY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEtBQUcsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFFLEtBQUcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFFLEVBQUUsUUFBUSxJQUFFLElBQUU7QUFBRSxjQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsY0FBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsY0FBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxRQUFRO0FBQUUsY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsY0FBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxRQUFRO0FBQUUsZ0JBQUUsRUFBRSxRQUFRLElBQUU7QUFBSSxtQkFBTyxJQUFJLElBQUUsR0FBRSxLQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBRSxJQUFFLElBQUUsQ0FBQyxLQUFLLE1BQU0sSUFDNWYsVUFBVSxNQUFJLElBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUUsRUFBRSxDQUFDLENBQUMsTUFBSSxNQUFJLFVBQVUsTUFBSSxJQUFFLEVBQUUsR0FBRSxNQUFJO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUMsbUJBQU07QUFBQSxVQUFHO0FBQUEsVUFBRSxHQUFFLFdBQVU7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxxQkFBUyxFQUFFLEdBQUU7QUFBQyxzQkFBTyxJQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLEtBQUcsRUFBRSxDQUFDLElBQUU7QUFB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QUUsaUJBQUs7QUFBRSxpQkFBSztBQUFFLGlCQUFLO0FBQUUsY0FBSSxJQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDO0FBQUUsY0FBRSxFQUFDLElBQUcsRUFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxJQUFFLEdBQUcsQ0FBQyxJQUFFLEdBQUU7QUFBRSxjQUFFLEdBQUcsQ0FBQztBQUFFLGNBQUU7QUFBQSxZQUFDLE1BQUs7QUFBQSxZQUF1QixNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFBSyxNQUFLO0FBQUEsWUFBYyxNQUFLO0FBQUEsWUFBUSxNQUFLO0FBQUEsWUFBVyxNQUFLO0FBQUEsWUFDMWUsTUFBSztBQUFBLFlBQVcsT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQVcsT0FBTTtBQUFBLFlBQVcsT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFVBQUk7QUFBRSxtQkFBUSxLQUFLO0FBQUUsZ0JBQUUsRUFBRSxRQUFRLElBQUksT0FBTyxHQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLGNBQUksS0FBRywyREFBMkQsTUFBTSxHQUFHLEdBQUUsS0FBRyx3RkFBd0YsTUFBTSxHQUFHO0FBQUUsY0FBRTtBQUFBLFlBQUMsTUFBSyxPQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFFLENBQUM7QUFBQSxZQUNyZixNQUFLLE9BQUcsR0FBRyxFQUFFLEVBQUU7QUFBQSxZQUFFLE1BQUssT0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUcsR0FBRyxFQUFFLEVBQUU7QUFBQSxZQUFFLE1BQUssT0FBRyxHQUFHLEVBQUUsS0FBRyxRQUFNLE1BQUksR0FBRSxDQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQztBQUFBLFlBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLEdBQUUsR0FBRztBQUFBLFlBQUUsTUFBSyxPQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7QUFBQSxZQUFFLE1BQUssT0FBRyxFQUFFLENBQUM7QUFBQSxZQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUc7QUFBQyxrQkFBRSxFQUFFO0FBQUcsbUJBQUcsSUFBRSxJQUFFLEtBQUcsS0FBRyxNQUFJLEtBQUc7QUFBSSxxQkFBTyxFQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLE1BQUssT0FBRztBQUFDLHVCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBRyxFQUFFLEtBQUcsR0FBRSxNQUFJLEVBQUUsRUFBRSxLQUFHLElBQUksSUFBRSxLQUFHLElBQUksR0FBRztBQUFFO0FBQUMscUJBQU8sRUFBRSxFQUFFLEtBQUcsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxLQUFHLEdBQUUsQ0FBQztBQUFBLFlBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUM7QUFBQSxZQUFFLE1BQUssTUFBSTtBQUFBLFlBQUssTUFBSyxPQUFHLEtBQUcsRUFBRSxNQUFJLEtBQUcsRUFBRSxLQUFHLE9BQUs7QUFBQSxZQUFLLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDO0FBQUEsWUFBRSxNQUFLLE1BQUk7QUFBQSxZQUFLLE1BQUssT0FBRyxFQUFFLE1BQUk7QUFBQSxZQUFFLE1BQUssT0FBRyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQ3hmLElBQUUsRUFBRSxNQUFJLENBQUMsR0FBRSxDQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUc7QUFBQyxrQkFBSSxJQUFFLEtBQUssT0FBTyxFQUFFLEtBQUcsS0FBRyxFQUFFLEtBQUcsS0FBRyxLQUFHLENBQUM7QUFBRSxvQkFBSSxFQUFFLEtBQUcsTUFBSSxFQUFFLEtBQUcsS0FBRyxLQUFHO0FBQUksa0JBQUc7QUFBRSxzQkFBSSxNQUFJLEtBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxNQUFJLEdBQUUsS0FBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFJLElBQUU7QUFBQSxtQkFBUTtBQUFDLG9CQUFFO0FBQUcsb0JBQUksS0FBRyxFQUFFLEtBQUcsSUFBRSxFQUFFLEtBQUcsS0FBRztBQUFFLGlCQUFDLEtBQUcsS0FBRyxLQUFHLEtBQUcsRUFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLE1BQUk7QUFBQSxjQUFHO0FBQUMscUJBQU8sRUFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUcsRUFBRTtBQUFBLFlBQUcsTUFBSyxPQUFHLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBRyxLQUFHLEVBQUUsS0FBRyxLQUFHLEtBQUcsQ0FBQyxHQUFFLENBQUM7QUFBQSxZQUFFLE1BQUssUUFBSSxFQUFFLEtBQUcsTUFBTSxTQUFTLEVBQUUsVUFBVSxDQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUcsRUFBRSxLQUFHO0FBQUEsWUFBSyxNQUFLLE9BQUc7QUFBQyxrQkFBRSxFQUFFO0FBQUcsa0JBQUksSUFBRSxLQUFHO0FBQUUsa0JBQUUsS0FBSyxJQUFJLENBQUMsSUFBRTtBQUFHLHNCQUFPLElBQUUsTUFBSSxPQUFLLE9BQU8sVUFBUSxJQUFFLEtBQUcsTUFBSSxJQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFBQSxZQUFDO0FBQUEsWUFBRSxNQUFLLE9BQUcsRUFBRTtBQUFBLFlBQUcsTUFBSyxNQUFJO0FBQUEsVUFBRztBQUFFLGNBQUUsRUFBRTtBQUFBLFlBQVE7QUFBQSxZQUNuZjtBQUFBLFVBQVU7QUFBRSxlQUFJLEtBQUs7QUFBRSxjQUFFLFNBQVMsQ0FBQyxNQUFJLElBQUUsRUFBRSxRQUFRLElBQUksT0FBTyxHQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBRyxjQUFFLEVBQUUsUUFBUSxTQUFRLEdBQUc7QUFBRSxjQUFFLEdBQUcsQ0FBQztBQUFFLGNBQUcsRUFBRSxTQUFPO0FBQUUsbUJBQU87QUFBRSxhQUFHLEdBQUUsQ0FBQztBQUFFLGlCQUFPLEVBQUUsU0FBTztBQUFBLFFBQUM7QUFBQyxVQUFFLEdBQUc7QUFDdEssWUFBSSxLQUFHLENBQUMsTUFBSyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRSxHQUFFLEtBQUc7QUFBQSxVQUFDLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFLO0FBQUUsWUFBQyxJQUFJLEdBQUcsQ0FBQyxFQUFHLEdBQUcsTUFBSSxHQUFFLE1BQUksQ0FBQztBQUFFLGlCQUFHO0FBQUU7QUFBSyxrQkFBTTtBQUFBLFVBQUc7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFO0FBQUMsZUFBRyxNQUFJLEdBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxJQUFHLFFBQU8sS0FBRTtBQUFFLGNBQUUsR0FBRztBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBRSxZQUFZLEVBQUMsS0FBSSxpQkFBZ0IsUUFBTyxFQUFDLENBQUMsSUFBRSxHQUFHLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFLE1BQUk7QUFBQSxVQUFHLEdBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLGlCQUFHLE1BQUksSUFBRSxXQUFXLE1BQUksRUFBRSxDQUFDLElBQUUsSUFBRSxZQUFZLEVBQUMsY0FBYSxHQUFFLEtBQUksZUFBYyxDQUFDLEtBQUcsSUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFJLEVBQUUsWUFBWSxFQUFDLEtBQUksZUFBYyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQ3ZnQixHQUFFLFdBQVU7QUFBQyxtQkFBTTtBQUFBLFVBQUU7QUFBQSxVQUFFLEdBQUU7QUFBQSxVQUFHLEdBQUUsU0FBUyxHQUFFO0FBQUMsaUJBQUcsRUFBRSxHQUFHLE1BQUksQ0FBQyxFQUFFLElBQUk7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRSxJQUFFLFlBQVUsSUFBRSxVQUFRLENBQUMsQ0FBQyxLQUFHLE1BQUksS0FBRyxhQUFXLElBQUU7QUFBSSxtQkFBSztBQUFFLGdCQUFFLElBQUksS0FBSyxNQUFJLENBQUM7QUFBRSxjQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLGNBQWM7QUFBRSxjQUFFLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLEVBQUUsY0FBYztBQUFFLGNBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxZQUFZO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWTtBQUFFLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxlQUFlLElBQUU7QUFBSyxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsVUFBVTtBQUFFLGlCQUFHLEVBQUUsUUFBUSxJQUFFLEtBQUssSUFBSSxFQUFFLGVBQWUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxLQUFHLFFBQU07QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUUsSUFDcGYsWUFBVSxJQUFFLFVBQVEsQ0FBQyxDQUFDLEtBQUcsTUFBSSxLQUFHLGFBQVcsSUFBRTtBQUFJLG1CQUFLO0FBQUUsZ0JBQUUsSUFBSSxLQUFLLE1BQUksQ0FBQztBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsY0FBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsUUFBUTtBQUFFLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFLLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxPQUFPO0FBQUUsaUJBQUcsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFFLEtBQUcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFFLEVBQUUsUUFBUSxJQUFFLElBQUU7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLEtBQUcsRUFBRSxrQkFBa0I7QUFBRyxnQkFBRyxJQUFJLEtBQUssRUFBRSxZQUFZLEdBQUUsR0FBRSxDQUFDLEVBQUcsa0JBQWtCO0FBQUUsZ0JBQUksSUFBRyxJQUFJLEtBQUssRUFBRSxZQUFZLEdBQUUsR0FBRSxDQUFDLEVBQUcsa0JBQWtCO0FBQ3pnQixpQkFBRyxLQUFHLEtBQUcsRUFBRSxrQkFBa0IsS0FBRyxLQUFLLElBQUksR0FBRSxDQUFDLEtBQUc7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxTQUFTLEdBQUU7QUFBQyxtQkFBSztBQUFFLGdCQUFJLElBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsTUFBSyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsRUFBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxFQUFFLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxHQUFFLEVBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRSxFQUFFLGtCQUFrQixHQUFFLElBQUcsSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQyxFQUFHLGtCQUFrQixHQUFFLElBQUcsSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQyxFQUFHLGtCQUFrQixHQUFFLElBQUUsS0FBSyxJQUFJLEdBQUUsQ0FBQztBQUFFLGdCQUFFLElBQUUsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxPQUFPLEtBQUcsS0FBRyxLQUFHLENBQUMsSUFBRSxJQUFFLE1BQUksS0FBRyxPQUFLLElBQUUsS0FBSyxJQUFJLEdBQUUsQ0FBQyxHQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsSUFBRSxRQUFNLElBQUUsSUFBRSxJQUFFLEtBQUcsRUFBRTtBQUFHLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFDbmYsQ0FBQyxJQUFFLEVBQUUsT0FBTztBQUFFLGlCQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBRSxLQUFHLElBQUksRUFBRSxTQUFTLENBQUMsSUFBRSxFQUFFLFFBQVEsSUFBRSxJQUFFO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRTtBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsY0FBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFNBQVM7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsUUFBUTtBQUFFLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFFBQVE7QUFBRSxnQkFBRSxFQUFFLFFBQVEsSUFBRTtBQUFJLG1CQUFPLElBQUksSUFBRSxHQUFFLEtBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFFLElBQUUsSUFBRSxDQUFDLEtBQUssTUFBTSxJQUFFLFVBQVUsTUFBSSxJQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQUksTUFBSSxVQUFVLE1BQUksSUFBRSxFQUFFLEdBQUUsTUFBSTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLHFCQUFTLEVBQUUsR0FBRTtBQUFDLHNCQUFPLElBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsS0FDcGYsRUFBRSxDQUFDLElBQUU7QUFBQSxZQUFLO0FBQUMsbUJBQUs7QUFBRSxtQkFBSztBQUFFLG1CQUFLO0FBQUUsZ0JBQUksS0FBRyxvQkFBSSxRQUFNLFlBQVksR0FBRSxJQUFFLElBQUksS0FBSyxHQUFFLEdBQUUsQ0FBQyxHQUFFLElBQUUsSUFBSSxLQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxrQkFBa0I7QUFBRSxnQkFBSSxJQUFFLEVBQUUsa0JBQWtCLEdBQUUsSUFBRSxLQUFLLElBQUksR0FBRSxDQUFDO0FBQUUsY0FBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsS0FBRztBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLE9BQU8sS0FBRyxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxDQUFDO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUUsS0FBRyxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxHQUFFLEVBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsTUFBSSxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxHQUFFLEVBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEVBQUU7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFdBQVU7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFdBQVU7QUFBQyxtQkFBTyxLQUFLLElBQUk7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLE1BQUk7QUFBQyxrQkFBSTtBQUFFLGtCQUFLO0FBQUEsVUFBUztBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUMsbUJBQU87QUFBQSxVQUFVO0FBQUEsVUFBRSxHQUFFLE1BQUksWUFBWSxhQUFXLFlBQVksSUFBSTtBQUFBLFVBQUUsR0FBRSxXQUFVO0FBQUMsbUJBQU8sSUFDN2Ysc0NBQWMsS0FBSyxFQUFFLFNBQU8sVUFBVTtBQUFBLFVBQW1CO0FBQUEsVUFBRSxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUUsS0FBRyxNQUFJO0FBQUUsZUFBRyxTQUFPO0FBQUUsZ0JBQUUsTUFBSSxLQUFHO0FBQUUsaUJBQUksSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLGlCQUFHLENBQUMsSUFBRSxHQUFHLEVBQUUsSUFBRSxNQUFJLENBQUM7QUFBRSxtQkFBTyxHQUFHLENBQUMsRUFBRSxNQUFNLE1BQUssRUFBRTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBSSxJQUFFLEVBQUUsRUFBRTtBQUFPLGdCQUFHLEtBQUcsS0FBRyxhQUFXO0FBQUUscUJBQU07QUFBRyxxQkFBUSxJQUFFLEdBQUUsS0FBRyxHQUFFLEtBQUcsR0FBRTtBQUFDLGtCQUFJLElBQUUsS0FBRyxJQUFFLE1BQUc7QUFBRyxrQkFBRSxLQUFLLElBQUksR0FBRSxJQUFFLFNBQVM7QUFBRSxrQkFBSSxJQUFFO0FBQUssa0JBQUUsS0FBSyxJQUFJLEdBQUUsQ0FBQztBQUFFLGlCQUFFO0FBQUMsb0JBQUUsRUFBRSxJQUFJLEtBQUssR0FBRSxZQUFXLEtBQUcsUUFBTSxJQUFFLFNBQU8sS0FBSyxJQUFFLEVBQUUsT0FBTyxhQUFXLFVBQVE7QUFBRyxvQkFBRztBQUFDLG9CQUFFLEtBQUssQ0FBQztBQUFFLG9CQUFFO0FBQUUsc0JBQUksSUFBRTtBQUFFLHdCQUFNO0FBQUEsZ0JBQUMsU0FBTyxHQUFFO0FBQUEsZ0JBQUM7QUFBQyxvQkFBRTtBQUFBLGNBQU07QUFBQyxrQkFBRztBQUFFLHVCQUFNO0FBQUEsWUFBRTtBQUFDLG1CQUFNO0FBQUEsVUFBRTtBQUFBLFVBQ3BmLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUUsS0FBRyxFQUFFO0FBQUEsVUFBVyxHQUFFO0FBQUEsVUFBRyxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFPLEdBQUcsTUFBSSxHQUFFLE1BQUksR0FBRSxNQUFJLEdBQUUsTUFBSSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBRSxTQUFDLFdBQVU7QUFBQyxtQkFBUyxFQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFFLEVBQUU7QUFBUSxnQkFBRSxJQUFFLEdBQUcsQ0FBQztBQUFFLGNBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRTtBQUFFLGlCQUFHLEVBQUU7QUFBRyxlQUFHLFFBQVEsRUFBRSxDQUFDO0FBQUUsaUJBQUc7QUFBRSxlQUFHO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUMsY0FBSSxJQUFFLEVBQUMsR0FBRSxHQUFFO0FBQUUsYUFBRztBQUFFLGNBQUcsRUFBRTtBQUFnQixnQkFBRztBQUFDLHFCQUFPLEVBQUUsZ0JBQWdCLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsd0RBQXNELENBQUMsR0FBRSxFQUFFLENBQUM7QUFBQSxZQUFDO0FBQUMsYUFBRyxHQUFFLFNBQVMsR0FBRTtBQUFDLGNBQUUsRUFBRSxVQUFTLEVBQUUsTUFBTTtBQUFBLFVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUFFLGlCQUFNLENBQUM7QUFBQSxRQUFDLEdBQUc7QUFBRSxVQUFFLFdBQVMsQ0FBQyxHQUFFLE9BQUssRUFBRSxXQUFTLEVBQUUsR0FBRyxHQUFFLENBQUM7QUFDeGQsVUFBRSxtQkFBaUIsQ0FBQyxHQUFFLE9BQUssRUFBRSxtQkFBaUIsRUFBRSxHQUFHLEdBQUUsQ0FBQztBQUFFLFVBQUUsMkJBQXlCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxFQUFFLDJCQUF5QixFQUFFLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUsOEJBQTRCLENBQUMsR0FBRSxPQUFLLEVBQUUsOEJBQTRCLEVBQUUsR0FBRyxHQUFFLENBQUM7QUFBRSxVQUFFLCtCQUE2QixDQUFDLEdBQUUsR0FBRSxPQUFLLEVBQUUsK0JBQTZCLEVBQUUsR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUsNEJBQTBCLENBQUMsR0FBRSxHQUFFLE9BQUssRUFBRSw0QkFBMEIsRUFBRSxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUUsVUFBRSw0QkFBMEIsUUFBSSxFQUFFLDRCQUEwQixFQUFFLElBQUksQ0FBQztBQUNuZCxVQUFFLG9CQUFrQixDQUFDLEdBQUUsR0FBRSxPQUFLLEVBQUUsb0JBQWtCLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUscUJBQW1CLFFBQUksRUFBRSxxQkFBbUIsRUFBRSxJQUFJLENBQUM7QUFBRSxVQUFFLDBCQUF3QixDQUFDLEdBQUUsR0FBRSxPQUFLLEVBQUUsMEJBQXdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUsbUJBQWlCLENBQUMsR0FBRSxPQUFLLEVBQUUsbUJBQWlCLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBRSxVQUFFLG9CQUFrQixDQUFDLEdBQUUsT0FBSyxFQUFFLG9CQUFrQixFQUFFLElBQUksR0FBRSxDQUFDO0FBQUUsVUFBRSxXQUFTLFFBQUksRUFBRSxXQUFTLEVBQUUsSUFBSSxDQUFDO0FBQUUsVUFBRSxtQkFBaUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxFQUFFLG1CQUFpQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxVQUFFLG9CQUFrQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxFQUFFLG9CQUFrQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQ3RlLFVBQUUsb0JBQWtCLFFBQUksRUFBRSxvQkFBa0IsRUFBRSxJQUFJLENBQUM7QUFBRSxVQUFFLHVCQUFxQixDQUFDLEdBQUUsR0FBRSxHQUFFLE9BQUssRUFBRSx1QkFBcUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxVQUFFLHdCQUFzQixDQUFDLEdBQUUsR0FBRSxPQUFLLEVBQUUsd0JBQXNCLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUsd0JBQXNCLFFBQUksRUFBRSx3QkFBc0IsRUFBRSxJQUFJLENBQUM7QUFBRSxVQUFFLG9CQUFrQixRQUFJLEVBQUUsb0JBQWtCLEVBQUUsSUFBSSxDQUFDO0FBQUUsVUFBRSxnQkFBYyxDQUFDLEdBQUUsR0FBRSxPQUFLLEVBQUUsZ0JBQWMsRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDO0FBQUUsVUFBRSxpQkFBZSxDQUFDLEdBQUUsR0FBRSxHQUFFLE9BQUssRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLFVBQUUsd0JBQXNCLFFBQUksRUFBRSx3QkFBc0IsRUFBRSxJQUFJLENBQUM7QUFDdGUsVUFBRSxxQkFBbUIsUUFBSSxFQUFFLHFCQUFtQixFQUFFLElBQUksQ0FBQztBQUFFLFVBQUUscUJBQW1CLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEVBQUUscUJBQW1CLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxVQUFFLFVBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssRUFBRSxVQUFRLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxVQUFFLG1CQUFpQixRQUFJLEVBQUUsbUJBQWlCLEVBQUUsSUFBSSxDQUFDO0FBQUUsWUFBSSxJQUFFLEVBQUUsZ0JBQWMsT0FBSyxJQUFFLEVBQUUsZ0JBQWMsRUFBRSxJQUFJLEdBQUUsS0FBRyxFQUFFLFVBQVEsUUFBSSxLQUFHLEVBQUUsVUFBUSxFQUFFLElBQUksQ0FBQztBQUFFLFVBQUUsUUFBTSxRQUFJLEVBQUUsUUFBTSxFQUFFLElBQUksQ0FBQztBQUFFLFVBQUUsd0JBQXNCLE9BQUssRUFBRSx3QkFBc0IsRUFBRSxJQUFJO0FBQ3RhLFlBQUksS0FBRyxFQUFFLDJCQUF5QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSwyQkFBeUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUUsVUFBRSw4QkFBNEIsT0FBSyxFQUFFLDhCQUE0QixFQUFFLElBQUk7QUFBRSxZQUFJLEtBQUcsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLFFBQUksS0FBRyxFQUFFLElBQUksQ0FBQyxHQUFFLEtBQUcsRUFBRSwyQkFBeUIsUUFBSSxLQUFHLEVBQUUsMkJBQXlCLEVBQUUsSUFBSSxDQUFDLEdBQUUsS0FBRyxFQUFFLDZCQUEyQixPQUFLLEtBQUcsRUFBRSw2QkFBMkIsRUFBRSxJQUFJLEdBQUUsS0FBRyxRQUFJLEtBQUcsRUFBRSxJQUFJLENBQUMsR0FBRSxLQUFHLENBQUMsR0FBRSxPQUFLLEtBQUcsRUFBRSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEtBQUcsT0FBSyxLQUFHLEVBQUUsSUFBSSxHQUFFLEtBQUcsUUFBSSxLQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUUsS0FBRyxRQUFJLEtBQUcsRUFBRSxJQUFJLENBQUM7QUFDN2QsaUJBQVMsR0FBRyxHQUFFO0FBQUMsY0FBRSxPQUFPLE9BQU8sQ0FBQyxHQUFFLENBQUM7QUFBRSxjQUFJLElBQUUsT0FBRyxNQUFJLEVBQUUsTUFBSSxHQUFFLElBQUUsT0FBRyxPQUFHLEVBQUUsQ0FBQyxNQUFJO0FBQUUsWUFBRSxtQkFBaUIsRUFBRSxFQUFFLGdCQUFnQjtBQUFFLFlBQUUsZUFBYSxFQUFFLEVBQUUsWUFBWTtBQUFFLFlBQUUsU0FBTyxFQUFFLEVBQUUsTUFBTTtBQUFFLFlBQUUsWUFBVSxFQUFFLEVBQUUsU0FBUztBQUFFLFlBQUUsYUFBVyxFQUFFLEVBQUUsVUFBVTtBQUFFLGlCQUFPO0FBQUEsUUFBQztBQUFDLFVBQUUsbUJBQWlCO0FBQUUsVUFBRSxhQUFXO0FBQUUsVUFBRSxhQUFXO0FBQUcsVUFBRSxZQUFVO0FBQUcsVUFBRSxlQUFhO0FBQUcsVUFBRSxlQUFhO0FBQUcsVUFBRSxlQUFhO0FBQUcsVUFBRSxrQkFBZ0I7QUFBRyxVQUFFLGFBQVc7QUFBRSxVQUFFLFVBQVE7QUFBRSxZQUFJO0FBQUcsWUFBRSxTQUFTLEtBQUk7QUFBQyxnQkFBSSxHQUFHO0FBQUUsaUJBQUssSUFBRTtBQUFBLFFBQUc7QUFDOWIsaUJBQVMsS0FBSTtBQUFDLG1CQUFTLElBQUc7QUFBQyxnQkFBRyxDQUFDLE9BQUssS0FBRyxNQUFHLEVBQUUsWUFBVSxNQUFHLENBQUMsSUFBRztBQUFDLG1CQUFHLEdBQUcsRUFBRTtBQUFFLGlCQUFHLENBQUM7QUFBRSxrQkFBRyxFQUFFO0FBQXFCLGtCQUFFLHFCQUFxQjtBQUFFLGtCQUFHLENBQUMsR0FBRTtBQUFDLG9CQUFHLEVBQUU7QUFBUSx1QkFBSSxjQUFZLE9BQU8sRUFBRSxZQUFVLEVBQUUsVUFBUSxDQUFDLEVBQUUsT0FBTyxJQUFHLEVBQUUsUUFBUSxVQUFRO0FBQUMsd0JBQUksSUFBRSxFQUFFLFFBQVEsTUFBTTtBQUFFLHVCQUFHLFFBQVEsQ0FBQztBQUFBLGtCQUFDO0FBQUMsbUJBQUcsRUFBRTtBQUFBLGNBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLGNBQUcsRUFBRSxJQUFFO0FBQUcsZ0JBQUc7QUFBRSxpQkFBRyxDQUFDLEdBQUUsS0FBRyxHQUFHLEVBQUUsR0FBRSxZQUFZLENBQUM7QUFBQSxpQkFBTTtBQUFDLGtCQUFHLEVBQUU7QUFBTyxxQkFBSSxjQUFZLE9BQU8sRUFBRSxXQUFTLEVBQUUsU0FBTyxDQUFDLEVBQUUsTUFBTSxJQUFHLEVBQUUsT0FBTztBQUFRLHFCQUFHLFFBQVEsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUFFLGlCQUFHLEVBQUU7QUFBRSxrQkFBRSxNQUFJLEVBQUUsYUFBVyxFQUFFLFVBQVUsWUFBWSxHQUFFLFdBQVcsV0FBVTtBQUFDO0FBQUEsa0JBQVcsV0FBVTtBQUFDLHNCQUFFLFVBQVUsRUFBRTtBQUFBLGtCQUFDO0FBQUEsa0JBQ3BpQjtBQUFBLGdCQUFDO0FBQUUsa0JBQUU7QUFBQSxjQUFDLEdBQUUsQ0FBQyxLQUFHLEVBQUU7QUFBQSxZQUFFO0FBQUEsUUFBQztBQUFDLFlBQUcsRUFBRTtBQUFRLGVBQUksY0FBWSxPQUFPLEVBQUUsWUFBVSxFQUFFLFVBQVEsQ0FBQyxFQUFFLE9BQU8sSUFBRyxJQUFFLEVBQUUsUUFBUTtBQUFRLGNBQUUsUUFBUSxJQUFJLEVBQUU7QUFBRSxXQUFHO0FBR2hJLGVBQU8sVUFBVTtBQUFBLE1BQ25CO0FBQUEsSUFHQSxHQUFHO0FBQ0gsUUFBSSxPQUFPLFlBQVksWUFBWSxPQUFPLFdBQVc7QUFDbkQsYUFBTyxVQUFVO0FBQUEsYUFDVixPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFDbkQsYUFBTyxDQUFDLEdBQUcsTUFBTSxlQUFlO0FBQUE7QUFBQTs7O0FDdEVsQztBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxJQVVJLGdCQVNFLHdCQU1GLE1BQ0EsYUFDQSxjQUNBLFNBRUUsd0JBNkNBLGlCQXlCQSxpQkFXTyx1QkErR0E7QUE5TmI7QUFBQTtBQUFBO0FBR0E7QUFTQSxRQUFJLE1BQThCO0FBQ2hDLHVCQUFpQjtBQUFBLElBQ25CLE9BQU87QUFDTCx1QkFDSSxPQUE0QixPQUFtQztBQUFBLElBQ3JFO0FBRUEsSUFBTSx5QkFBaUUsT0FDbEUsT0FBNEIsOEJBQ0EsT0FDN0I7QUFJSixJQUFJLGNBQWM7QUFDbEIsSUFBSSxlQUFlO0FBQ25CLElBQUksVUFBVTtBQUVkLElBQU0seUJBQXlCLENBQUMsZUFBZ0M7QUFFOUQsVUFBSSxlQUFlLEdBQUc7QUFDcEIsZUFBTztBQUFBLE1BQ1Q7QUFHQSxVQUFJLE9BQU8sc0JBQXNCLGFBQWE7QUFDNUMsWUFBSSxPQUFPLFNBQVMsZUFBZSxDQUFDLEtBQUsscUJBQXFCO0FBRTVELGtCQUFRO0FBQUEsWUFDSixtQ0FBbUMsYUFDbkM7QUFBQSxVQUNrRTtBQUFBLFFBQ3hFO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFHQSxVQUFJLE9BQU8sWUFBWSxlQUFlLFFBQVEsWUFBWSxRQUFRLFNBQVMsTUFBTTtBQUUvRSxnQkFBUTtBQUFBLFVBQ0osbUNBQW1DLGFBQ25DO0FBQUEsUUFDNEU7QUFBQSxNQUNsRjtBQUVBLFVBQUk7QUFHRixZQUFJLE9BQU8sbUJBQW1CLGFBQWE7QUFDekMsY0FBSSxlQUFlLEVBQUUsTUFBTSxZQUFZLElBQUksa0JBQWtCLENBQUMsQ0FBQztBQUFBLFFBQ2pFO0FBSUEsZUFBTyxZQUFZLFNBQVMsSUFBSSxXQUFXO0FBQUEsVUFDekM7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUNuRTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsUUFDbEUsQ0FBQyxDQUFDO0FBQUEsTUFDSixTQUFTLEdBQUc7QUFDVixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxJQUFNLGtCQUFrQixNQUFlO0FBQ3JDLFVBQUk7QUFlRixlQUFPLFlBQVksU0FBUyxJQUFJLFdBQVc7QUFBQSxVQUN6QztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQ3ZGO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsUUFDekYsQ0FBQyxDQUFDO0FBQUEsTUFDSixTQUFTLEdBQUc7QUFDVixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxJQUFNLGtCQUFrQixDQUFDLFNBQWtCLGVBQXdCO0FBQ2pFLFVBQUksU0FBUztBQUNYLFlBQUksTUFBOEI7QUFDaEMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTyxhQUFhLGdDQUFnQztBQUFBLE1BQ3RELE9BQU87QUFDTCxlQUFPLGFBQWEsMkJBQTJCO0FBQUEsTUFDakQ7QUFBQSxJQUNGO0FBRU8sSUFBTSx3QkFBd0IsT0FBTSxVQUErQztBQUN4RixVQUFJLGFBQWE7QUFDZixlQUFPLFFBQVEsUUFBUTtBQUFBLE1BQ3pCO0FBQ0EsVUFBSSxjQUFjO0FBQ2hCLGNBQU0sSUFBSSxNQUFNLHVEQUF5RDtBQUFBLE1BQzNFO0FBQ0EsVUFBSSxTQUFTO0FBQ1gsY0FBTSxJQUFJLE1BQU0sb0RBQXNEO0FBQUEsTUFDeEU7QUFFQSxxQkFBZTtBQUdmLFlBQU0sVUFBVSxNQUFNO0FBQ3RCLFlBQU0sYUFBYSxNQUFNO0FBQ3pCLFlBQU0sT0FBTyxNQUFNO0FBRW5CLFlBQU0sYUFBYSx1QkFBdUIsVUFBVTtBQUNwRCxZQUFNLFVBQVUsUUFBUSxnQkFBZ0I7QUFFeEMsWUFBTSxZQUFZLE1BQU07QUFDeEIsWUFBTSxxQkFBcUIsT0FBTyxjQUFjLFdBQVcsWUFBWTtBQUN2RSxZQUFNLGVBQWUsZ0JBQWdCLFNBQVMsVUFBVTtBQUN4RCxZQUFNLG1CQUFtQixPQUFPLGNBQWMsV0FBVyxVQUFVLFlBQVksSUFBSTtBQUVuRixVQUFJLFlBQVk7QUFFaEIsWUFBTSxRQUE4QixDQUFDO0FBR3JDLFVBQUksVUFBVSxHQUFHO0FBQ2YsY0FBTSxLQUFLLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDbEMscUJBQVcsTUFBTTtBQUNmLHdCQUFZO0FBQ1osb0JBQVE7QUFBQSxVQUNWLEdBQUcsT0FBTztBQUFBLFFBQ1osQ0FBQyxDQUFDO0FBQUEsTUFDSjtBQUdBLFlBQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDMUMsY0FBTSxVQUFVLGFBQWEseUJBQXlCO0FBQ3RELGNBQU0sU0FBaUM7QUFBQSxVQUNyQyxZQUFZLENBQUMsVUFBa0Isb0JBQTRCO0FBQ3pELGdCQUF1QyxjQUFjLFNBQVMsU0FBUyxZQUFZLEtBQy9FLE9BQU8sU0FBUyxhQUFhO0FBQy9CLHFCQUFPLElBQUksZ0JBQWdCLElBQUk7QUFBQSxnQkFDM0I7QUFBQTtBQUFBO0FBQUEsa0JBR0U7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLEVBQUMsTUFBTSxrQkFBaUI7QUFBQSxjQUFDLENBQUM7QUFBQSxZQUNoQztBQUVBLGdCQUFJLFNBQVMsU0FBUyxPQUFPLEdBQUc7QUFDOUIsa0JBQUksa0JBQWtCO0FBQ3BCLHVCQUFPO0FBQUEsY0FDVDtBQUVBLG9CQUFNLFNBQVMsc0JBQXNCO0FBRXJDLGtCQUFJLE9BQTRCO0FBQzlCLG9CQUFJLGlCQUFpQixzQkFBc0I7QUFDekMseUJBQU8sU0FBUztBQUFBLGdCQUNsQixXQUFXLGlCQUFpQiwrQkFBK0I7QUFDekQseUJBQU8sU0FBUztBQUFBLGdCQUNsQjtBQUFBLGNBQ0Y7QUFFQSxxQkFBTyxTQUFTO0FBQUEsWUFDbEI7QUFFQSxtQkFBTyxrQkFBa0I7QUFBQSxVQUMzQjtBQUFBLFFBQ0Y7QUFFQSxZQUF1QyxZQUFZO0FBQ2pELGlCQUFPLGFBQWE7QUFDcEIsY0FBSSxPQUFPLFNBQVMsYUFBYTtBQUMvQixtQkFBTyxzQkFBMkIsS0FBSyxXQUFXLHNCQUFzQjtBQUFBLFVBQzFFLE9BQU87QUFDTCxrQkFBTSxtQkFBbUIsdUJBQXVCLFFBQVEsU0FBUyxDQUFDO0FBQ2xFLG1CQUFPLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxFQUFDLE1BQU0sa0JBQWlCLENBQUM7QUFBQSxVQUNyRjtBQUFBLFFBQ0Y7QUFFQSxnQkFBUSxNQUFNLEVBQUU7QUFBQTtBQUFBLFVBRVosWUFBVTtBQUNSLDJCQUFlO0FBQ2YsMEJBQWM7QUFDZCxtQkFBTztBQUNQLG9CQUFRO0FBQUEsVUFDVjtBQUFBO0FBQUEsVUFFQSxDQUFDLFNBQVM7QUFDUiwyQkFBZTtBQUNmLHNCQUFVO0FBQ1YsbUJBQU8sSUFBSTtBQUFBLFVBQ2I7QUFBQSxRQUFDO0FBQUEsTUFDUCxDQUFDLENBQUM7QUFFRixZQUFNLFFBQVEsS0FBSyxLQUFLO0FBRXhCLFVBQUksV0FBVztBQUNiLGNBQU0sSUFBSSxNQUFNLDJEQUEyRCxPQUFPLElBQUk7QUFBQSxNQUN4RjtBQUFBLElBQ0Y7QUFFTyxJQUFNLGNBQWMsTUFBcUI7QUFDOUMsVUFBSSxlQUFlLE1BQU07QUFDdkIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLElBQUksTUFBTSxxQ0FBcUM7QUFBQSxJQUN2RDtBQUFBO0FBQUE7OztBQ3BPQSxJQUthLGlCQWVBLHFCQTZCQTtBQWpEYjtBQUFBO0FBQUE7QUFHQTtBQUVPLElBQU0sa0JBQWtCLENBQUMsTUFBYyxXQUE2QjtBQUN6RSxZQUFNQyxRQUFPLFlBQVk7QUFFekIsWUFBTSxhQUFhQSxNQUFLLGdCQUFnQixJQUFJLElBQUk7QUFDaEQsWUFBTSxhQUFhQSxNQUFLLFFBQVEsVUFBVTtBQUMxQyxNQUFBQSxNQUFLLGFBQWEsTUFBTSxZQUFZLFVBQVU7QUFDOUMsYUFBTyxLQUFLLFVBQVU7QUFFdEIsYUFBTztBQUFBLElBQ1Q7QUFNTyxJQUFNLHNCQUNULENBQUMsU0FBa0MsUUFBZ0IsTUFDbEQsWUFBdUM7QUFDdEMsVUFBSSxPQUFPLFdBQVcsWUFBWSxZQUFZLE1BQU07QUFDbEQsWUFBSSxLQUFLLElBQUksT0FBTyxHQUFHO0FBQ3JCLGdCQUFNLElBQUksTUFBTSwrQkFBK0I7QUFBQSxRQUNqRCxPQUFPO0FBQ0wsZUFBSyxJQUFJLE9BQU87QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLFFBQVEsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQ2hELGNBQU0sT0FBUSxTQUFVLFNBQVMsTUFBTTtBQUN2QyxZQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLDhCQUFvQixPQUFrQyxPQUFPLEtBQUssTUFBTSxPQUFPO0FBQUEsUUFDakYsV0FBVyxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsVUFBVTtBQUNqRSxrQkFBUSxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQUEsUUFDaEMsV0FBVyxPQUFPLFVBQVUsV0FBVztBQUNyQyxrQkFBUSxNQUFPLFFBQVMsTUFBTSxHQUFHO0FBQUEsUUFDbkMsT0FBTztBQUNMLGdCQUFNLElBQUksTUFBTSxtQ0FBbUMsT0FBTyxLQUFLLEVBQUU7QUFBQSxRQUNuRTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFNRyxJQUFNLGlCQUFpQixDQUFDLFlBQTBCO0FBQ3ZELFlBQU1BLFFBQU8sWUFBWTtBQUV6QixZQUFNLFFBQVFBLE1BQUssVUFBVTtBQUM3QixVQUFJO0FBQ0YsY0FBTSxlQUFlQSxNQUFLLFdBQVcsQ0FBQztBQUN0QyxRQUFBQSxNQUFLLGlCQUFpQixjQUFjLGVBQWUsQ0FBQztBQUNwRCxjQUFNLFlBQVlBLE1BQUssT0FBTyxlQUFlLENBQUM7QUFDOUMsY0FBTSxzQkFBc0JBLE1BQUssUUFBUSxlQUFlLElBQUksQ0FBQztBQUM3RCxjQUFNLGVBQWUsc0JBQXNCQSxNQUFLLGFBQWEsbUJBQW1CLElBQUk7QUFDcEYsY0FBTSxJQUFJLE1BQU0sR0FBRyxPQUFPLGdCQUFnQixTQUFTLG9CQUFvQixZQUFZLEVBQUU7QUFBQSxNQUN2RixVQUFFO0FBQ0EsUUFBQUEsTUFBSyxhQUFhLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUMvREEsSUFRYTtBQVJiO0FBQUE7QUFBQTtBQUtBO0FBQ0E7QUFFTyxJQUFNLGdCQUFnQixDQUFDLFlBQTZEO0FBQ3pGLFlBQU1DLFFBQU8sWUFBWTtBQUN6QixVQUFJLG1CQUFtQjtBQUN2QixZQUFNLFNBQW1CLENBQUM7QUFFMUIsWUFBTSxhQUEwQyxXQUFXLENBQUM7QUFFNUQsVUFBSTtBQUNGLFlBQUksU0FBUyxxQkFBcUIsUUFBVztBQUMzQyxxQkFBVyxtQkFBbUI7QUFBQSxRQUNoQyxXQUNJLE9BQU8sUUFBUSxxQkFBcUIsWUFBWSxDQUFDLE9BQU8sVUFBVSxRQUFRLGdCQUFnQixLQUMxRixRQUFRLG1CQUFtQixLQUFLLFFBQVEsbUJBQW1CLEdBQUc7QUFDaEUsZ0JBQU0sSUFBSSxNQUFNLHFDQUFxQyxRQUFRLGdCQUFnQixFQUFFO0FBQUEsUUFDakY7QUFFQSxZQUFJLFNBQVMsc0JBQXNCLFFBQVc7QUFDNUMscUJBQVcsb0JBQW9CO0FBQUEsUUFDakMsV0FBVyxPQUFPLFFBQVEsc0JBQXNCLFlBQVksQ0FBQyxPQUFPLFVBQVUsUUFBUSxpQkFBaUIsR0FBRztBQUN4RyxnQkFBTSxJQUFJLE1BQU0scUNBQXFDLFFBQVEsaUJBQWlCLEVBQUU7QUFBQSxRQUNsRjtBQUVBLFlBQUksU0FBUyxjQUFjLFFBQVc7QUFDcEMscUJBQVcsWUFBWTtBQUFBLFFBQ3pCO0FBRUEsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxTQUFTLFFBQVEsUUFBVztBQUM5QiwwQkFBZ0IsZ0JBQWdCLFFBQVEsS0FBSyxNQUFNO0FBQUEsUUFDckQ7QUFFQSwyQkFBbUJBLE1BQUs7QUFBQSxVQUNwQixXQUFXO0FBQUEsVUFBbUIsV0FBVztBQUFBLFVBQW9CLENBQUMsQ0FBQyxXQUFXO0FBQUEsVUFBWTtBQUFBLFFBQWE7QUFDdkcsWUFBSSxxQkFBcUIsR0FBRztBQUMxQix5QkFBZSwyQkFBNEI7QUFBQSxRQUM3QztBQUVBLFlBQUksU0FBUyxVQUFVLFFBQVc7QUFDaEMsOEJBQW9CLFFBQVEsT0FBTyxJQUFJLG9CQUFJLFFBQWlDLEdBQUcsQ0FBQyxLQUFLLFVBQVU7QUFDN0Ysa0JBQU0sZ0JBQWdCLGdCQUFnQixLQUFLLE1BQU07QUFDakQsa0JBQU0sa0JBQWtCLGdCQUFnQixPQUFPLE1BQU07QUFFckQsZ0JBQUlBLE1BQUssc0JBQXNCLGtCQUFrQixlQUFlLGVBQWUsTUFBTSxHQUFHO0FBQ3RGLDZCQUFlLGlDQUFpQyxHQUFHLE1BQU0sS0FBSyxHQUFHO0FBQUEsWUFDbkU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBRUEsZUFBTyxDQUFDLGtCQUFrQixNQUFNO0FBQUEsTUFDbEMsU0FBUyxHQUFHO0FBQ1YsWUFBSSxxQkFBcUIsR0FBRztBQUMxQixVQUFBQSxNQUFLLHNCQUFzQixnQkFBZ0I7QUFBQSxRQUM3QztBQUNBLGVBQU8sUUFBUSxXQUFTQSxNQUFLLE1BQU0sS0FBSyxDQUFDO0FBQ3pDLGNBQU07QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ2hFQSxJQVFNLDBCQWVBLGtCQVdBLHNCQW9CQSx1QkE0RU87QUFsSWI7QUFBQTtBQUFBO0FBS0E7QUFDQTtBQUVBLElBQU0sMkJBQTJCLENBQUMsMkJBQW1EO0FBQ25GLGNBQVEsd0JBQXdCO0FBQUEsUUFDOUIsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVDtBQUNFLGdCQUFNLElBQUksTUFBTSx5Q0FBeUMsc0JBQXNCLEVBQUU7QUFBQSxNQUNyRjtBQUFBLElBQ0Y7QUFFQSxJQUFNLG1CQUFtQixDQUFDLGtCQUFtRDtBQUMzRSxjQUFRLGVBQWU7QUFBQSxRQUNyQixLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1Q7QUFDRSxnQkFBTSxJQUFJLE1BQU0sK0JBQStCLGFBQWEsRUFBRTtBQUFBLE1BQ2xFO0FBQUEsSUFDRjtBQUVBLElBQU0sdUJBQXVCLENBQUMsWUFBbUQ7QUFDL0UsVUFBSSxDQUFDLFFBQVEsT0FBTztBQUNsQixnQkFBUSxRQUFRLENBQUM7QUFBQSxNQUNuQjtBQUNBLFVBQUksQ0FBQyxRQUFRLE1BQU0sU0FBUztBQUMxQixnQkFBUSxNQUFNLFVBQVUsQ0FBQztBQUFBLE1BQzNCO0FBQ0EsWUFBTSxVQUFVLFFBQVEsTUFBTTtBQUM5QixVQUFJLENBQUMsUUFBUSw4QkFBOEI7QUFFekMsZ0JBQVEsK0JBQStCO0FBQUEsTUFDekM7QUFHQSxVQUFJLFFBQVEsc0JBQ1IsUUFBUSxtQkFBbUIsS0FBSyxTQUFPLE9BQU8sT0FBTyxXQUFXLEtBQUssR0FBRyxVQUFVLFFBQVEsR0FBRztBQUMvRixnQkFBUSxtQkFBbUI7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFFQSxJQUFNLHdCQUNGLENBQUMsc0JBQThCLG9CQUM5QixXQUEyQjtBQUMxQixpQkFBVyxNQUFNLG9CQUFvQjtBQUNuQyxZQUFJLFNBQVMsT0FBTyxPQUFPLFdBQVcsS0FBSyxHQUFHO0FBRzlDLGdCQUFRLFFBQVE7QUFBQSxVQUNkLEtBQUs7QUFDSCxxQkFBUztBQUNULGdCQUFJLE9BQU8sT0FBTyxVQUFVO0FBQzFCLG9CQUFNLGVBQWU7QUFDckIsa0JBQUksY0FBYyxZQUFZO0FBQzVCLHNCQUFNLGdCQUFnQixnQkFBZ0IsY0FBYyxNQUFNO0FBQzFELHNCQUFNLGtCQUFrQixnQkFBZ0IsYUFBYSxZQUFZLE1BQU07QUFDdkUsb0JBQUksWUFBWSxFQUFFLDBCQUEwQixzQkFBc0IsZUFBZSxlQUFlLE1BQzVGLEdBQUc7QUFDTCxpQ0FBZSxvREFBb0QsYUFBYSxVQUFVLEdBQUc7QUFBQSxnQkFDL0Y7QUFBQSxjQUNGO0FBQ0Esa0JBQUksY0FBYyxZQUFZO0FBQzVCLG9CQUFJLGFBQWEsYUFBYTtBQUU5QixvQkFBSSxPQUFPLGNBQWMsWUFBWSxDQUFDLE9BQU8sVUFBVSxVQUFVLEtBQUssYUFBYSxHQUFHO0FBQ3BGLCtCQUFhO0FBQUEsZ0JBQ2Y7QUFDQSxzQkFBTSxnQkFBZ0IsZ0JBQWdCLGNBQWMsTUFBTTtBQUMxRCxzQkFBTSxrQkFBa0IsZ0JBQWdCLFdBQVcsU0FBUyxHQUFHLE1BQU07QUFDckUsb0JBQUksWUFBWSxFQUFFLDBCQUEwQixzQkFBc0IsZUFBZSxlQUFlLE1BQzVGLEdBQUc7QUFDTCxpQ0FBZSxvREFBb0QsYUFBYSxVQUFVLEdBQUc7QUFBQSxnQkFDL0Y7QUFBQSxjQUNGO0FBQ0Esa0JBQUksY0FBYyxpQkFBaUI7QUFDakMsc0JBQU0sZ0JBQWdCLGdCQUFnQixtQkFBbUIsTUFBTTtBQUMvRCxzQkFBTSxrQkFBa0IsZ0JBQWdCLGFBQWEsaUJBQWlCLE1BQU07QUFDNUUsb0JBQUksWUFBWSxFQUFFLDBCQUEwQixzQkFBc0IsZUFBZSxlQUFlLE1BQzVGLEdBQUc7QUFDTDtBQUFBLG9CQUNJLHlEQUF5RCxhQUFhLGVBQWU7QUFBQSxrQkFBRztBQUFBLGdCQUM5RjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQ0E7QUFBQSxVQUNGLEtBQUs7QUFDSCxxQkFBUztBQUNULGdCQUFJLE9BQU8sT0FBTyxVQUFVO0FBQzFCLG9CQUFNLGdCQUFnQjtBQUN0QixrQkFBSSxlQUFlLGlCQUFpQjtBQUNsQyxvQkFBSSxjQUFjLG9CQUFvQixVQUFVLGNBQWMsb0JBQW9CLFFBQVE7QUFDeEYsd0JBQU0sSUFBSSxNQUFNLG9EQUFvRCxjQUFjLGVBQWUsRUFBRTtBQUFBLGdCQUNyRztBQUNBLHNCQUFNLGdCQUFnQixnQkFBZ0IsbUJBQW1CLE1BQU07QUFDL0Qsc0JBQU0sa0JBQWtCLGdCQUFnQixjQUFjLGlCQUFpQixNQUFNO0FBQzdFLG9CQUFJLFlBQVksRUFBRSwwQkFBMEIsc0JBQXNCLGVBQWUsZUFBZSxNQUM1RixHQUFHO0FBQ0w7QUFBQSxvQkFDSSx5REFBeUQsY0FBYyxlQUFlO0FBQUEsa0JBQUc7QUFBQSxnQkFDL0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRixLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0g7QUFBQSxVQUNGO0FBQ0Usa0JBQU0sSUFBSSxNQUFNLHFDQUFxQyxNQUFNLEVBQUU7QUFBQSxRQUNqRTtBQUVBLGNBQU0sbUJBQW1CLGdCQUFnQixRQUFRLE1BQU07QUFDdkQsWUFBSSxZQUFZLEVBQUUsNEJBQTRCLHNCQUFzQixnQkFBZ0IsTUFBTSxHQUFHO0FBQzNGLHlCQUFlLG9DQUFvQyxNQUFNLEdBQUc7QUFBQSxRQUM5RDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUcsSUFBTSxvQkFBb0IsQ0FBQyxZQUFrRTtBQUNsRyxZQUFNQyxRQUFPLFlBQVk7QUFDekIsVUFBSSx1QkFBdUI7QUFDM0IsWUFBTSxTQUFtQixDQUFDO0FBRTFCLFlBQU0saUJBQWtELFdBQVcsQ0FBQztBQUNwRSwyQkFBcUIsY0FBYztBQUVuQyxVQUFJO0FBQ0YsY0FBTSx5QkFBeUIseUJBQXlCLGVBQWUsMEJBQTBCLEtBQUs7QUFDdEcsY0FBTSxnQkFBZ0IsaUJBQWlCLGVBQWUsaUJBQWlCLFlBQVk7QUFDbkYsY0FBTSxrQkFDRixPQUFPLGVBQWUsVUFBVSxXQUFXLGdCQUFnQixlQUFlLE9BQU8sTUFBTSxJQUFJO0FBRS9GLGNBQU0sbUJBQW1CLGVBQWUsb0JBQW9CO0FBQzVELFlBQUksQ0FBQyxPQUFPLFVBQVUsZ0JBQWdCLEtBQUssbUJBQW1CLEtBQUssbUJBQW1CLEdBQUc7QUFDdkYsZ0JBQU0sSUFBSSxNQUFNLHFDQUFxQyxnQkFBZ0IsRUFBRTtBQUFBLFFBQ3pFO0FBRUEsY0FBTSxvQkFBb0IsZUFBZSxxQkFBcUI7QUFDOUQsWUFBSSxDQUFDLE9BQU8sVUFBVSxpQkFBaUIsS0FBSyxvQkFBb0IsS0FBSyxvQkFBb0IsR0FBRztBQUMxRixnQkFBTSxJQUFJLE1BQU0scUNBQXFDLGlCQUFpQixFQUFFO0FBQUEsUUFDMUU7QUFFQSxjQUFNLCtCQUErQixPQUFPLGVBQWUsMkJBQTJCLFdBQ2xGLGdCQUFnQixlQUFlLHdCQUF3QixNQUFNLElBQzdEO0FBRUosK0JBQXVCQSxNQUFLO0FBQUEsVUFDeEI7QUFBQSxVQUF3QixDQUFDLENBQUMsZUFBZTtBQUFBLFVBQW1CLENBQUMsQ0FBQyxlQUFlO0FBQUEsVUFBa0I7QUFBQSxVQUMvRixDQUFDLENBQUMsZUFBZTtBQUFBLFVBQWlCO0FBQUEsVUFBRztBQUFBLFVBQWlCO0FBQUEsVUFBa0I7QUFBQSxVQUN4RTtBQUFBLFFBQTRCO0FBQ2hDLFlBQUkseUJBQXlCLEdBQUc7QUFDOUIseUJBQWUsK0JBQWdDO0FBQUEsUUFDakQ7QUFFQSxZQUFJLGVBQWUsb0JBQW9CO0FBQ3JDLGdDQUFzQixzQkFBc0IsZUFBZSxvQkFBb0IsTUFBTTtBQUFBLFFBQ3ZGO0FBRUEsWUFBSSxlQUFlLHVCQUF1QixRQUFXO0FBQ25ELGNBQUksT0FBTyxlQUFlLHVCQUF1QixXQUFXO0FBQzFELGtCQUFNLElBQUksTUFBTSwrQ0FBK0MsZUFBZSxrQkFBa0IsRUFBRTtBQUFBLFVBQ3BHO0FBQ0EsZ0JBQU0sZ0JBQWdCLGdCQUFnQixzQkFBc0IsTUFBTTtBQUNsRSxnQkFBTSxrQkFBa0IsZ0JBQWdCLGVBQWUsbUJBQW1CLFNBQVMsR0FBRyxNQUFNO0FBQzVGLGNBQUlBLE1BQUssMEJBQTBCLHNCQUFzQixlQUFlLGVBQWUsTUFBTSxHQUFHO0FBQzlGO0FBQUEsY0FDSSw0REFBNEQsZUFBZSxrQkFBa0I7QUFBQSxZQUFHO0FBQUEsVUFDdEc7QUFBQSxRQUNGO0FBRUEsWUFBSSxlQUFlLHdCQUF3QjtBQUN6QyxxQkFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLE9BQU8sUUFBUSxlQUFlLHNCQUFzQixHQUFHO0FBQ2pGLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLG9CQUFNLElBQUksTUFBTSxrREFBa0QsSUFBSSxFQUFFO0FBQUEsWUFDMUU7QUFDQSxnQkFBSSxPQUFPLFVBQVUsWUFBWSxDQUFDLE9BQU8sVUFBVSxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQ3RFLG9CQUFNLElBQUksTUFBTSxpRUFBaUUsS0FBSyxFQUFFO0FBQUEsWUFDMUY7QUFDQSxrQkFBTSxhQUFhLGdCQUFnQixNQUFNLE1BQU07QUFDL0MsZ0JBQUlBLE1BQUssNkJBQTZCLHNCQUFzQixZQUFZLEtBQUssTUFBTSxHQUFHO0FBQ3BGLDZCQUFlLHdDQUF3QyxJQUFJLE1BQU0sS0FBSyxHQUFHO0FBQUEsWUFDM0U7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksZUFBZSxVQUFVLFFBQVc7QUFDdEMsOEJBQW9CLGVBQWUsT0FBTyxJQUFJLG9CQUFJLFFBQWlDLEdBQUcsQ0FBQyxLQUFLLFVBQVU7QUFDcEcsa0JBQU0sZ0JBQWdCLGdCQUFnQixLQUFLLE1BQU07QUFDakQsa0JBQU0sa0JBQWtCLGdCQUFnQixPQUFPLE1BQU07QUFFckQsZ0JBQUlBLE1BQUssMEJBQTBCLHNCQUFzQixlQUFlLGVBQWUsTUFBTSxHQUFHO0FBQzlGLDZCQUFlLHFDQUFxQyxHQUFHLE1BQU0sS0FBSyxHQUFHO0FBQUEsWUFDdkU7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBRUEsZUFBTyxDQUFDLHNCQUFzQixNQUFNO0FBQUEsTUFDdEMsU0FBUyxHQUFHO0FBQ1YsWUFBSSx5QkFBeUIsR0FBRztBQUM5QixVQUFBQSxNQUFLLDBCQUEwQixvQkFBb0I7QUFBQSxRQUNyRDtBQUNBLGVBQU8sUUFBUSxXQUFTQSxNQUFLLE1BQU0sS0FBSyxDQUFDO0FBQ3pDLGNBQU07QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3hOQSxJQXVDYSw0QkFxQ0EsNEJBc0NBLHNCQU1BLG1DQXFDQSxzQkFvQkEsMEJBT0E7QUF4TGI7QUFBQTtBQUFBO0FBdUNPLElBQU0sNkJBQTZCLENBQUMsU0FBMkI7QUFDcEUsY0FBUSxNQUFNO0FBQUEsUUFDWixLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUVUO0FBQ0UsZ0JBQU0sSUFBSSxNQUFNLDBCQUEwQixJQUFJLEVBQUU7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFLTyxJQUFNLDZCQUE2QixDQUFDLGNBQXFDO0FBQzlFLGNBQVEsV0FBVztBQUFBLFFBQ2pCLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBRVQ7QUFDRSxnQkFBTSxJQUFJLE1BQU0sMEJBQTBCLFNBQVMsRUFBRTtBQUFBLE1BQ3pEO0FBQUEsSUFDRjtBQU1PLElBQU0sdUJBQXVCLENBQUMsYUFDcEIsQ0FBQyxRQUFXLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsUUFBVyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsUUFBVyxRQUFXLE1BQVMsRUFBRSxRQUFRO0FBSzlHLElBQU0sb0NBQW9DLENBQUMsU0FFb0Q7QUFDaEcsY0FBUSxNQUFNO0FBQUEsUUFDWixLQUFLO0FBRUgsaUJBQU8sT0FBTyxpQkFBaUIsZUFBZSxhQUFhLE9BQU8sZUFBZTtBQUFBLFFBQ25GLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVDtBQUNFLGdCQUFNLElBQUksTUFBTSxxQkFBcUIsSUFBSSxFQUFFO0FBQUEsTUFDL0M7QUFBQSxJQUNGO0FBS0csSUFBTSx1QkFBdUIsQ0FBQyxhQUFrRTtBQUNyRyxjQUFRLFVBQVU7QUFBQSxRQUNoQixLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1Q7QUFDRSxnQkFBTSxJQUFJLE1BQU0sOEJBQThCLFFBQVEsRUFBRTtBQUFBLE1BQzVEO0FBQUEsSUFDRjtBQUtPLElBQU0sMkJBQTJCLENBQUMsU0FBeUQsU0FBUyxhQUN2RyxTQUFTLGFBQWEsU0FBUyxXQUFXLFNBQVMsV0FBVyxTQUFTLFlBQVksU0FBUyxXQUM1RixTQUFTO0FBS04sSUFBTSwyQkFBMkIsQ0FBQyxhQUEwQztBQUNqRixjQUFRLFVBQVU7QUFBQSxRQUNoQixLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1Q7QUFDRSxnQkFBTSxJQUFJLE1BQU0sOEJBQThCLFFBQVEsRUFBRTtBQUFBLE1BQzVEO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3ZNQSxJQUFhQztBQUFiO0FBQUE7QUFBTyxJQUFNQSxZQUFXO0FBQUE7QUFBQTs7O0FDQXhCLElBWWE7QUFaYjtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBUU8sSUFBTSxXQUFXLE9BQU0sU0FBc0U7QUFDbEcsVUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixZQUFJLE9BQU8sWUFBWSxlQUFlLFFBQVEsWUFBWSxRQUFRLFNBQVMsTUFBTTtBQUUvRSxjQUFJO0FBQ0YsbUJBQU8sSUFBSSxXQUFXLE1BQU1DLFVBQVMsSUFBSSxDQUFDO0FBQUEsVUFDNUMsU0FBUyxHQUFHO0FBQ1YsZ0JBQUksRUFBRSxTQUFTLHlCQUF5QjtBQUV0QyxvQkFBTSxTQUFZLGlCQUFpQixJQUFJO0FBQ3ZDLG9CQUFNLFNBQXVCLENBQUM7QUFDOUIsK0JBQWlCLFNBQVMsUUFBUTtBQUNoQyx1QkFBTyxLQUFLLEtBQUs7QUFBQSxjQUNuQjtBQUNBLHFCQUFPLElBQUksV0FBVyxPQUFPLE9BQU8sTUFBTSxDQUFDO0FBQUEsWUFDN0M7QUFDQSxrQkFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGLE9BQU87QUFFTCxnQkFBTSxXQUFXLE1BQU0sTUFBTSxJQUFJO0FBQ2pDLGNBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsa0JBQU0sSUFBSSxNQUFNLHNDQUFzQyxJQUFJLEVBQUU7QUFBQSxVQUM5RDtBQUNBLGdCQUFNLHNCQUFzQixTQUFTLFFBQVEsSUFBSSxnQkFBZ0I7QUFDakUsZ0JBQU0sV0FBVyxzQkFBc0IsU0FBUyxxQkFBcUIsRUFBRSxJQUFJO0FBQzNFLGNBQUksV0FBVyxZQUFzQjtBQUduQyxtQkFBTyxJQUFJLFdBQVcsTUFBTSxTQUFTLFlBQVksQ0FBQztBQUFBLFVBQ3BELE9BQU87QUFFTCxnQkFBSSxDQUFDLFNBQVMsTUFBTTtBQUNsQixvQkFBTSxJQUFJLE1BQU0sc0NBQXNDLElBQUkscUJBQXFCO0FBQUEsWUFDakY7QUFDQSxrQkFBTSxTQUFTLFNBQVMsS0FBSyxVQUFVO0FBRXZDLGdCQUFJO0FBQ0osZ0JBQUk7QUFFRix1QkFBUyxJQUFJLFlBQVksUUFBUTtBQUFBLFlBQ25DLFNBQVMsR0FBRztBQUNWLGtCQUFJLGFBQWEsWUFBWTtBQUUzQixzQkFBTSxRQUFRLEtBQUssS0FBSyxXQUFXLEtBQUs7QUFDeEMseUJBQVMsSUFBSSxZQUFZLE9BQU8sRUFBQyxTQUFTLE9BQU8sU0FBUyxNQUFLLENBQUMsRUFBRTtBQUFBLGNBQ3BFLE9BQU87QUFDTCxzQkFBTTtBQUFBLGNBQ1I7QUFBQSxZQUNGO0FBRUEsZ0JBQUksU0FBUztBQUViLG1CQUFPLE1BQU07QUFDWCxvQkFBTSxFQUFDLE1BQU0sTUFBSyxJQUFJLE1BQU0sT0FBTyxLQUFLO0FBQ3hDLGtCQUFJLE1BQU07QUFDUjtBQUFBLGNBQ0Y7QUFDQSxvQkFBTSxZQUFZLE1BQU07QUFDeEIsb0JBQU0sUUFBUSxJQUFJLFdBQVcsUUFBUSxRQUFRLFNBQVM7QUFDdEQsb0JBQU0sSUFBSSxLQUFLO0FBQ2Ysd0JBQVU7QUFBQSxZQUNaO0FBQ0EsbUJBQU8sSUFBSSxXQUFXLFFBQVEsR0FBRyxRQUFRO0FBQUEsVUFDM0M7QUFBQSxRQUNGO0FBQUEsTUFFRixXQUFXLGdCQUFnQixNQUFNO0FBQy9CLGVBQU8sSUFBSSxXQUFXLE1BQU0sS0FBSyxZQUFZLENBQUM7QUFBQSxNQUNoRCxXQUFXLGdCQUFnQixZQUFZO0FBQ3JDLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxlQUFPLElBQUksV0FBVyxJQUFJO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdEZBLElBK0RNLFNBV08sYUFXQSxRQXlGUCxnQkFPQSw0QkFxQk8sd0JBa0JBLGVBbUlBLGdCQXVCQSwwQkErRUEsS0E2T0EsY0FnQkE7QUFsc0JiO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW9EQSxJQUFNLFVBQVUsQ0FBQyxZQUFvQixpQkFBK0I7QUFDbEUsWUFBTSxZQUFZLFlBQVksRUFBRSxTQUFTLFlBQVksWUFBWTtBQUNqRSxVQUFJLGNBQWMsR0FBRztBQUNuQix1QkFBZSwrQkFBZ0M7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFNTyxJQUFNLGNBQWMsT0FBTUMsU0FBNEI7QUFFM0QsY0FBUUEsS0FBSSxLQUFLLFlBQWEscUJBQXFCQSxLQUFJLFFBQVEsQ0FBQztBQUFBLElBQ2xFO0FBUU8sSUFBTSxTQUFTLE9BQU1BLE1BQVUsV0FBa0M7QUFDdEUsVUFBSSxPQUE0QjtBQUU5QixjQUFNLFdBQVcsS0FBdUI7QUFFeEMsWUFBSSxXQUFXLFVBQVU7QUFFdkIsY0FBSSxPQUFPLGNBQWMsZUFBZSxDQUFDLFVBQVUsS0FBSztBQUN0RCxrQkFBTSxJQUFJLE1BQU0sZ0RBQWdEO0FBQUEsVUFDbEU7QUFFQSxjQUFJLFVBQVVBLEtBQUksT0FBTztBQUN6QixjQUFJLENBQUMsU0FBUztBQUVaLGtCQUFNLGtCQUFrQkEsS0FBSSxPQUFPO0FBQ25DLGdCQUFJLG9CQUFvQixVQUFhLG9CQUFvQixlQUNyRCxvQkFBb0Isb0JBQW9CO0FBQzFDLG9CQUFNLElBQUksTUFBTSxxQ0FBcUMsZUFBZSxHQUFHO0FBQUEsWUFDekU7QUFDQSxrQkFBTSx1QkFBdUJBLEtBQUksT0FBTztBQUN4QyxnQkFBSSx5QkFBeUIsVUFBYSxPQUFPLHlCQUF5QixXQUFXO0FBQ25GLG9CQUFNLElBQUksTUFBTSwwQ0FBMEMsb0JBQW9CLEdBQUc7QUFBQSxZQUNuRjtBQUNBLHNCQUFVLE1BQU0sVUFBVSxJQUFJLGVBQWUsRUFBQyxpQkFBaUIscUJBQW9CLENBQUM7QUFDcEYsZ0JBQUksQ0FBQyxTQUFTO0FBQ1osb0JBQU0sSUFBSTtBQUFBLGdCQUNOO0FBQUEsY0FDK0U7QUFBQSxZQUNyRjtBQUFBLFVBQ0YsT0FBTztBQUVMLGdCQUFJLE9BQU8sUUFBUSxXQUFXLFlBQVksT0FBTyxRQUFRLGFBQWEsWUFDbEUsT0FBTyxRQUFRLGtCQUFrQixZQUFZO0FBQy9DLG9CQUFNLElBQUksTUFBTSxrRkFBa0Y7QUFBQSxZQUNwRztBQUFBLFVBQ0Y7QUFFQSxjQUFJLENBQUNBLEtBQUksS0FBSyxNQUFNO0FBQ2xCLGtCQUFNLElBQUk7QUFBQSxjQUNOO0FBQUEsWUFBcUc7QUFBQSxVQUMzRztBQUVBLGdCQUFNLFNBQVMsVUFBVSxZQUFZLEdBQUdBLE1BQUssT0FBTztBQUFBLFFBQ3REO0FBQ0EsWUFBSSxXQUFXLFNBQVM7QUFFdEIsY0FBSSxPQUFPLGNBQWMsZUFBZSxDQUFFLFVBQXVDLElBQUk7QUFDbkYsa0JBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLFVBQ2pFO0FBRUEsZ0JBQU0sU0FBUyxTQUFTLFlBQVksR0FBR0EsSUFBRztBQUFBLFFBQzVDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFvQ0EsSUFBTSxpQkFBaUIsb0JBQUksSUFBNkI7QUFPeEQsSUFBTSw2QkFBNkIsQ0FBQyxrQkFBNEM7QUFDOUUsWUFBTUMsUUFBTyxZQUFZO0FBQ3pCLFlBQU0sUUFBUUEsTUFBSyxVQUFVO0FBQzdCLFVBQUk7QUFDRixjQUFNLGFBQWFBLE1BQUssV0FBVyxDQUFDO0FBQ3BDLGNBQU0sWUFBWUEsTUFBSyx3QkFBd0IsZUFBZSxZQUFZLGFBQWEsQ0FBQztBQUN4RixZQUFJLGNBQWMsR0FBRztBQUNuQix5QkFBZSx1Q0FBd0M7QUFBQSxRQUN6RDtBQUNBLGVBQU8sQ0FBQ0EsTUFBSyxPQUFPLGFBQWEsQ0FBQyxHQUFHQSxNQUFLLE9BQU8sYUFBYSxJQUFJLENBQUMsQ0FBQztBQUFBLE1BQ3RFLFVBQUU7QUFDQSxRQUFBQSxNQUFLLGFBQWEsS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQVFPLElBQU0seUJBQXlCLENBQUMsVUFBd0M7QUFDN0UsWUFBTUEsUUFBTyxZQUFZO0FBQ3pCLFlBQU0sa0JBQWtCQSxNQUFLLFFBQVEsTUFBTSxVQUFVO0FBQ3JELFVBQUksb0JBQW9CLEdBQUc7QUFDekIsY0FBTSxJQUFJLE1BQU0sK0RBQStELE1BQU0sVUFBVSxHQUFHO0FBQUEsTUFDcEc7QUFDQSxNQUFBQSxNQUFLLE9BQU8sSUFBSSxPQUFPLGVBQWU7QUFDdEMsYUFBTyxDQUFDLGlCQUFpQixNQUFNLFVBQVU7QUFBQSxJQUMzQztBQVVPLElBQU0sZ0JBQWdCLE9BQ3pCLFdBQ0EsWUFBb0Y7QUFDdEYsVUFBSSxpQkFBeUI7QUFDN0IsWUFBTUEsUUFBTyxZQUFZO0FBRXpCLFVBQUksTUFBTSxRQUFRLFNBQVMsR0FBRztBQUU1QixTQUFDLGlCQUFpQixlQUFlLElBQUk7QUFBQSxNQUN2QyxXQUFXLFVBQVUsV0FBV0EsTUFBSyxPQUFPLFFBQVE7QUFFbEQsU0FBQyxpQkFBaUIsZUFBZSxJQUFJLENBQUMsVUFBVSxZQUFZLFVBQVUsVUFBVTtBQUFBLE1BQ2xGLE9BQU87QUFFTCxTQUFDLGlCQUFpQixlQUFlLElBQUksdUJBQXVCLFNBQVM7QUFBQSxNQUN2RTtBQUVBLFVBQUksZ0JBQWdCO0FBQ3BCLFVBQUksdUJBQXVCO0FBQzNCLFVBQUksa0JBQWtCO0FBQ3RCLFVBQUksU0FBbUIsQ0FBQztBQUN4QixZQUFNLHdCQUF3QixDQUFDO0FBQy9CLFlBQU0seUJBQXlCLENBQUM7QUFFaEMsVUFBSTtBQUNGLFNBQUMsc0JBQXNCLE1BQU0sSUFBSSxrQkFBa0IsT0FBTztBQUUxRCxZQUFJLFNBQVMsZ0JBQWdCQSxNQUFLLG1CQUFtQjtBQUNuRCxnQkFBTSxrQkFBa0IsQ0FBQztBQUN6QixxQkFBVyxRQUFRLFFBQVEsY0FBYztBQUN2QyxrQkFBTSxPQUFPLE9BQU8sU0FBUyxXQUFXLE9BQU8sS0FBSztBQUNwRCw0QkFBZ0IsS0FBSyxTQUFTLE9BQU8sU0FBUyxXQUFXLE9BQU8sS0FBSyxJQUFJLEVBQUUsS0FBSyxVQUFRO0FBQ3RGLGNBQUFBLE1BQUssa0JBQW1CLE1BQU0sSUFBSTtBQUFBLFlBQ3BDLENBQUMsQ0FBQztBQUFBLFVBQ0o7QUFHQSxnQkFBTSxRQUFRLElBQUksZUFBZTtBQUFBLFFBQ25DO0FBRUEsd0JBQWdCLE1BQU1BLE1BQUssa0JBQWtCLGlCQUFpQixpQkFBaUIsb0JBQW9CO0FBQ25HLFlBQUksa0JBQWtCLEdBQUc7QUFDdkIseUJBQWUseUJBQTBCO0FBQUEsUUFDM0M7QUFFQSxjQUFNLENBQUMsWUFBWSxXQUFXLElBQUksMkJBQTJCLGFBQWE7QUFFMUUsY0FBTSxxQkFBcUIsQ0FBQyxDQUFDLFNBQVM7QUFFdEMsY0FBTSxhQUFhLENBQUM7QUFDcEIsY0FBTSxjQUFjLENBQUM7QUFDckIsY0FBTSwyQkFBd0UsQ0FBQztBQUMvRSxpQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLEtBQUs7QUFDbkMsZ0JBQU0sT0FBT0EsTUFBSyxpQkFBaUIsZUFBZSxDQUFDO0FBQ25ELGNBQUksU0FBUyxHQUFHO0FBQ2QsMkJBQWUsMEJBQTJCO0FBQUEsVUFDNUM7QUFDQSxnQ0FBc0IsS0FBSyxJQUFJO0FBQy9CLHFCQUFXLEtBQUtBLE1BQUssYUFBYSxJQUFJLENBQUM7QUFBQSxRQUN6QztBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsS0FBSztBQUNwQyxnQkFBTSxPQUFPQSxNQUFLLGtCQUFrQixlQUFlLENBQUM7QUFDcEQsY0FBSSxTQUFTLEdBQUc7QUFDZCwyQkFBZSwyQkFBNEI7QUFBQSxVQUM3QztBQUNBLGlDQUF1QixLQUFLLElBQUk7QUFDaEMsZ0JBQU0sYUFBYUEsTUFBSyxhQUFhLElBQUk7QUFDekMsc0JBQVksS0FBSyxVQUFVO0FBRTNCLGNBQUksT0FBNEI7QUFDOUIsZ0JBQUksc0JBQXNCLFNBQVMsNEJBQTRCLFFBQVc7QUFDeEUsdUNBQXlCLEtBQUssWUFBWTtBQUMxQztBQUFBLFlBQ0Y7QUFDQSxrQkFBTSxXQUFXLE9BQU8sU0FBUyw0QkFBNEIsV0FDekQsUUFBUSwwQkFDUixTQUFTLDBCQUEwQixVQUFVLEtBQUs7QUFDdEQsZ0JBQUksYUFBYSxTQUFTLGFBQWEsZ0JBQWdCLGFBQWEsY0FBYztBQUNoRixvQkFBTSxJQUFJLE1BQU0sNENBQTRDLFFBQVEsR0FBRztBQUFBLFlBQ3pFO0FBQ0EsZ0JBQUksc0JBQXNCLGFBQWEsY0FBYztBQUNuRCxvQkFBTSxJQUFJLE1BQU0sNENBQ1osUUFBUSw0RUFBNEU7QUFBQSxZQUMxRjtBQUNBLHFDQUF5QixLQUFLLFFBQVE7QUFBQSxVQUN4QztBQUFBLFFBQ0Y7QUFHQSxZQUFJLGVBQW9DO0FBQ3hDLFlBQUksT0FBc0Y7QUFDeEYsNEJBQWtCQSxNQUFLLGtCQUFrQixhQUFhO0FBQ3RELGNBQUksb0JBQW9CLEdBQUc7QUFDekIsMkJBQWUsMEJBQTJCO0FBQUEsVUFDNUM7QUFFQSx5QkFBZTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1I7QUFBQSxZQUNBLGlDQUFpQyx5QkFBeUIsSUFBSSxPQUFLLHlCQUF5QixDQUFDLENBQUM7QUFBQSxVQUNoRztBQUFBLFFBQ0Y7QUFFQSx1QkFBZTtBQUFBLFVBQ1g7QUFBQSxVQUNBLENBQUMsZUFBZSx1QkFBdUIsd0JBQXdCLGNBQWMsb0JBQW9CLEtBQUs7QUFBQSxRQUFDO0FBQzNHLGVBQU8sQ0FBQyxlQUFlLFlBQVksV0FBVztBQUFBLE1BQ2hELFNBQVMsR0FBRztBQUNWLDhCQUFzQixRQUFRLFNBQU9BLE1BQUssU0FBUyxHQUFHLENBQUM7QUFDdkQsK0JBQXVCLFFBQVEsU0FBT0EsTUFBSyxTQUFTLEdBQUcsQ0FBQztBQUV4RCxZQUFJLG9CQUFvQixHQUFHO0FBQ3pCLFVBQUFBLE1BQUssbUJBQW1CLGVBQWU7QUFBQSxRQUN6QztBQUVBLFlBQUksa0JBQWtCLEdBQUc7QUFDdkIsVUFBQUEsTUFBSyxtQkFBbUIsYUFBYTtBQUFBLFFBQ3ZDO0FBQ0EsY0FBTTtBQUFBLE1BQ1IsVUFBRTtBQUNBLFFBQUFBLE1BQUssTUFBTSxlQUFlO0FBQzFCLFlBQUkseUJBQXlCLEdBQUc7QUFDOUIsVUFBQUEsTUFBSywwQkFBMEIsb0JBQW9CO0FBQUEsUUFDckQ7QUFDQSxlQUFPLFFBQVEsV0FBU0EsTUFBSyxNQUFNLEtBQUssQ0FBQztBQUd6QyxRQUFBQSxNQUFLLHNCQUFzQjtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUVPLElBQU0saUJBQWlCLENBQUMsY0FBNEI7QUFDekQsWUFBTUEsUUFBTyxZQUFZO0FBQ3pCLFlBQU0sVUFBVSxlQUFlLElBQUksU0FBUztBQUM1QyxVQUFJLENBQUMsU0FBUztBQUNaLGNBQU0sSUFBSSxNQUFNLCtDQUErQyxTQUFTLEVBQUU7QUFBQSxNQUM1RTtBQUNBLFlBQU0sQ0FBQyxlQUFlLHVCQUF1Qix3QkFBd0IsZ0JBQWdCLGtCQUFrQixJQUFJO0FBRTNHLFVBQUksZ0JBQWdCO0FBQ2xCLFlBQUksb0JBQW9CO0FBQ3RCLFVBQUFBLE1BQUssc0JBQXNCLGVBQWUsTUFBTTtBQUFBLFFBQ2xEO0FBQ0EsUUFBQUEsTUFBSyxtQkFBbUIsZUFBZSxNQUFNO0FBQUEsTUFDL0M7QUFFQSxNQUFBQSxNQUFLLHVCQUF1QixTQUFTO0FBRXJDLDRCQUFzQixRQUFRLFNBQU9BLE1BQUssU0FBUyxHQUFHLENBQUM7QUFDdkQsNkJBQXVCLFFBQVEsU0FBT0EsTUFBSyxTQUFTLEdBQUcsQ0FBQztBQUN4RCxNQUFBQSxNQUFLLG1CQUFtQixhQUFhO0FBQ3JDLHFCQUFlLE9BQU8sU0FBUztBQUFBLElBQ2pDO0FBRU8sSUFBTSwyQkFDVCxDQUFDLFFBQTZCLGVBQXlCLFFBQWtCLFdBQW1CLE9BQzNGLHFCQUFxQixVQUFnQjtBQUNwQyxVQUFJLENBQUMsUUFBUTtBQUNYLHNCQUFjLEtBQUssQ0FBQztBQUNwQjtBQUFBLE1BQ0Y7QUFFQSxZQUFNQSxRQUFPLFlBQVk7QUFFekIsWUFBTSxXQUFXLE9BQU8sQ0FBQztBQUN6QixZQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLFlBQU0sV0FBVyxPQUFPLENBQUM7QUFFekIsVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJLGFBQWEsWUFBWSxhQUFhLGNBQWM7QUFDdEQsY0FBTSxJQUFJLE1BQU0sd0NBQXdDO0FBQUEsTUFDMUQ7QUFFQSxVQUFJLHNCQUFzQixhQUFhLGNBQWM7QUFDbkQsY0FBTSxJQUFJO0FBQUEsVUFDTiwyREFBMkQsS0FBSztBQUFBLFFBQW1DO0FBQUEsTUFDekc7QUFFQSxVQUFJLGFBQWEsY0FBYztBQUM3QixjQUFNLFlBQVksT0FBTyxDQUFDLEVBQUU7QUFDNUIsY0FBTSxxQkFBcUIscUJBQXFCLDJCQUEyQixRQUFRLENBQUM7QUFDcEYseUJBQWlCLEtBQUssT0FBTyxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJO0FBRW5ELGNBQU0saUJBQWlCQSxNQUFLO0FBQzVCLFlBQUksQ0FBQyxnQkFBZ0I7QUFDbkIsZ0JBQU0sSUFBSSxNQUFNLHFFQUFxRTtBQUFBLFFBQ3ZGO0FBQ0Esa0JBQVUsZUFBZSxXQUFXLE9BQU8sV0FBVyxjQUFjO0FBQUEsTUFDdEUsT0FBTztBQUNMLGNBQU0sT0FBTyxPQUFPLENBQUM7QUFFckIsWUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBRXZCLDJCQUFpQixJQUFJLEtBQUs7QUFDMUIsb0JBQVVBLE1BQUssUUFBUSxjQUFjO0FBQ3JDLGlCQUFPLEtBQUssT0FBTztBQUNuQixjQUFJLFlBQVksVUFBVTtBQUMxQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNwQyxnQkFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLFVBQVU7QUFDL0Isb0JBQU0sSUFBSSxVQUFVLHdCQUF3QixDQUFDLGtCQUFrQjtBQUFBLFlBQ2pFO0FBQ0EsWUFBQUEsTUFBSyxRQUFRLFdBQVcsSUFBSSxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUFBLFVBQzdEO0FBQUEsUUFDRixPQUFPO0FBQ0wsMkJBQWlCLEtBQUs7QUFDdEIsb0JBQVVBLE1BQUssUUFBUSxjQUFjO0FBQ3JDLGlCQUFPLEtBQUssT0FBTztBQUNuQixVQUFBQSxNQUFLLE9BQU8sSUFBSSxJQUFJLFdBQVcsS0FBSyxRQUFRLEtBQUssWUFBWSxjQUFjLEdBQUcsT0FBTztBQUFBLFFBQ3ZGO0FBQUEsTUFDRjtBQUVBLFlBQU0sUUFBUUEsTUFBSyxVQUFVO0FBQzdCLFlBQU0sYUFBYUEsTUFBSyxXQUFXLElBQUksS0FBSyxNQUFNO0FBQ2xELFVBQUk7QUFDRixZQUFJLFdBQVcsYUFBYTtBQUM1QixhQUFLLFFBQVEsT0FBS0EsTUFBSyxPQUFPLFVBQVUsSUFBSSxDQUFDO0FBQzdDLGNBQU1DLFVBQVNELE1BQUs7QUFBQSxVQUNoQiwyQkFBMkIsUUFBUTtBQUFBLFVBQUc7QUFBQSxVQUFTO0FBQUEsVUFBZ0I7QUFBQSxVQUFZLEtBQUs7QUFBQSxVQUNoRix5QkFBeUIsUUFBUTtBQUFBLFFBQUM7QUFDdEMsWUFBSUMsWUFBVyxHQUFHO0FBQ2hCLHlCQUFlLGlEQUFpRCxTQUFTLFdBQVcsS0FBSyxHQUFHO0FBQUEsUUFDOUY7QUFDQSxzQkFBYyxLQUFLQSxPQUFNO0FBQUEsTUFDM0IsVUFBRTtBQUNBLFFBQUFELE1BQUssYUFBYSxLQUFLO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBS0csSUFBTSxNQUFNLE9BQ2YsV0FBbUIsY0FBd0IsY0FBZ0MsZUFDM0UsZUFBMkMsWUFBb0U7QUFDakgsWUFBTUEsUUFBTyxZQUFZO0FBQ3pCLFlBQU0sVUFBVSxlQUFlLElBQUksU0FBUztBQUM1QyxVQUFJLENBQUMsU0FBUztBQUNaLGNBQU0sSUFBSSxNQUFNLDZDQUE2QyxTQUFTLEVBQUU7QUFBQSxNQUMxRTtBQUNBLFlBQU0sZ0JBQWdCLFFBQVEsQ0FBQztBQUMvQixZQUFNLHdCQUF3QixRQUFRLENBQUM7QUFDdkMsWUFBTSx5QkFBeUIsUUFBUSxDQUFDO0FBQ3hDLFlBQU0saUJBQWlCLFFBQVEsQ0FBQztBQUNoQyxZQUFNLHFCQUFxQixRQUFRLENBQUM7QUFDcEMsWUFBTSxtQkFBbUIsUUFBUSxDQUFDO0FBRWxDLFlBQU0sYUFBYSxhQUFhO0FBQ2hDLFlBQU0sY0FBYyxjQUFjO0FBRWxDLFVBQUksbUJBQW1CO0FBQ3ZCLFVBQUksbUJBQTZCLENBQUM7QUFFbEMsWUFBTSxxQkFBK0IsQ0FBQztBQUN0QyxZQUFNLHNCQUFnQyxDQUFDO0FBQ3ZDLFlBQU0sb0JBQThCLENBQUM7QUFFckMsWUFBTSxpQkFBaUJBLE1BQUssVUFBVTtBQUN0QyxZQUFNLG9CQUFvQkEsTUFBSyxXQUFXLGFBQWEsQ0FBQztBQUN4RCxZQUFNLG1CQUFtQkEsTUFBSyxXQUFXLGFBQWEsQ0FBQztBQUN2RCxZQUFNLHFCQUFxQkEsTUFBSyxXQUFXLGNBQWMsQ0FBQztBQUMxRCxZQUFNLG9CQUFvQkEsTUFBSyxXQUFXLGNBQWMsQ0FBQztBQUV6RCxVQUFJO0FBQ0YsU0FBQyxrQkFBa0IsZ0JBQWdCLElBQUksY0FBYyxPQUFPO0FBRzVELGlCQUFTLElBQUksR0FBRyxJQUFJLFlBQVksS0FBSztBQUNuQztBQUFBLFlBQ0ksYUFBYSxDQUFDO0FBQUEsWUFBRztBQUFBLFlBQW9CO0FBQUEsWUFBbUI7QUFBQSxZQUFXLGFBQWEsQ0FBQztBQUFBLFlBQUc7QUFBQSxVQUFrQjtBQUFBLFFBQzVHO0FBR0EsaUJBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQ3BDO0FBQUEsWUFDSSxjQUFjLENBQUM7QUFBQSxZQUFHO0FBQUEsWUFBcUI7QUFBQSxZQUFtQjtBQUFBLFlBQVcsYUFBYSxjQUFjLENBQUM7QUFBQSxZQUNqRztBQUFBLFVBQWtCO0FBQUEsUUFDeEI7QUFFQSxZQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsWUFBSSxrQkFBa0IsbUJBQW1CO0FBQ3pDLFlBQUksb0JBQW9CLHFCQUFxQjtBQUM3QyxZQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsaUJBQVMsSUFBSSxHQUFHLElBQUksWUFBWSxLQUFLO0FBQ25DLFVBQUFBLE1BQUssUUFBUSxrQkFBa0IsSUFBSSxtQkFBbUIsQ0FBQztBQUN2RCxVQUFBQSxNQUFLLFFBQVEsaUJBQWlCLElBQUksc0JBQXNCLGFBQWEsQ0FBQyxDQUFDO0FBQUEsUUFDekU7QUFDQSxpQkFBUyxJQUFJLEdBQUcsSUFBSSxhQUFhLEtBQUs7QUFDcEMsVUFBQUEsTUFBSyxRQUFRLG1CQUFtQixJQUFJLG9CQUFvQixDQUFDO0FBQ3pELFVBQUFBLE1BQUssUUFBUSxrQkFBa0IsSUFBSSx1QkFBdUIsY0FBYyxDQUFDLENBQUM7QUFBQSxRQUM1RTtBQUVBLFlBQUksT0FBbUU7QUFDckUsZ0JBQU0sRUFBQyxRQUFRLDBCQUEwQixnQ0FBK0IsSUFBSTtBQUU1RSxjQUFJLHNCQUFzQixXQUFXLFlBQVk7QUFDL0Msa0JBQU0sSUFBSSxNQUFNLDJCQUNaLFVBQVUsNERBQTRELHNCQUFzQixNQUFNLElBQUk7QUFBQSxVQUM1RztBQUdBLG1CQUFTLElBQUksR0FBRyxJQUFJLFlBQVksS0FBSztBQUNuQyxrQkFBTSxRQUFRLGFBQWEsQ0FBQztBQUM1QixrQkFBTUUsYUFBWSxNQUFNRixNQUFLLGNBQWMsUUFBUSxzQkFBc0IsS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUM7QUFDdEcsZ0JBQUlFLGVBQWMsR0FBRztBQUNuQiw2QkFBZSxvQkFBb0IsQ0FBQyxpQkFBaUIsU0FBUyxHQUFHO0FBQUEsWUFDbkU7QUFBQSxVQUNGO0FBR0EsbUJBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQ3BDLGtCQUFNLFFBQVEsY0FBYyxDQUFDO0FBQzdCLGtCQUFNLFdBQVcsY0FBYyxDQUFDLElBQUksQ0FBQztBQUVyQyxnQkFBSSxVQUFVO0FBRVosb0JBQU1BLGFBQVlGLE1BQUssZUFBZSxRQUFRLHVCQUF1QixLQUFLLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDO0FBQ3RHLGtCQUFJRSxlQUFjLEdBQUc7QUFDbkIsK0JBQWUsbUNBQW1DLENBQUMsaUJBQWlCLFNBQVMsR0FBRztBQUFBLGNBQ2xGO0FBQUEsWUFDRixPQUFPO0FBRUwsb0JBQU1BLGFBQ0ZGLE1BQUssZUFBZSxRQUFRLHVCQUF1QixLQUFLLEdBQUcsR0FBRyxnQ0FBZ0MsS0FBSyxDQUFDO0FBQ3hHLGtCQUFJRSxlQUFjLEdBQUc7QUFDbkIsK0JBQWUscUJBQXFCLENBQUMsUUFBUSx5QkFBeUIsQ0FBQyxDQUFDLGdCQUFnQixTQUFTLEdBQUc7QUFBQSxjQUN0RztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0EseUJBQWU7QUFBQSxZQUNYO0FBQUEsWUFDQSxDQUFDLGVBQWUsdUJBQXVCLHdCQUF3QixnQkFBZ0Isb0JBQW9CLElBQUk7QUFBQSxVQUFDO0FBQUEsUUFDOUc7QUFFQSxRQUFBRixNQUFLLGlCQUFpQixhQUFhO0FBQ25DLFlBQUk7QUFDSixZQUFJLE9BQThDO0FBQ2hELHNCQUFZLE1BQU1BLE1BQUs7QUFBQSxZQUNuQjtBQUFBLFlBQWUsZUFBZTtBQUFBLFlBQVE7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxVQUFnQjtBQUFBLFFBQzdGLE9BQU87QUFDTCxzQkFBWSxNQUFNQSxNQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUFlO0FBQUEsWUFBa0I7QUFBQSxZQUFtQjtBQUFBLFlBQVk7QUFBQSxZQUFtQjtBQUFBLFlBQ25GO0FBQUEsWUFBb0I7QUFBQSxVQUFnQjtBQUFBLFFBQzFDO0FBRUEsWUFBSSxjQUFjLEdBQUc7QUFDbkIseUJBQWUsMEJBQTBCO0FBQUEsUUFDM0M7QUFFQSxjQUFNLFNBQTJCLENBQUM7QUFFbEMsaUJBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQ3BDLGdCQUFNLFNBQVNBLE1BQUssUUFBUSxxQkFBcUIsSUFBSSxDQUFDO0FBQ3RELGNBQUksV0FBVyxvQkFBb0IsQ0FBQyxHQUFHO0FBRXJDLG1CQUFPLEtBQUssY0FBYyxDQUFDLENBQUU7QUFDN0I7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sMkJBQTJCQSxNQUFLLFVBQVU7QUFFaEQsZ0JBQU0sbUJBQW1CQSxNQUFLLFdBQVcsSUFBSSxDQUFDO0FBRTlDLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksTUFBNkIsYUFBYTtBQUM5QyxjQUFJO0FBQ0Ysa0JBQU1FLGFBQVlGLE1BQUs7QUFBQSxjQUNuQjtBQUFBLGNBQVE7QUFBQSxjQUFrQixtQkFBbUI7QUFBQSxjQUFHLG1CQUFtQjtBQUFBLGNBQUcsbUJBQW1CO0FBQUEsWUFBRTtBQUMvRixnQkFBSUUsZUFBYyxHQUFHO0FBQ25CLDZCQUFlLDRDQUE0QyxDQUFDLEdBQUc7QUFBQSxZQUNqRTtBQUNBLGdCQUFJLGtCQUFrQixtQkFBbUI7QUFDekMsa0JBQU0sV0FBV0YsTUFBSyxRQUFRLGlCQUFpQjtBQUMvQyx5QkFBYUEsTUFBSyxRQUFRLGlCQUFpQjtBQUMzQyxrQkFBTSxhQUFhQSxNQUFLLFFBQVEsaUJBQWlCO0FBQ2pELGtCQUFNLGFBQWFBLE1BQUssUUFBUSxpQkFBaUI7QUFDakQsa0JBQU0sT0FBTyxDQUFDO0FBQ2QscUJBQVNHLEtBQUksR0FBR0EsS0FBSSxZQUFZQSxNQUFLO0FBQ25DLG1CQUFLLEtBQUtILE1BQUssUUFBUSxhQUFhLElBQUlHLEVBQUMsQ0FBQztBQUFBLFlBQzVDO0FBQ0EsWUFBQUgsTUFBSyxTQUFTLFVBQVU7QUFFeEIsa0JBQU0sT0FBTyxLQUFLLE9BQU8sQ0FBQyxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUM7QUFDM0MsbUJBQU8sMkJBQTJCLFFBQVE7QUFFMUMsa0JBQU0sb0JBQW9CLGdCQUFnQix5QkFBeUIsY0FBYyxDQUFDLENBQUM7QUFFbkYsZ0JBQUksU0FBUyxVQUFVO0FBQ3JCLGtCQUFJLHNCQUFzQixjQUFjO0FBQ3RDLHNCQUFNLElBQUksTUFBTSx3Q0FBd0M7QUFBQSxjQUMxRDtBQUNBLG9CQUFNLGFBQXVCLENBQUM7QUFDOUIsa0JBQUksWUFBWSxhQUFhO0FBQzdCLHVCQUFTRyxLQUFJLEdBQUdBLEtBQUksTUFBTUEsTUFBSztBQUM3QixzQkFBTSxTQUFTSCxNQUFLLFFBQVEsV0FBVztBQUN2QyxzQkFBTSxpQkFBaUJHLE9BQU0sT0FBTyxJQUFJLFNBQVlILE1BQUssUUFBUSxTQUFTLElBQUk7QUFDOUUsMkJBQVcsS0FBS0EsTUFBSyxhQUFhLFFBQVEsY0FBYyxDQUFDO0FBQUEsY0FDM0Q7QUFDQSxxQkFBTyxLQUFLLENBQUMsTUFBTSxNQUFNLFlBQVksS0FBSyxDQUFDO0FBQUEsWUFDN0MsT0FBTztBQUdMLGtCQUFJLHNCQUFzQixnQkFBZ0IsT0FBTyxHQUFHO0FBQ2xELHNCQUFNLFlBQVlBLE1BQUs7QUFDdkIsb0JBQUksQ0FBQyxXQUFXO0FBQ2Qsd0JBQU0sSUFBSSxNQUFNLHVFQUF1RTtBQUFBLGdCQUN6RjtBQUNBLHNCQUFNLFlBQVksVUFBVSxVQUFVO0FBQ3RDLHNCQUFNLGNBQWMscUJBQXFCLFFBQVE7QUFDakQsb0JBQUksZ0JBQWdCLFVBQWEsQ0FBQyx5QkFBeUIsSUFBSSxHQUFHO0FBQ2hFLHdCQUFNLElBQUksTUFBTSwwQkFBMEIsSUFBSSxFQUFFO0FBQUEsZ0JBQ2xEO0FBR0EsbUNBQW1CO0FBRW5CLHVCQUFPLEtBQUs7QUFBQSxrQkFDVjtBQUFBLGtCQUFNO0FBQUEsa0JBQU07QUFBQSxvQkFDVjtBQUFBLG9CQUNBLFVBQVVBLE1BQUsscUJBQXNCLFdBQVcsT0FBTyxhQUFhLElBQUk7QUFBQSxvQkFDeEUsU0FBUyxNQUFNO0FBQ2Isc0JBQUFBLE1BQUssa0JBQWtCLE1BQU07QUFBQSxvQkFDL0I7QUFBQSxrQkFDRjtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0YsQ0FBQztBQUFBLGNBQ0gsT0FBTztBQUNMLHNCQUFNLHdCQUF3QixrQ0FBa0MsSUFBSTtBQUNwRSxzQkFBTSxPQUFPLElBQUksc0JBQXNCLElBQUk7QUFDM0Msb0JBQUksV0FBVyxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUssVUFBVSxFQUN2RCxJQUFJQSxNQUFLLE9BQU8sU0FBUyxZQUFZLGFBQWEsS0FBSyxVQUFVLENBQUM7QUFDdkUsdUJBQU8sS0FBSyxDQUFDLE1BQU0sTUFBTSxNQUFNLEtBQUssQ0FBQztBQUFBLGNBQ3ZDO0FBQUEsWUFDRjtBQUFBLFVBQ0YsVUFBRTtBQUNBLFlBQUFBLE1BQUssYUFBYSx3QkFBd0I7QUFDMUMsZ0JBQUksU0FBUyxZQUFZLFlBQVk7QUFDbkMsY0FBQUEsTUFBSyxNQUFNLFVBQVU7QUFBQSxZQUN2QjtBQUNBLGdCQUFJLENBQUMsa0JBQWtCO0FBQ3JCLGNBQUFBLE1BQUssa0JBQWtCLE1BQU07QUFBQSxZQUMvQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxrQkFBa0IsQ0FBQyxvQkFBb0I7QUFDekMsVUFBQUEsTUFBSyxzQkFBc0IsZUFBZSxNQUFNO0FBQ2hELHlCQUFlO0FBQUEsWUFDWDtBQUFBLFlBQ0EsQ0FBQyxlQUFlLHVCQUF1Qix3QkFBd0IsZ0JBQWdCLG9CQUFvQixLQUFLO0FBQUEsVUFBQztBQUFBLFFBQy9HO0FBQ0EsZUFBTztBQUFBLE1BQ1QsVUFBRTtBQUNBLFFBQUFBLE1BQUssYUFBYSxjQUFjO0FBRWhDLDJCQUFtQixRQUFRLE9BQUtBLE1BQUssa0JBQWtCLENBQUMsQ0FBQztBQUN6RCw0QkFBb0IsUUFBUSxPQUFLQSxNQUFLLGtCQUFrQixDQUFDLENBQUM7QUFDMUQsMEJBQWtCLFFBQVEsT0FBS0EsTUFBSyxNQUFNLENBQUMsQ0FBQztBQUU1QyxZQUFJLHFCQUFxQixHQUFHO0FBQzFCLFVBQUFBLE1BQUssc0JBQXNCLGdCQUFnQjtBQUFBLFFBQzdDO0FBQ0EseUJBQWlCLFFBQVEsT0FBS0EsTUFBSyxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQzdDO0FBQUEsSUFDRjtBQUtPLElBQU0sZUFBZSxDQUFDLGNBQTRCO0FBQ3ZELFlBQU1BLFFBQU8sWUFBWTtBQUN6QixZQUFNLFVBQVUsZUFBZSxJQUFJLFNBQVM7QUFDNUMsVUFBSSxDQUFDLFNBQVM7QUFDWixjQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxNQUN0QztBQUNBLFlBQU0sZ0JBQWdCLFFBQVEsQ0FBQztBQUcvQixZQUFNLGtCQUFrQkEsTUFBSyxpQkFBaUIsYUFBYTtBQUMzRCxVQUFJLG9CQUFvQixHQUFHO0FBQ3pCLHVCQUFlLGlDQUFrQztBQUFBLE1BQ25EO0FBQ0EsTUFBQUEsTUFBSyxTQUFTLGVBQWU7QUFBQSxJQUMvQjtBQUVPLElBQU0sNkJBQTZCLENBQUMsWUFBc0U7QUFDL0csWUFBTSxVQUE2QixDQUFDO0FBQ3BDLGlCQUFXLFVBQVUsU0FBUztBQUM1QixjQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxNQUFNLFFBQVEsSUFBSSxLQUFLLFlBQVksTUFBTTtBQUM1QyxrQkFBUSxLQUFLLEtBQUssTUFBTTtBQUFBLFFBQzFCO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDM3NCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxJQVNNLFNBQ0YsYUFDQUksZUFDQUMsY0FDQUMsVUFHQSxtQkFDRSxpQkFFQSxrQkFTQSxjQU1BLHNCQThCQSxXQUVPLG9DQXNEQSxpQkFhQUMseUJBYUFDLGdCQXVCQUMsaUJBYUFDLE1BeUJBQztBQS9NYjtBQUFBO0FBQUE7QUFHQTtBQUdBO0FBQ0E7QUFFQSxJQUFNLFVBQVUsTUFBZSxDQUFDLENBQUNDLEtBQUksS0FBSyxTQUFTLE9BQU8sYUFBYTtBQUV2RSxJQUFJUixnQkFBZTtBQUNuQixJQUFJQyxlQUFjO0FBQ2xCLElBQUlDLFdBQVU7QUFJZCxJQUFNLGtCQUFpRixvQkFBSSxJQUFJO0FBRS9GLElBQU0sbUJBQW1CLENBQUMsTUFBOEIsY0FBK0M7QUFDckcsWUFBTSxRQUFRLGdCQUFnQixJQUFJLElBQUk7QUFDdEMsVUFBSSxPQUFPO0FBQ1QsY0FBTSxLQUFLLFNBQVM7QUFBQSxNQUN0QixPQUFPO0FBQ0wsd0JBQWdCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUFBLE1BQ3ZDO0FBQUEsSUFDRjtBQUVBLElBQU0sZUFBZSxNQUFZO0FBQy9CLFVBQUlGLGlCQUFnQixDQUFDQyxnQkFBZUMsWUFBVyxDQUFDLGFBQWE7QUFDM0QsY0FBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBRUEsSUFBTSx1QkFBdUIsQ0FBQyxPQUEyQztBQUN2RSxjQUFRLEdBQUcsS0FBSyxNQUFNO0FBQUEsUUFDcEIsS0FBSztBQUNILFVBQUFGLGdCQUFlO0FBQ2YsY0FBSSxHQUFHLEtBQUssS0FBSztBQUNmLFlBQUFFLFdBQVU7QUFDViw4QkFBa0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQUEsVUFDbEMsT0FBTztBQUNMLFlBQUFELGVBQWM7QUFDZCw4QkFBa0IsQ0FBQyxFQUFFO0FBQUEsVUFDdkI7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSyxpQkFBaUI7QUFDcEIsZ0JBQU0sWUFBWSxnQkFBZ0IsSUFBSSxHQUFHLEtBQUssSUFBSTtBQUNsRCxjQUFJLEdBQUcsS0FBSyxLQUFLO0FBQ2Ysc0JBQVUsTUFBTSxFQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRztBQUFBLFVBQ25DLE9BQU87QUFDTCxzQkFBVSxNQUFNLEVBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFJO0FBQUEsVUFDcEM7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxJQUFNLFlBQVksT0FBTyxhQUFhLGNBQWUsVUFBVSxlQUFxQyxNQUFNO0FBRW5HLElBQU0scUNBQXFDLFlBQTBCO0FBQzFFLFVBQUlBLGNBQWE7QUFDZjtBQUFBLE1BQ0Y7QUFDQSxVQUFJRCxlQUFjO0FBQ2hCLGNBQU0sSUFBSSxNQUFNLDBDQUE0QztBQUFBLE1BQzlEO0FBQ0EsVUFBSUUsVUFBUztBQUNYLGNBQU0sSUFBSSxNQUFNLHVDQUF5QztBQUFBLE1BQzNEO0FBRUEsTUFBQUYsZ0JBQWU7QUFFZixVQUFzQyxRQUFRLEdBQUc7QUFFL0MsWUFBSVEsS0FBSSxLQUFLLGNBQWMsUUFBVztBQUNwQyxjQUFJLGFBQWEsVUFBVSxRQUFRLE9BQU8sTUFBTSxHQUFHO0FBQ2pELFlBQUFBLEtBQUksS0FBSyxZQUFZLFVBQVUsT0FBTyxHQUFHLENBQUUsVUFBVyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQUEsVUFDNUU7QUFBQSxRQUNGO0FBRUEsZUFBTyxJQUFJLFFBQWMsQ0FBQyxTQUFTLFdBQVc7QUFDNUMsdUJBQWEsVUFBVTtBQUV2QixnQkFBTSxZQUFZLElBQUksZ0JBQWdCLElBQUk7QUFBQSxZQUN0QztBQUFBO0FBQUE7QUFBQSxjQUdFO0FBQUEsWUFDRjtBQUFBLFlBQ0EsRUFBQyxNQUFNLGtCQUFpQjtBQUFBLFVBQUMsQ0FBQztBQUM5Qix3QkFBYyxJQUFJLE9BQU8sV0FBVyxFQUFDLE1BQU0sd0JBQXVCLENBQUM7QUFDbkUsc0JBQVksVUFBVSxDQUFDLE9BQW1CLE9BQU8sRUFBRTtBQUNuRCxzQkFBWSxZQUFZO0FBQ3hCLGNBQUksZ0JBQWdCLFNBQVM7QUFDN0IsOEJBQW9CLENBQUMsU0FBUyxNQUFNO0FBQ3BDLGdCQUFNLFVBQTBCLEVBQUMsTUFBTSxhQUFhLElBQUtBLEtBQUc7QUFDNUQsc0JBQVksWUFBWSxPQUFPO0FBQUEsUUFDakMsQ0FBQztBQUFBLE1BRUgsT0FBTztBQUNMLFlBQUk7QUFDRixnQkFBTSxzQkFBc0JBLEtBQUksSUFBSTtBQUNwQyxnQkFBVyxZQUFZQSxJQUFHO0FBQzFCLFVBQUFQLGVBQWM7QUFBQSxRQUNoQixTQUFTLEdBQUc7QUFDVixVQUFBQyxXQUFVO0FBQ1YsZ0JBQU07QUFBQSxRQUNSLFVBQUU7QUFDQSxVQUFBRixnQkFBZTtBQUFBLFFBQ2pCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFTyxJQUFNLGtCQUFrQixPQUFNLFdBQWtDO0FBQ3JFLFVBQXNDLFFBQVEsR0FBRztBQUMvQyxxQkFBYTtBQUNiLGVBQU8sSUFBSSxRQUFjLENBQUMsU0FBUyxXQUFXO0FBQzVDLDJCQUFpQixXQUFXLENBQUMsU0FBUyxNQUFNLENBQUM7QUFDN0MsZ0JBQU0sVUFBMEIsRUFBQyxNQUFNLFdBQVcsSUFBSyxFQUFDLFFBQVEsS0FBQVEsS0FBRyxFQUFDO0FBQ3BFLHNCQUFhLFlBQVksT0FBTztBQUFBLFFBQ2xDLENBQUM7QUFBQSxNQUNILE9BQU87QUFDTCxjQUFXLE9BQU9BLE1BQUssTUFBTTtBQUFBLE1BQy9CO0FBQUEsSUFDRjtBQUVPLElBQU1MLDBCQUF5QixPQUFNLFdBQTREO0FBQ3RHLFVBQXNDLFFBQVEsR0FBRztBQUMvQyxxQkFBYTtBQUNiLGVBQU8sSUFBSSxRQUFvQyxDQUFDLFNBQVMsV0FBVztBQUNsRSwyQkFBaUIsYUFBYSxDQUFDLFNBQVMsTUFBTSxDQUFDO0FBQy9DLGdCQUFNLFVBQTBCLEVBQUMsTUFBTSxhQUFhLElBQUssRUFBQyxPQUFNLEVBQUM7QUFDakUsc0JBQWEsWUFBWSxTQUFTLENBQUMsT0FBTyxNQUFNLENBQUM7QUFBQSxRQUNuRCxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsZUFBWSx1QkFBdUIsTUFBTTtBQUFBLE1BQzNDO0FBQUEsSUFDRjtBQUVPLElBQU1DLGlCQUNULE9BQU0sT0FBOEMsWUFDUjtBQUN0QyxVQUFzQyxRQUFRLEdBQUc7QUFFL0MsWUFBSSxTQUFTLHlCQUF5QjtBQUNwQyxnQkFBTSxJQUFJLE1BQU0sc0VBQXNFO0FBQUEsUUFDeEY7QUFDQSxxQkFBYTtBQUNiLGVBQU8sSUFBSSxRQUFxQyxDQUFDLFNBQVMsV0FBVztBQUNuRSwyQkFBaUIsVUFBVSxDQUFDLFNBQVMsTUFBTSxDQUFDO0FBQzVDLGdCQUFNLFVBQTBCLEVBQUMsTUFBTSxVQUFVLElBQUssRUFBQyxPQUFPLFNBQVMsRUFBQyxHQUFHLFFBQU8sRUFBQyxFQUFDO0FBQ3BGLGdCQUFNLGVBQStCLENBQUM7QUFDdEMsY0FBSSxpQkFBaUIsWUFBWTtBQUMvQix5QkFBYSxLQUFLLE1BQU0sTUFBTTtBQUFBLFVBQ2hDO0FBQ0Esc0JBQWEsWUFBWSxTQUFTLFlBQVk7QUFBQSxRQUNoRCxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsZUFBWSxjQUFjLE9BQU8sT0FBTztBQUFBLE1BQzFDO0FBQUEsSUFDRjtBQUVELElBQU1DLGtCQUFpQixPQUFNLGNBQXFDO0FBQ3ZFLFVBQXNDLFFBQVEsR0FBRztBQUMvQyxxQkFBYTtBQUNiLGVBQU8sSUFBSSxRQUFjLENBQUMsU0FBUyxXQUFXO0FBQzVDLDJCQUFpQixXQUFXLENBQUMsU0FBUyxNQUFNLENBQUM7QUFDN0MsZ0JBQU0sVUFBMEIsRUFBQyxNQUFNLFdBQVcsSUFBSyxVQUFTO0FBQ2hFLHNCQUFhLFlBQVksT0FBTztBQUFBLFFBQ2xDLENBQUM7QUFBQSxNQUNILE9BQU87QUFDTCxRQUFLLGVBQWUsU0FBUztBQUFBLE1BQy9CO0FBQUEsSUFDRjtBQUVPLElBQU1DLE9BQU0sT0FDZixXQUFtQixjQUF3QixRQUEwQixlQUNyRSxTQUFxQyxZQUFvRTtBQUMzRyxVQUFzQyxRQUFRLEdBQUc7QUFFL0MsWUFBSSxPQUFPLEtBQUssT0FBSyxFQUFFLENBQUMsTUFBTSxLQUFLLEdBQUc7QUFDcEMsZ0JBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLFFBQ25FO0FBRUEsWUFBSSxRQUFRLEtBQUssT0FBSyxDQUFDLEdBQUc7QUFDeEIsZ0JBQU0sSUFBSSxNQUFNLHlEQUF5RDtBQUFBLFFBQzNFO0FBQ0EscUJBQWE7QUFDYixlQUFPLElBQUksUUFBc0MsQ0FBQyxTQUFTLFdBQVc7QUFDcEUsMkJBQWlCLE9BQU8sQ0FBQyxTQUFTLE1BQU0sQ0FBQztBQUN6QyxnQkFBTSxxQkFBcUI7QUFDM0IsZ0JBQU0sVUFDRixFQUFDLE1BQU0sT0FBTyxJQUFLLEVBQUMsV0FBVyxjQUFjLFFBQVEsb0JBQW9CLGVBQWUsUUFBTyxFQUFDO0FBQ3BHLHNCQUFhLFlBQVksU0FBYywyQkFBMkIsa0JBQWtCLENBQUM7QUFBQSxRQUN2RixDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsZUFBWSxJQUFJLFdBQVcsY0FBYyxRQUFRLGVBQWUsU0FBUyxPQUFPO0FBQUEsTUFDbEY7QUFBQSxJQUNGO0FBRU8sSUFBTUMsZ0JBQWUsT0FBTSxjQUFxQztBQUNyRSxVQUFzQyxRQUFRLEdBQUc7QUFDL0MscUJBQWE7QUFDYixlQUFPLElBQUksUUFBYyxDQUFDLFNBQVMsV0FBVztBQUM1QywyQkFBaUIsaUJBQWlCLENBQUMsU0FBUyxNQUFNLENBQUM7QUFDbkQsZ0JBQU0sVUFBMEIsRUFBQyxNQUFNLGlCQUFpQixJQUFLLFVBQVM7QUFDdEUsc0JBQWEsWUFBWSxPQUFPO0FBQUEsUUFDbEMsQ0FBQztBQUFBLE1BQ0gsT0FBTztBQUNMLFFBQUssYUFBYSxTQUFTO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDMU5BLElBVWEsc0JBV0Esc0JBaUJBO0FBdENiO0FBQUE7QUFBQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBRU8sSUFBTSx1QkFBdUIsQ0FBQyxRQUFnQixZQUEwQztBQUM3RixjQUFRLE9BQU8sVUFBVTtBQUFBLFFBQ3ZCLEtBQUs7QUFDSCxpQkFBTyxDQUFDLE9BQU8sTUFBTSxPQUFPLE1BQU0sT0FBTyxNQUFNLEtBQUs7QUFBQSxRQUN0RCxLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxPQUFPLE1BQU0sT0FBTyxNQUFNLEVBQUMsV0FBVyxPQUFPLFVBQVMsR0FBRyxZQUFZO0FBQUEsUUFDL0U7QUFDRSxnQkFBTSxJQUFJLE1BQU0sMEJBQTBCLE9BQU8sUUFBUSxRQUFRLFFBQVEsQ0FBQyxFQUFFO0FBQUEsTUFDaEY7QUFBQSxJQUNGO0FBRU8sSUFBTSx1QkFBdUIsQ0FBQyxXQUFtQztBQUN0RSxjQUFRLE9BQU8sQ0FBQyxHQUFHO0FBQUEsUUFDakIsS0FBSztBQUNILGlCQUFPLElBQUlFLFFBQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFBQSxRQUNuRCxLQUFLLGNBQWM7QUFDakIsZ0JBQU0sV0FBVyxPQUFPLENBQUM7QUFDekIsY0FBSSxDQUFDLHlCQUF5QixRQUFRLEdBQUc7QUFDdkMsa0JBQU0sSUFBSSxNQUFNLDRCQUE0QixRQUFRLCtCQUErQjtBQUFBLFVBQ3JGO0FBQ0EsZ0JBQU0sRUFBQyxXQUFXLFVBQVUsUUFBTyxJQUFJLE9BQU8sQ0FBQztBQUMvQyxpQkFBT0EsUUFBTyxjQUFjLFdBQVcsRUFBQyxVQUFVLE1BQU0sT0FBTyxDQUFDLEdBQUcsVUFBVSxRQUFPLENBQUM7QUFBQSxRQUN2RjtBQUFBLFFBQ0E7QUFDRSxnQkFBTSxJQUFJLE1BQU0sMEJBQTBCLE9BQU8sQ0FBQyxDQUFDLEVBQUU7QUFBQSxNQUN6RDtBQUFBLElBQ0Y7QUFFTyxJQUFNLHVDQUFOLE1BQThFO0FBQUEsTUFNbkYsTUFBTSw4QkFBOEIsTUFBbUQ7QUFFckYsZUFBT0Msd0JBQXVCLE1BQU0sU0FBUyxJQUFJLENBQUM7QUFBQSxNQUNwRDtBQUFBLE1BRUEsTUFBTSxVQUFVLGNBQWlDLFNBQTBEO0FBQ3pHLHlCQUFpQjtBQUNqQixZQUFJO0FBRUosWUFBSSxPQUFPLGlCQUFpQixVQUFVO0FBQ3BDLGNBQUksT0FBTyxZQUFZLGVBQWUsUUFBUSxZQUFZLFFBQVEsU0FBUyxNQUFNO0FBRS9FLG9CQUFRLE1BQU0sU0FBUyxZQUFZO0FBQUEsVUFDckMsT0FBTztBQUdMLG9CQUFRLE1BQU0sS0FBSyw4QkFBOEIsWUFBWTtBQUFBLFVBQy9EO0FBQUEsUUFDRixPQUFPO0FBQ0wsa0JBQVE7QUFBQSxRQUNWO0FBRUEsU0FBQyxLQUFLLFdBQVcsS0FBSyxZQUFZLEtBQUssV0FBVyxJQUFJLE1BQU1DLGVBQWMsT0FBTyxPQUFPO0FBQ3hGLHVCQUFlO0FBQUEsTUFDakI7QUFBQSxNQUVBLE1BQU0sVUFBeUI7QUFDN0IsZUFBT0MsZ0JBQWUsS0FBSyxTQUFTO0FBQUEsTUFDdEM7QUFBQSxNQUVBLE1BQU0sSUFBSSxPQUFpQyxTQUFxQyxTQUN6QztBQUNyQyx5QkFBaUI7QUFDakIsY0FBTSxhQUF1QixDQUFDO0FBQzlCLGNBQU0sZUFBeUIsQ0FBQztBQUNoQyxlQUFPLFFBQVEsS0FBSyxFQUFFLFFBQVEsU0FBTztBQUNuQyxnQkFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixnQkFBTSxTQUFTLElBQUksQ0FBQztBQUNwQixnQkFBTSxRQUFRLEtBQUssV0FBVyxRQUFRLElBQUk7QUFDMUMsY0FBSSxVQUFVLElBQUk7QUFDaEIsa0JBQU0sSUFBSSxNQUFNLGtCQUFrQixJQUFJLEdBQUc7QUFBQSxVQUMzQztBQUNBLHFCQUFXLEtBQUssTUFBTTtBQUN0Qix1QkFBYSxLQUFLLEtBQUs7QUFBQSxRQUN6QixDQUFDO0FBRUQsY0FBTSxjQUFrQyxDQUFDO0FBQ3pDLGNBQU0sZ0JBQTBCLENBQUM7QUFDakMsZUFBTyxRQUFRLE9BQU8sRUFBRSxRQUFRLFNBQU87QUFDckMsZ0JBQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsZ0JBQU0sU0FBUyxJQUFJLENBQUM7QUFDcEIsZ0JBQU0sUUFBUSxLQUFLLFlBQVksUUFBUSxJQUFJO0FBQzNDLGNBQUksVUFBVSxJQUFJO0FBQ2hCLGtCQUFNLElBQUksTUFBTSxtQkFBbUIsSUFBSSxHQUFHO0FBQUEsVUFDNUM7QUFDQSxzQkFBWSxLQUFLLE1BQU07QUFDdkIsd0JBQWMsS0FBSyxLQUFLO0FBQUEsUUFDMUIsQ0FBQztBQUVELGNBQU0sU0FDRixXQUFXLElBQUksQ0FBQyxHQUFHLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxVQUFVLEtBQUssV0FBVyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6RyxjQUFNLFVBQVUsWUFBWTtBQUFBLFVBQ3hCLENBQUMsR0FBRyxNQUFNLElBQUkscUJBQXFCLEdBQUcsTUFBTSxXQUFXLEtBQUssWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUFBLFFBQUk7QUFFeEcsY0FBTSxVQUFVLE1BQU1DLEtBQUksS0FBSyxXQUFXLGNBQWMsUUFBUSxlQUFlLFNBQVMsT0FBTztBQUUvRixjQUFNLFlBQXVDLENBQUM7QUFDOUMsaUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDdkMsb0JBQVUsS0FBSyxZQUFZLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxxQkFBcUIsUUFBUSxDQUFDLENBQUM7QUFBQSxRQUNuRztBQUNBLHVCQUFlO0FBQ2YsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUVBLGlCQUF1QjtBQUFBLE1BRXZCO0FBQUEsTUFFQSxlQUFxQjtBQUNuQixhQUFLQyxjQUFhLEtBQUssU0FBUztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQzdIQSxJQWVhLGlCQTZCQTtBQTVDYjtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQVFPLElBQU0sa0JBQWtCLE1BQVk7QUFDekMsVUFBSSxPQUFPQyxLQUFJLEtBQUssZ0JBQWdCLFlBQVlBLEtBQUksS0FBSyxjQUFjLEdBQUc7QUFDeEUsUUFBQUEsS0FBSSxLQUFLLGNBQWM7QUFBQSxNQUN6QjtBQUVBLFVBQUksT0FBT0EsS0FBSSxLQUFLLFNBQVMsV0FBVztBQUN0QyxRQUFBQSxLQUFJLEtBQUssT0FBTztBQUFBLE1BQ2xCO0FBRUEsVUFBSSxPQUFPQSxLQUFJLEtBQUssVUFBVSxXQUFXO0FBQ3ZDLFFBQUFBLEtBQUksS0FBSyxRQUFRO0FBQUEsTUFDbkI7QUFFQSxVQUFJLE9BQU9BLEtBQUksS0FBSyxVQUFVLFdBQVc7QUFDdkMsUUFBQUEsS0FBSSxLQUFLLFFBQVE7QUFBQSxNQUNuQjtBQUVBLFVBQUksT0FBT0EsS0FBSSxLQUFLLGVBQWUsWUFBWSxDQUFDLE9BQU8sVUFBVUEsS0FBSSxLQUFLLFVBQVUsS0FBS0EsS0FBSSxLQUFLLGNBQWMsR0FBRztBQUdqSCxZQUFLLE9BQU8sU0FBUyxlQUFlLENBQUMsS0FBSyx1QkFDckMsT0FBTyxZQUFZLGVBQWUsUUFBUSxZQUFZLFFBQVEsU0FBUyxNQUFPO0FBQ2pGLFVBQUFBLEtBQUksS0FBSyxhQUFhO0FBQUEsUUFDeEI7QUFDQSxjQUFNLHFCQUFxQixPQUFPLGNBQWMsY0FBYyxLQUFLLEVBQUUsU0FBUyxVQUFVO0FBQ3hGLFFBQUFBLEtBQUksS0FBSyxhQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxzQkFBc0IsS0FBSyxDQUFDLENBQUM7QUFBQSxNQUM1RTtBQUFBLElBQ0Y7QUFFTyxJQUFNLGdDQUFOLE1BQXVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BUzVELE1BQU0sS0FBSyxhQUFvQztBQUU3Qyx3QkFBZ0I7QUFHaEIsY0FBTSxtQ0FBbUM7QUFHekMsY0FBTSxnQkFBZ0IsV0FBVztBQUFBLE1BQ25DO0FBQUEsTUFLQSxNQUFNLDhCQUE4QixjQUFpQyxTQUNoQztBQUNuQyxjQUFNLFVBQVUsSUFBSSxxQ0FBcUM7QUFDekQsY0FBTSxRQUFRLFVBQVUsY0FBYyxPQUFPO0FBQzdDLGVBQU8sUUFBUSxRQUFRLE9BQU87QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUN6RUEsSUFhTSxvQkFhQSx5QkFRTyx3QkEwQlAsMEJBa0JBLDhCQW1CTywwQkFZQSw2QkFrRFAsMEJBOEJBLCtCQWtFTyxlQVdBLGNBb0RBLGtCQXdCQSxhQXFEQSxtQkFtQkEseUJBNkRBLHNCQTBDQTtBQXJnQmI7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBTSxxQkFDRjtBQVlKLElBQU0sMEJBQTBCLENBQUMsU0FBaUIsU0FBaUIsZUFBZSxTQUFTO0FBQ3pGLFVBQUksZ0JBQWdCLFlBQVksR0FBRztBQUNqQyx1QkFBZSxPQUFPO0FBQUEsTUFDeEIsV0FBVyxDQUFDLGdCQUFnQixZQUFZLEdBQUc7QUFDekMsdUJBQWUsT0FBTztBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUVPLElBQU0seUJBQXlCLENBQUMsbUJBQXVEO0FBQzVGLFlBQU1DLFFBQU8sWUFBWTtBQUV6QixZQUFNLENBQUMsc0JBQXNCLG9CQUFvQixJQUFJO0FBQ3JELFVBQUksbUJBQW1CO0FBRXZCLFVBQUk7QUFDRixZQUFJQSxNQUFLLDRCQUE0QjtBQUNuQyw2QkFBbUJBLE1BQUssMkJBQTJCLHNCQUFzQixvQkFBb0I7QUFBQSxRQUMvRixPQUFPO0FBQ0wsZ0JBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLFFBQ3BDO0FBRUEsZ0NBQXdCLGtCQUFrQiwwREFBMEQsS0FBSztBQUN6RyxlQUFPO0FBQUEsTUFDVCxTQUFTLEdBQUc7QUFDVixZQUFJQSxNQUFLLGlDQUFpQyxxQkFBcUIsR0FBRztBQUNoRSxVQUFBQSxNQUFLLDhCQUE4QixnQkFBZ0I7QUFBQSxRQUNyRDtBQUNBLGNBQU07QUFBQSxNQUNSLFVBQUU7QUFFQSxRQUFBQSxNQUFLLFNBQVMsZUFBZSxDQUFDLENBQUM7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFFQSxJQUFNLDJCQUEyQixDQUFDLG1CQUEyQixnQkFBMkM7QUFDdEcsWUFBTUEsUUFBTyxZQUFZO0FBQ3pCLFlBQU0sUUFBUUEsTUFBSyxVQUFVO0FBQzdCLFVBQUk7QUFDRixjQUFNLGFBQWFBLE1BQUssV0FBVyxDQUFDO0FBQ3BDLFlBQUlBLE1BQUssc0NBQXNDO0FBQzdDLGdCQUFNLFlBQ0ZBLE1BQUsscUNBQXFDLG1CQUFtQixZQUFZLGFBQWEsR0FBRyxXQUFXO0FBQ3hHLGtDQUF3QixXQUFXLHVDQUF3QztBQUMzRSxpQkFBTyxDQUFDQSxNQUFLLE9BQU8sYUFBYSxDQUFDLEdBQUdBLE1BQUssT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDdEUsT0FBTztBQUNMLGdCQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxRQUNwQztBQUFBLE1BQ0YsVUFBRTtBQUNBLFFBQUFBLE1BQUssYUFBYSxLQUFLO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBRUEsSUFBTSwrQkFDRixDQUFDLG1CQUEyQixPQUFlLFNBQWtCLGdCQUFtQztBQUM5RixZQUFNLFFBQVEsQ0FBQztBQUNmLFlBQU1BLFFBQU8sWUFBWTtBQUV6QixlQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sS0FBSztBQUM5QixZQUFJQSxNQUFLLHFDQUFxQztBQUM1QyxnQkFBTSxPQUFPQSxNQUFLLG9DQUFvQyxtQkFBbUIsR0FBRyxTQUFTLFdBQVc7QUFDaEcsa0NBQXdCLE1BQU0sK0NBQStDLE9BQU8sV0FBVyxDQUFDLElBQUksS0FBSztBQUV6RyxnQkFBTSxLQUFLQSxNQUFLLGFBQWEsSUFBSSxDQUFDO0FBQ2xDLFVBQUFBLE1BQUssTUFBTSxJQUFJO0FBQUEsUUFDakIsT0FBTztBQUNMLGdCQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVHLElBQU0sMkJBQTJCLENBQUMsbUJBQTJCLGdCQUErQztBQUNqSCxVQUFJLGFBQXVCLENBQUM7QUFDNUIsVUFBSSxjQUF3QixDQUFDO0FBRTdCLFlBQU0sQ0FBQyxZQUFZLFdBQVcsSUFBSSx5QkFBeUIsbUJBQW1CLFdBQVc7QUFFekYsbUJBQWEsNkJBQTZCLG1CQUFtQixZQUFZLE1BQU0sV0FBVztBQUMxRixvQkFBYyw2QkFBNkIsbUJBQW1CLGFBQWEsT0FBTyxXQUFXO0FBRTdGLGFBQU8sQ0FBQyxZQUFZLFdBQVc7QUFBQSxJQUNqQztBQUVPLElBQU0sOEJBQ1QsQ0FBQyxrQkFBMEIsZ0JBQTRDLGVBQ3RFLG9CQUFnRCxZQUFxRDtBQUNwRyxZQUFNQSxRQUFPLFlBQVk7QUFFekIsVUFBSSx3QkFBd0I7QUFDNUIsVUFBSSx1QkFBdUI7QUFDM0IsVUFBSSxTQUFtQixDQUFDO0FBRXhCLFVBQUk7QUFDRixTQUFDLHNCQUFzQixNQUFNLElBQUksa0JBQWtCLE9BQU87QUFDMUQsWUFBSUEsTUFBSywyQkFBMkI7QUFDbEMsa0NBQXdCQSxNQUFLO0FBQUEsWUFDekI7QUFBQSxZQUFzQjtBQUFBLFlBQWtCLGVBQWUsQ0FBQztBQUFBLFlBQUcsZUFBZSxDQUFDO0FBQUEsWUFBRyxjQUFjLENBQUM7QUFBQSxZQUM3RixjQUFjLENBQUM7QUFBQSxZQUFHLG1CQUFtQixDQUFDO0FBQUEsWUFBRyxtQkFBbUIsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUNwRSxPQUFPO0FBQ0wsZ0JBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLFFBQ3BDO0FBRUEsZ0NBQXdCLHVCQUF1QiwwREFBMEQsS0FBSztBQUM5RyxlQUFPO0FBQUEsTUFDVCxTQUFTLEdBQUc7QUFDVixZQUFJQSxNQUFLLDhCQUE4QiwwQkFBMEIsR0FBRztBQUNsRSxVQUFBQSxNQUFLLDJCQUEyQixxQkFBcUI7QUFBQSxRQUN2RDtBQUNBLGNBQU07QUFBQSxNQUNSLFVBQUU7QUFDQSxRQUFBQSxNQUFLLE1BQU0sZUFBZSxDQUFDLENBQUM7QUFDNUIsUUFBQUEsTUFBSyxNQUFNLGNBQWMsQ0FBQyxDQUFDO0FBQzNCLFFBQUFBLE1BQUssTUFBTSxtQkFBbUIsQ0FBQyxDQUFDO0FBRWhDLFlBQUkseUJBQXlCLEdBQUc7QUFDOUIsVUFBQUEsTUFBSywwQkFBMEIsb0JBQW9CO0FBQUEsUUFDckQ7QUFDQSxlQUFPLFFBQVEsV0FBU0EsTUFBSyxNQUFNLEtBQUssQ0FBQztBQUFBLE1BQzNDO0FBQUEsSUFDRjtBQWNKLElBQU0sMkJBQ0YsQ0FBQyxtQkFBMkIsU0FBbUIsU0FBcUMsZUFDbkYsbUJBQTZCLGFBQXFCO0FBQ2pELFlBQU0sUUFBUSxRQUFRO0FBR3RCLGVBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxLQUFLO0FBQzlCO0FBQUEsVUFDSSxRQUFRLENBQUM7QUFBQSxVQUFHO0FBQUEsVUFBZTtBQUFBLFVBQW1CO0FBQUEsVUFBbUIsV0FBVyxRQUFRLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFDNUY7QUFHQSxZQUFNQSxRQUFPLFlBQVk7QUFDekIsWUFBTSxlQUFlQSxNQUFLLFdBQVcsUUFBUSxDQUFDO0FBQzlDLFVBQUksY0FBYyxlQUFlO0FBQ2pDLGVBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxLQUFLO0FBQzlCLFFBQUFBLE1BQUssUUFBUSxhQUFhLElBQUksY0FBYyxDQUFDO0FBQUEsTUFDL0M7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQVVKLElBQU0sZ0NBQ0YsQ0FBQyxvQkFBNEIsYUFBcUIscUJBQ2pELGtCQUE4QztBQUM3QyxZQUFNQSxRQUFPLFlBQVk7QUFDekIsWUFBTSxTQUEyQixDQUFDO0FBRWxDLGVBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxLQUFLO0FBQ3BDLGNBQU0sU0FBU0EsTUFBSyxRQUFRLHFCQUFxQixJQUFJLENBQUM7QUFDdEQsWUFBSSxXQUFXLG9CQUFvQixDQUFDLEdBQUc7QUFFckMsaUJBQU8sS0FBSyxjQUFjLENBQUMsQ0FBRTtBQUM3QjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLDJCQUEyQkEsTUFBSyxVQUFVO0FBRWhELGNBQU0sbUJBQW1CQSxNQUFLLFdBQVcsSUFBSSxDQUFDO0FBRTlDLFlBQUksTUFBNkIsYUFBYTtBQUM5QyxZQUFJO0FBQ0YsZ0JBQU0sWUFBWUEsTUFBSztBQUFBLFlBQ25CO0FBQUEsWUFBUTtBQUFBLFlBQWtCLG1CQUFtQjtBQUFBLFlBQUcsbUJBQW1CO0FBQUEsWUFBRyxtQkFBbUI7QUFBQSxVQUFFO0FBQy9GLGtDQUF3QixXQUFXLDRDQUE0QyxDQUFDLEdBQUc7QUFFbkYsY0FBSSxrQkFBa0IsbUJBQW1CO0FBQ3pDLGdCQUFNLFdBQVdBLE1BQUssUUFBUSxpQkFBaUI7QUFDL0MsdUJBQWFBLE1BQUssUUFBUSxpQkFBaUI7QUFDM0MsZ0JBQU0sYUFBYUEsTUFBSyxRQUFRLGlCQUFpQjtBQUNqRCxnQkFBTSxhQUFhQSxNQUFLLFFBQVEsaUJBQWlCO0FBQ2pELGdCQUFNLE9BQU8sQ0FBQztBQUNkLG1CQUFTQyxLQUFJLEdBQUdBLEtBQUksWUFBWUEsTUFBSztBQUNuQyxpQkFBSyxLQUFLRCxNQUFLLFFBQVEsYUFBYSxJQUFJQyxFQUFDLENBQUM7QUFBQSxVQUM1QztBQUNBLFVBQUFELE1BQUssU0FBUyxVQUFVO0FBRXhCLGdCQUFNLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDO0FBQzNDLGlCQUFPLDJCQUEyQixRQUFRO0FBRTFDLGNBQUksU0FBUyxVQUFVO0FBQ3JCLGtCQUFNLGFBQXVCLENBQUM7QUFDOUIsZ0JBQUksWUFBWSxhQUFhO0FBQzdCLHFCQUFTQyxLQUFJLEdBQUdBLEtBQUksTUFBTUEsTUFBSztBQUM3QixvQkFBTSxTQUFTRCxNQUFLLFFBQVEsV0FBVztBQUN2QyxvQkFBTSxpQkFBaUJDLE9BQU0sT0FBTyxJQUFJLFNBQVlELE1BQUssUUFBUSxTQUFTLElBQUk7QUFDOUUseUJBQVcsS0FBS0EsTUFBSyxhQUFhLFFBQVEsY0FBYyxDQUFDO0FBQUEsWUFDM0Q7QUFDQSxtQkFBTyxLQUFLLENBQUMsTUFBTSxNQUFNLFlBQVksS0FBSyxDQUFDO0FBQUEsVUFDN0MsT0FBTztBQUNMLGtCQUFNLHdCQUF3QixrQ0FBa0MsSUFBSTtBQUNwRSxrQkFBTSxPQUFPLElBQUksc0JBQXNCLElBQUk7QUFDM0MsZ0JBQUksV0FBVyxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUssVUFBVSxFQUN2RCxJQUFJQSxNQUFLLE9BQU8sU0FBUyxZQUFZLGFBQWEsS0FBSyxVQUFVLENBQUM7QUFDdkUsbUJBQU8sS0FBSyxDQUFDLE1BQU0sTUFBTSxNQUFNLEtBQUssQ0FBQztBQUFBLFVBQ3ZDO0FBQUEsUUFDRixVQUFFO0FBQ0EsVUFBQUEsTUFBSyxhQUFhLHdCQUF3QjtBQUMxQyxjQUFJLFNBQVMsWUFBWSxZQUFZO0FBQ25DLFlBQUFBLE1BQUssTUFBTSxVQUFVO0FBQUEsVUFDdkI7QUFDQSxVQUFBQSxNQUFLLGtCQUFrQixNQUFNO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFRyxJQUFNLGdCQUFnQixPQUFNLHNCQUE2QztBQUM5RSxZQUFNQSxRQUFPLFlBQVk7QUFFekIsVUFBSUEsTUFBSywyQkFBMkI7QUFDbEMsY0FBTSxZQUFZQSxNQUFLLDBCQUEwQixpQkFBaUI7QUFDbEUsZ0NBQXdCLFdBQVcsMkJBQTRCO0FBQUEsTUFDakUsT0FBTztBQUNMLGNBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUVPLElBQU0sZUFBZSxPQUN4QixtQkFBMkIsY0FBd0IsY0FBZ0MsZUFDbkYsZUFBMkMsWUFBb0U7QUFDakgsWUFBTUEsUUFBTyxZQUFZO0FBRXpCLFlBQU0sYUFBYSxhQUFhO0FBQ2hDLFlBQU0sY0FBYyxjQUFjO0FBRWxDLFVBQUksbUJBQW1CO0FBQ3ZCLFVBQUksbUJBQTZCLENBQUM7QUFFbEMsWUFBTSxxQkFBK0IsQ0FBQztBQUN0QyxZQUFNLHNCQUFnQyxDQUFDO0FBQ3ZDLFlBQU0sb0JBQThCLENBQUM7QUFFckMsWUFBTSxpQkFBaUJBLE1BQUssVUFBVTtBQUV0QyxVQUFJO0FBRUYsU0FBQyxrQkFBa0IsZ0JBQWdCLElBQUksY0FBYyxPQUFPO0FBRzVELGNBQU0sb0JBQW9CO0FBQUEsVUFDdEI7QUFBQSxVQUFtQjtBQUFBLFVBQWM7QUFBQSxVQUFjO0FBQUEsVUFBb0I7QUFBQSxVQUFtQjtBQUFBLFFBQUM7QUFHM0YsY0FBTSxxQkFBcUI7QUFBQSxVQUN2QjtBQUFBLFVBQW1CO0FBQUEsVUFBZTtBQUFBLFVBQWU7QUFBQSxVQUFxQjtBQUFBLFVBQW1CO0FBQUEsUUFBVTtBQUV2RyxZQUFJQSxNQUFLLDBCQUEwQjtBQUNqQyxnQkFBTSxZQUFZQSxNQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUFtQjtBQUFBLFlBQW1CO0FBQUEsWUFBWTtBQUFBLFlBQW9CO0FBQUEsWUFBYTtBQUFBLFVBQWdCO0FBQ3ZHLGtDQUF3QixXQUFXLGlFQUFpRTtBQUFBLFFBQ3RHLE9BQU87QUFDTCxnQkFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsUUFDcEM7QUFFQSxlQUFPLDhCQUE4QixvQkFBb0IsYUFBYSxxQkFBcUIsYUFBYTtBQUFBLE1BQzFHLFVBQUU7QUFDQSxRQUFBQSxNQUFLLGFBQWEsY0FBYztBQUVoQywyQkFBbUIsUUFBUSxPQUFLQSxNQUFLLGtCQUFrQixDQUFDLENBQUM7QUFDekQsNEJBQW9CLFFBQVEsT0FBS0EsTUFBSyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFELDBCQUFrQixRQUFRLE9BQUtBLE1BQUssTUFBTSxDQUFDLENBQUM7QUFFNUMsWUFBSSxxQkFBcUIsR0FBRztBQUMxQixVQUFBQSxNQUFLLHNCQUFzQixnQkFBZ0I7QUFBQSxRQUM3QztBQUNBLHlCQUFpQixRQUFRLE9BQUtBLE1BQUssTUFBTSxDQUFDLENBQUM7QUFBQSxNQUM3QztBQUFBLElBQ0Y7QUFFTyxJQUFNLG1CQUNULE9BQU0sbUJBQTJCLFlBQXdEO0FBQzNGLFlBQU1BLFFBQU8sWUFBWTtBQUV6QixVQUFJLG1CQUFtQjtBQUN2QixVQUFJLG1CQUE2QixDQUFDO0FBRWxDLFVBQUk7QUFDRixTQUFDLGtCQUFrQixnQkFBZ0IsSUFBSSxjQUFjLE9BQU87QUFFNUQsWUFBSUEsTUFBSywyQkFBMkI7QUFDbEMsZ0JBQU0sVUFBVUEsTUFBSywwQkFBMEIsbUJBQW1CLGdCQUFnQjtBQUNsRixrQ0FBd0IsU0FBUyxrRUFBa0U7QUFBQSxRQUNyRyxPQUFPO0FBQ0wsZ0JBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLFFBQ3BDO0FBQUEsTUFDRixVQUFFO0FBQ0EsWUFBSSxxQkFBcUIsR0FBRztBQUMxQixVQUFBQSxNQUFLLHNCQUFzQixnQkFBZ0I7QUFBQSxRQUM3QztBQUNBLHlCQUFpQixRQUFRLE9BQUtBLE1BQUssTUFBTSxDQUFDLENBQUM7QUFBQSxNQUM3QztBQUFBLElBQ0Y7QUFFTyxJQUFNLGNBQWMsT0FDdkIsbUJBQTJCLGNBQXdCLGNBQWdDLGVBQ25GLGVBQTJDLFlBQW9FO0FBQ2pILFlBQU1BLFFBQU8sWUFBWTtBQUV6QixZQUFNLGFBQWEsYUFBYTtBQUNoQyxZQUFNLGNBQWMsY0FBYztBQUVsQyxVQUFJLG1CQUFtQjtBQUN2QixVQUFJLG1CQUE2QixDQUFDO0FBRWxDLFlBQU0scUJBQStCLENBQUM7QUFDdEMsWUFBTSxzQkFBZ0MsQ0FBQztBQUN2QyxZQUFNLG9CQUE4QixDQUFDO0FBRXJDLFlBQU0saUJBQWlCQSxNQUFLLFVBQVU7QUFFdEMsVUFBSTtBQUVGLFNBQUMsa0JBQWtCLGdCQUFnQixJQUFJLGNBQWMsT0FBTztBQUc1RCxjQUFNLG9CQUFvQjtBQUFBLFVBQ3RCO0FBQUEsVUFBbUI7QUFBQSxVQUFjO0FBQUEsVUFBYztBQUFBLFVBQW9CO0FBQUEsVUFBbUI7QUFBQSxRQUFDO0FBRzNGLGNBQU0scUJBQXFCO0FBQUEsVUFDdkI7QUFBQSxVQUFtQjtBQUFBLFVBQWU7QUFBQSxVQUFlO0FBQUEsVUFBcUI7QUFBQSxVQUFtQjtBQUFBLFFBQVU7QUFFdkcsWUFBSUEsTUFBSyxzQkFBc0I7QUFDN0IsZ0JBQU0sWUFBWUEsTUFBSztBQUFBLFlBQ25CO0FBQUEsWUFBbUI7QUFBQSxZQUFtQjtBQUFBLFlBQVk7QUFBQSxZQUFvQjtBQUFBLFlBQWE7QUFBQSxVQUFnQjtBQUV2RyxrQ0FBd0IsV0FBVyw2REFBNkQ7QUFBQSxRQUNsRyxPQUFPO0FBQ0wsZ0JBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLFFBQ3BDO0FBRUEsZUFBTyw4QkFBOEIsb0JBQW9CLGFBQWEscUJBQXFCLGFBQWE7QUFBQSxNQUMxRyxVQUFFO0FBQ0EsUUFBQUEsTUFBSyxhQUFhLGNBQWM7QUFFaEMsMkJBQW1CLFFBQVEsT0FBS0EsTUFBSyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3pELDRCQUFvQixRQUFRLE9BQUtBLE1BQUssa0JBQWtCLENBQUMsQ0FBQztBQUMxRCwwQkFBa0IsUUFBUSxPQUFLQSxNQUFLLE1BQU0sQ0FBQyxDQUFDO0FBRTVDLFlBQUkscUJBQXFCLEdBQUc7QUFDMUIsVUFBQUEsTUFBSyxzQkFBc0IsZ0JBQWdCO0FBQUEsUUFDN0M7QUFDQSx5QkFBaUIsUUFBUSxPQUFLQSxNQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDN0M7QUFBQSxJQUNGO0FBRU8sSUFBTSxvQkFBb0IsQ0FBQyxtQkFBMkIsa0JBQW1DO0FBQzlGLFlBQU1BLFFBQU8sWUFBWTtBQUN6QixZQUFNLFFBQVFBLE1BQUssVUFBVTtBQUU3QixVQUFJO0FBQ0YsY0FBTSxhQUFhQSxNQUFLLFdBQVcsQ0FBQztBQUNwQyxZQUFJQSxNQUFLLCtCQUErQjtBQUN0QyxnQkFBTSxZQUFZQSxNQUFLLDhCQUE4QixtQkFBbUIsWUFBWSxhQUFhO0FBQ2pHLGtDQUF3QixXQUFXLDJCQUE0QjtBQUUvRCxpQkFBT0EsTUFBSyxPQUFPLGFBQWEsQ0FBQztBQUFBLFFBQ25DLE9BQU87QUFDTCxnQkFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsUUFDcEM7QUFBQSxNQUNGLFVBQUU7QUFDQSxRQUFBQSxNQUFLLGFBQWEsS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUVPLElBQU0sMEJBQ1QsT0FBTSxtQkFBMkIsa0JBQW9EO0FBQ3ZGLFlBQU1BLFFBQU8sWUFBWTtBQUN6QixZQUFNLFFBQVFBLE1BQUssVUFBVTtBQUU3QixZQUFNLHFCQUFxQjtBQUMzQixZQUFNLG1CQUFtQjtBQUV6QixZQUFNLGlCQUFpQixrQkFBa0IsbUJBQW1CLGFBQWE7QUFDekUsVUFBSSxTQUFTO0FBR2IsWUFBTSxtQkFBbUIsSUFBSTtBQUM3QixZQUFNLGVBQWVBLE1BQUssUUFBUSxnQkFBZ0I7QUFHbEQsWUFBTSxPQUFPLENBQUMsY0FBYztBQUU1QixZQUFNLGFBQWFBLE1BQUssV0FBVyxDQUFDO0FBQ3BDLFlBQU0sWUFBWSxhQUFhO0FBQy9CLE1BQUFBLE1BQUssT0FBTyxTQUFTLElBQUk7QUFFekIsVUFBSTtBQUVGLGlCQUFTQSxNQUFLO0FBQUEsVUFDViwyQkFBMkIsa0JBQWtCO0FBQUEsVUFBRztBQUFBLFVBQWM7QUFBQSxVQUFrQjtBQUFBLFVBQVksS0FBSztBQUFBLFVBQ2pHLHlCQUF5QixnQkFBZ0I7QUFBQSxRQUFDO0FBQzlDO0FBQUEsVUFDSTtBQUFBLFVBQVEsNERBQTRELGlCQUFpQjtBQUFBLFVBQUs7QUFBQSxRQUFLO0FBRW5HLFlBQUlBLE1BQUssb0NBQW9DO0FBQzNDLGdCQUFNLFVBQVVBLE1BQUssbUNBQW1DLG1CQUFtQixRQUFRLGdCQUFnQixhQUFhO0FBQ2hILGtDQUF3QixTQUFTLGtDQUFtQztBQUFBLFFBRXRFLE9BQU87QUFDTCxnQkFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsUUFDcEM7QUFHQSxjQUFNLHdCQUF3QixrQ0FBa0Msa0JBQWtCO0FBQ2xGLGNBQU0sT0FBTyxJQUFJLHNCQUFzQixjQUFjO0FBQ3JELGNBQU0sU0FBMkIsQ0FBQztBQUNsQyxZQUFJLFdBQVcsS0FBSyxRQUFRLEtBQUssWUFBWSxLQUFLLFVBQVUsRUFDdkQsSUFBSUEsTUFBSyxPQUFPLFNBQVMsY0FBYyxlQUFlLGdCQUFnQixDQUFDO0FBQzVFLGVBQU8sS0FBSyxDQUFDLG9CQUFvQixNQUFNLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsWUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixnQkFBTSxJQUFJLE1BQU07QUFBQSxnQkFDTixPQUFPLE1BQU0sRUFBRTtBQUFBLFFBQzNCLE9BQU87QUFDTCxpQkFBTyxPQUFPLENBQUM7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsVUFBRTtBQUNBLFlBQUksV0FBVyxHQUFHO0FBQ2hCLFVBQUFBLE1BQUssa0JBQWtCLE1BQU07QUFBQSxRQUMvQjtBQUNBLFFBQUFBLE1BQUssTUFBTSxZQUFZO0FBQ3ZCLFFBQUFBLE1BQUssTUFBTSxVQUFVO0FBQ3JCLFFBQUFBLE1BQUssYUFBYSxLQUFLO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBRU8sSUFBTSx1QkFDVCxPQUFNLG1CQUEyQixRQUFvQixrQkFBMEM7QUFDakcsWUFBTUEsUUFBTyxZQUFZO0FBQ3pCLFlBQU0sUUFBUUEsTUFBSyxVQUFVO0FBRTdCLFlBQU0scUJBQXFCO0FBQzNCLFlBQU0sbUJBQW1CO0FBR3pCLFlBQU0sbUJBQW1CLE9BQU87QUFDaEMsWUFBTSxjQUFjLG1CQUFtQjtBQUN2QyxZQUFNLGVBQWVBLE1BQUssUUFBUSxnQkFBZ0I7QUFDbEQsTUFBQUEsTUFBSyxPQUFPLElBQUksUUFBUSxZQUFZO0FBR3BDLFlBQU0sYUFBYUEsTUFBSyxXQUFXLENBQUM7QUFDcEMsTUFBQUEsTUFBSyxPQUFPLGFBQWEsQ0FBQyxJQUFJO0FBQzlCLFlBQU0sYUFBYTtBQUNuQixVQUFJLFNBQVM7QUFFYixVQUFJO0FBQ0YsaUJBQVNBLE1BQUs7QUFBQSxVQUNWLDJCQUEyQixrQkFBa0I7QUFBQSxVQUFHO0FBQUEsVUFBYztBQUFBLFVBQWtCO0FBQUEsVUFBWTtBQUFBLFVBQzVGLHlCQUF5QixnQkFBZ0I7QUFBQSxRQUFDO0FBQzlDLGdDQUF3QixRQUFRLGlEQUFpRCxpQkFBaUIsSUFBSSxLQUFLO0FBRTNHLFlBQUlBLE1BQUssc0NBQXNDO0FBQzdDLGdCQUFNLFVBQVVBLE1BQUsscUNBQXFDLG1CQUFtQixRQUFRLGFBQWEsYUFBYTtBQUMvRyxrQ0FBd0IsU0FBUyxrQ0FBbUM7QUFBQSxRQUN0RSxPQUFPO0FBQ0wsZ0JBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLFFBQ3BDO0FBQUEsTUFDRixVQUFFO0FBQ0EsWUFBSSxXQUFXLEdBQUc7QUFDaEIsVUFBQUEsTUFBSyxrQkFBa0IsTUFBTTtBQUFBLFFBQy9CO0FBQ0EsUUFBQUEsTUFBSyxhQUFhLEtBQUs7QUFDdkIsUUFBQUEsTUFBSyxNQUFNLFlBQVk7QUFDdkIsUUFBQUEsTUFBSyxNQUFNLFVBQVU7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFFTyxJQUFNLHNDQUFzQyxDQUFDLGNBQXNCLGNBQTRCO0FBQ3BHLFlBQU1BLFFBQU8sWUFBWTtBQUV6QixVQUFJQSxNQUFLLDRCQUE0QjtBQUNuQyxRQUFBQSxNQUFLLDJCQUEyQixTQUFTO0FBQUEsTUFDM0M7QUFDQSxVQUFJQSxNQUFLLCtCQUErQjtBQUN0QyxRQUFBQSxNQUFLLDhCQUE4QixZQUFZO0FBQUEsTUFDakQ7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDOWdCQSxJQVVhO0FBVmI7QUFBQTtBQUFBO0FBTUE7QUFDQTtBQUNBO0FBRU8sSUFBTSwrQ0FBTixNQUFxRjtBQUFBLE1BQXJGO0FBT0wsOEJBQTJCLENBQUM7QUFDNUIsK0JBQTRCLENBQUM7QUFBQTtBQUFBLE1BRTdCLE1BQU0sa0JBQWtCLGFBQXFFO0FBQzNGLFlBQUk7QUFDSixZQUFJLE9BQU8sZ0JBQWdCLFVBQVU7QUFDbkMsZ0JBQU0sV0FBVyxNQUFNLE1BQU0sV0FBVztBQUN4QyxnQkFBTSxjQUFjLE1BQU0sU0FBUyxZQUFZO0FBQy9DLG1CQUFTLElBQUksV0FBVyxXQUFXO0FBQUEsUUFDckMsT0FBTztBQUNMLG1CQUFTO0FBQUEsUUFDWDtBQUNBLGVBQU8sdUJBQXVCLE1BQU07QUFBQSxNQUN0QztBQUFBLE1BRUEsTUFBTSxzQkFDRiw0QkFBK0MsdUJBQy9DLHNCQUF5QywyQkFDekMsU0FBMEM7QUFDNUMsY0FBTSxpQkFBNkMsTUFBTSxLQUFLLGtCQUFrQiwwQkFBMEI7QUFDMUcsY0FBTSxpQkFBNkMsTUFBTSxLQUFLLGtCQUFrQixxQkFBcUI7QUFFckcsWUFBSSxnQkFBNEMsQ0FBQyxHQUFHLENBQUM7QUFDckQsWUFBSSxxQkFBaUQsQ0FBQyxHQUFHLENBQUM7QUFFMUQsWUFBSSx5QkFBeUIsSUFBSTtBQUMvQiwwQkFBZ0IsTUFBTSxLQUFLLGtCQUFrQixvQkFBb0I7QUFBQSxRQUNuRTtBQUNBLFlBQUksOEJBQThCLElBQUk7QUFDcEMsK0JBQXFCLE1BQU0sS0FBSyxrQkFBa0IseUJBQXlCO0FBQUEsUUFDN0U7QUFFQSxhQUFLLGVBQWUsdUJBQXVCLGNBQWM7QUFDekQsYUFBSyxZQUNELDRCQUE0QixLQUFLLGNBQWMsZ0JBQWdCLGVBQWUsb0JBQW9CLE9BQU87QUFDN0csU0FBQyxLQUFLLFlBQVksS0FBSyxXQUFXLElBQUkseUJBQXlCLEtBQUssV0FBVyxLQUFLO0FBQ3BGLFlBQUkseUJBQXlCLElBQUk7QUFDL0IsV0FBQyxLQUFLLGdCQUFnQixLQUFLLGVBQWUsSUFBSSx5QkFBeUIsS0FBSyxXQUFXLElBQUk7QUFBQSxRQUM3RjtBQUFBLE1BQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFVQSx5Q0FDSSxPQUE0QixPQUFpQixTQUE2RDtBQUM1RyxjQUFNLFNBQWMsQ0FBQztBQUNyQixjQUFNLFVBQW9CLENBQUM7QUFDM0IsZUFBTyxRQUFRLEtBQUssRUFBRSxRQUFRLFNBQU87QUFDbkMsZ0JBQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsZ0JBQU0sU0FBUyxJQUFJLENBQUM7QUFDcEIsZ0JBQU0sUUFBUSxNQUFNLFFBQVEsSUFBSTtBQUNoQyxjQUFJLFVBQVUsSUFBSTtBQUNoQixrQkFBTSxJQUFJLE1BQU0sa0JBQWtCLElBQUksRUFBRTtBQUFBLFVBQzFDO0FBQ0EsaUJBQU8sS0FBSyxNQUFNO0FBQ2xCLGtCQUFRLEtBQUssS0FBSztBQUFBLFFBQ3BCLENBQUM7QUFFRCxjQUFNLFFBQVEsT0FBTyxJQUFJLE9BQU87QUFDaEMsZUFBTyxDQUFDLFFBQVEsU0FBUyxLQUFLO0FBQUEsTUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BWUEsa0NBQ0ksU0FBMkIsYUFBaUMsZUFBb0Q7QUFDbEgsY0FBTSxZQUF1QyxDQUFDO0FBQzlDLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3ZDLG9CQUFVLEtBQUssWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUsscUJBQXFCLFFBQVEsQ0FBQyxDQUFDO0FBQUEsUUFDbkc7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUFBLE1BRUEsTUFBTSxnQkFBK0I7QUFDbkMsY0FBTSxjQUFjLEtBQUssU0FBUztBQUFBLE1BQ3BDO0FBQUEsTUFFQSxNQUFNLGFBQ0YsT0FBaUMsU0FDakMsU0FBMEU7QUFDNUUsY0FBTSxDQUFDLEVBQUUsY0FBYyxNQUFNLElBQUksS0FBSztBQUFBLFVBQ2xDO0FBQUEsVUFBTyxLQUFLO0FBQUEsVUFDWixDQUFDLEdBQUcsTUFBc0IscUJBQXFCLEdBQUcsTUFBTSxVQUFVLEtBQUssV0FBVyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFBQSxRQUFDO0FBRTFHLGNBQU0sQ0FBQyxhQUFhLGVBQWUsT0FBTyxJQUN0QyxLQUFLO0FBQUEsVUFDRDtBQUFBLFVBQVMsS0FBSztBQUFBLFVBQ2QsQ0FBQyxHQUFHLE1BQ0EsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLFdBQVcsS0FBSyxZQUFZLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFBSTtBQUV0RyxjQUFNLFVBQVUsTUFBTSxhQUFhLEtBQUssV0FBVyxjQUFjLFFBQVEsZUFBZSxTQUFTLE9BQU87QUFDeEcsZUFBTyxLQUFLLGtDQUFrQyxTQUFTLGFBQWEsYUFBYTtBQUFBLE1BQ25GO0FBQUEsTUFFQSxNQUFNLGlCQUFpQixTQUFxRDtBQUMxRSxjQUFNLGlCQUFpQixLQUFLLFdBQVcsT0FBTztBQUFBLE1BQ2hEO0FBQUEsTUFFQSxNQUFNLFlBQ0YsT0FBaUMsU0FDakMsU0FBMEU7QUFDNUUsY0FBTSxDQUFDLEVBQUUsY0FBYyxNQUFNLElBQUksS0FBSztBQUFBLFVBQ2xDO0FBQUEsVUFBTyxLQUFLO0FBQUEsVUFDWixDQUFDLEdBQUcsTUFBc0IscUJBQXFCLEdBQUcsTUFBTSxVQUFVLEtBQUssZUFBZSxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFBQSxRQUFDO0FBRTlHLGNBQU0sQ0FBQyxhQUFhLGVBQWUsT0FBTyxJQUN0QyxLQUFLO0FBQUEsVUFDRDtBQUFBLFVBQVMsS0FBSztBQUFBLFVBQ2QsQ0FBQyxHQUFHLE1BQ0EsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLFdBQVcsS0FBSyxnQkFBZ0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7QUFBQSxRQUFJO0FBRTFHLGNBQU0sVUFBVSxNQUFNLFlBQVksS0FBSyxXQUFXLGNBQWMsUUFBUSxlQUFlLFNBQVMsT0FBTztBQUN2RyxlQUFPLEtBQUssa0NBQWtDLFNBQVMsYUFBYSxhQUFhO0FBQUEsTUFDbkY7QUFBQSxNQUVBLE1BQU0sa0JBQWtCLGVBQXlDO0FBQy9ELGVBQU8sa0JBQWtCLEtBQUssV0FBVyxhQUFhO0FBQUEsTUFDeEQ7QUFBQSxNQUVBLE1BQU0scUJBQXFCLE9BQW1CLGVBQXVDO0FBQ25GLGNBQU0scUJBQXFCLEtBQUssV0FBVyxPQUFPLGFBQWE7QUFBQSxNQUNqRTtBQUFBLE1BQ0EsTUFBTSx3QkFBd0IsZUFBNEM7QUFDeEUsY0FBTSxlQUFlLE1BQU0sd0JBQXdCLEtBQUssV0FBVyxhQUFhO0FBQ2hGLGVBQU8scUJBQXFCLFlBQVk7QUFBQSxNQUMxQztBQUFBLE1BRUEsTUFBTSxVQUF5QjtBQUM3QixlQUFPLG9DQUFvQyxLQUFLLGNBQWMsS0FBSyxTQUFTO0FBQUEsTUFDOUU7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDaktBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRTSx1Q0FZTztBQXBCYjtBQUFBO0FBQUE7QUFLQTtBQUNBO0FBRUEsSUFBTSx3Q0FBTixjQUFvRCw4QkFBOEI7QUFBQSxNQUNoRixNQUFNLDZCQUNGLDRCQUErQyx1QkFDL0Msc0JBQXlDLDJCQUN6QyxTQUEyRTtBQUM3RSxjQUFNLFVBQVUsSUFBSSw2Q0FBNkM7QUFDakUsY0FBTSxRQUFRO0FBQUEsVUFDVjtBQUFBLFVBQTRCO0FBQUEsVUFBdUI7QUFBQSxVQUFzQjtBQUFBLFVBQTJCO0FBQUEsUUFBTztBQUMvRyxlQUFPLFFBQVEsUUFBUSxPQUFPO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBRU8sSUFBTSxjQUFjLElBQUksc0NBQXNDO0FBQUE7QUFBQTs7O0FDWnJFO0FBQ0E7QUFHQTs7O0FDTk8sSUFBTUUsV0FBVTs7O0FESXZCLElBQU8sY0FBUTtBQUtmLElBQUksT0FBMkI7QUFDN0IsUUFBTSxnQkFBZ0IsS0FBNEI7QUFDbEQsa0JBQWdCLFNBQVMsZUFBZSxHQUFHO0FBQzdDO0FBRUEsSUFBSSxNQUEwQjtBQUM1QixRQUFNQyxlQUFjLFFBQThCLEtBQW9DLGNBQ3BDLDRFQUFtQztBQUNyRixNQUFJLE9BQTRCO0FBQzlCLG9CQUFnQixVQUFVQSxjQUFhLENBQUM7QUFDeEMsb0JBQWdCLFNBQVNBLGNBQWEsQ0FBQztBQUFBLEVBQ3pDO0FBQ0Esa0JBQWdCLE9BQU9BLGNBQWEsRUFBRTtBQUN0QyxrQkFBZ0IsUUFBUUEsY0FBYSxFQUFFO0FBQ3pDO0FBRUEsT0FBTyxlQUFlQyxLQUFJLFVBQVUsT0FBTyxFQUFDLE9BQU9DLFVBQVMsWUFBWSxLQUFJLENBQUM7IiwKICAibmFtZXMiOiBbImkiLCAiZW52IiwgIlRlbnNvciIsICJUZW5zb3IiLCAiSW5mZXJlbmNlU2Vzc2lvbiIsICJUZW5zb3IiLCAiVHJhaW5pbmdTZXNzaW9uIiwgIkluZmVyZW5jZVNlc3Npb24iLCAiVGVuc29yIiwgIlRyYWluaW5nU2Vzc2lvbiIsICJlbnYiLCAiam9pbiIsICJjcHVzIiwgIndhc20iLCAid2FzbSIsICJ3YXNtIiwgInJlYWRGaWxlIiwgInJlYWRGaWxlIiwgImVudiIsICJ3YXNtIiwgInRlbnNvciIsICJlcnJvckNvZGUiLCAiaSIsICJpbml0aWFsaXppbmciLCAiaW5pdGlhbGl6ZWQiLCAiYWJvcnRlZCIsICJjb3B5RnJvbUV4dGVybmFsQnVmZmVyIiwgImNyZWF0ZVNlc3Npb24iLCAicmVsZWFzZVNlc3Npb24iLCAicnVuIiwgImVuZFByb2ZpbGluZyIsICJlbnYiLCAiVGVuc29yIiwgImNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIiLCAiY3JlYXRlU2Vzc2lvbiIsICJyZWxlYXNlU2Vzc2lvbiIsICJydW4iLCAiZW5kUHJvZmlsaW5nIiwgImVudiIsICJ3YXNtIiwgImkiLCAidmVyc2lvbiIsICJ3YXNtQmFja2VuZCIsICJlbnYiLCAidmVyc2lvbiJdCn0K